Previous: msim 二変数間の類似度の計算 Up: コマンドリファレンス Next: msortf レコードの並べ換え MCMD2
MCMD2 : コマンドリファレンス : mslide 行ずらし

3.57 mslide 行ずらし

指定した項目の値を指定した行数ずらして出力する。 例えば、日別の株価データにおいて収益率(当日の株価/前日の株価)を計算するなど レコード間の演算を行いたい場合に利用する。

典型的な例をTable 3.27〜3.30に示す。

Table 3.27: 入力データ

date

val

4/6

1

4/7

2

4/8

3

4/9

4

Table 3.28: f=val:nextVal

date

val

nextVal

4/6

1

2

4/7

2

3

4/8

3

4

Table 3.29: f=val:nextVal -r

date

val

nextVal

4/7

2

1

4/8

3

2

4/9

4

3

Table 3.30: f=val t=2

date

val

val1

val2

4/6

1

2

3

4/7

2

3

4

Table 3.27に示される入力データは日別の集計値が4日分示されており、 スーパーの売上推移や株価推移と考えればよい。 この入力データについて、 日々の増加率(ここでは簡単のために「増加率=翌日の値/当日の値」とする) を計算することを考える。 入力データに示される日付4/6〜4/9について、 それぞれの日の値(val)を1行上にずらし、 新しい項目(newVal)として出力した結果がTable 3.28に示されている。 この出力結果に対してmcalコマンドでnextVal/valを計算すれば増加率が求められる。 ちなみに、4/9の行が消えているのは、4/9の行の次の行が存在しないからである。 存在しない時も-nオプションを指定することでNULL値を出力することができる。

Table 3.28は、下の行の値を上にずらしたが、-rオプションを指定することで、 逆に(上の行の値を下に)ずらすことも可能である(Table 3.29)。 さらに、t=を指定することで、スライドの回数を指定することもできる。 t=2で実行した結果をTable 3.30に示している。 これは "mslide f=val:val1 | mslide f=val1:val2"のように、 mslideを複数回実行するのと同じ効果がある。 なお、t=を指定した場合、新たに出力される項目名は、 f=で指定した項目名に、1から始まる連番が付与されたものとなる。 またt=と-lを併用することで、最後にずらした結果のみを出力することも可能である。

mslideの機能はmwindowによく似ている。 mslideはレコード間の演算を項目演算として実現し、 一方で、mwindowはレコード間演算を行集計として実現している。 よって、mslideした後の演算はmcalやmselが主役となり、 一方でmwindowしたのちはmsumやmavgなどのデータ集約のコマンドが主役となる。

書式

mslide f= [s=] [k=key] [t=] [-r] [-n] [-l] [i=] [o=] [-assert_diffSize] [-assert_nullkey] [-assert_nullin] [-assert_nullout] [-nfn] [-nfno] [-x] [-q] [tmpPath=] rverb|[–help]| rverb|[–helpl]| [--version]

f=

ずらす対象となる項目名を指定する。複数項目指定可能。

 

t=を指定しないときは、コロンに続いて窓キーの項目名を指定しなければならない。

s=

ここで指定した項目(複数項目指定可)で並べ替えられた後、行をずらす。

 

-qオプションを指定しないとき、s=パラメータは必須。

k=

ここで指定された項目の値を単位に処理する。

t=

ずらす回数を指定する。省略すればt=1が設定される。

-r

逆方向に(上の値を下に)ずらす。

-n

次(前)の行がなくてもNULL値を出力する。

-l

最後にずらした結果のみを出力する。

利用例

例1: 基本例

$ more dat1.csv
date,val
20130406,1
20130407,2
20130408,3
20130409,4
$ mslide s=date f=val:newVal i=dat1.csv o=rsl1.csv
#END# kgslide f=val:newVal i=dat1.csv o=rsl1.csv s=date
$ more rsl1.csv
date%0,val,newVal
20130406,1,2
20130407,2,3
20130408,3,4

例2: 逆にずらした例

$ mslide s=date f=val:newVal -r i=dat1.csv o=rsl2.csv
#END# kgslide -r f=val:newVal i=dat1.csv o=rsl2.csv s=date
$ more rsl2.csv
date%0,val,newVal
20130407,2,1
20130408,3,2
20130409,4,3

例3: 複数回指定した場合

$ mslide s=date f=val t=2 i=dat1.csv o=rsl3.csv
#END# kgslide f=val i=dat1.csv o=rsl3.csv s=date t=2
$ more rsl3.csv
date%0,val,val1,val2
20130406,1,2,3
20130407,2,3,4

例4: 最後にずらした項目だけを出力する例

$ mslide s=date f=val t=2 -l i=dat1.csv o=rsl4.csv
#END# kgslide -l f=val i=dat1.csv o=rsl4.csv s=date t=2
$ more rsl4.csv
date%0,val,val2
20130406,1,3
20130407,2,4

例5: 複数項目名を変更して出力する例

$ mslide s=date f=date:d_,val:v_ t=2 i=dat1.csv o=rsl5.csv
#END# kgslide f=date:d_,val:v_ i=dat1.csv o=rsl5.csv s=date t=2
$ more rsl5.csv
date%0,val,d_1,d_2,v_1,v_2
20130406,1,20130407,20130408,2,3
20130407,2,20130408,20130409,3,4

関連コマンド

Previous: msim 二変数間の類似度の計算 Up: コマンドリファレンス Next: msortf レコードの並べ換え MCMD2