複数行をずらしながら複製していく。 移動平均の計算など、時系列データにおいて一定幅の窓を設定し、 その窓をずらしながらその窓を単位に何らかの処理(例えば平均)をする目的に利用する。 このような窓をスライド窓(sliding window)と呼ぶ。
Table 3.46: 入力データ
Table 3.47: wk=date:win t=2
Table 3.48: wk=date:win t=2 -r
|
Table 3.46に示される入力データは日別の集計値が4日分示されており、スーパーの売上推移や株価推移と考えればよい。 この入力データについて、2日間を窓サイズとして移動平均を計算することを考える。 入力データに示される日付4/6〜4/9についてサイズ2の窓を作成すると [(4/6,1),(4/7,2)], [(4/7,2),(4/8,3)], [(4/8,3),(4/9,4)]の3つの窓が作成される。 ここで‘[]’は一つの窓を示し、‘()’は行を示すものとする。 そしてこれらの窓のユニークキー(以下「窓キー」と呼ぶ)として、 各窓の日付の最大値(wk=で指定した項目の最終行の値)をwinという項目名で出力する(Table 3.47)。 窓キーを各窓の最小値(先頭行)とするには-rオプションを用いればよい(Table 3.48)。 あとは、出力結果(Table 3.47)に対してmavgを実行することで移動平均が計算される。 ちなみにmmvavgコマンドは、上述の一連の処理(mwindow+mavg)と同様の処理を行うが、mmvavgの方が高速である(約3.5倍速:200MB,1000万件データで窓サイズを10で実験した結果)。
mwindow wk= t= [k=key] [-r] [-n] [i=] [o=] [-assert_diffSize] [-assert_nullkey] [-nfn] [-nfno] [-x] [-q] [tmpPath=] [--help] [--helpl] [--version]
wk= |
出力データにおいて、窓をユニークに識別する値となる入力データ上の項目を指定する。 |
ここで指定した項目で並べ替えられたのちスライド窓を生成していくが、 |
|
降順で並べ替えるときは%r、数値として並べ替えるときは%nと追加する。 |
|
数値の降順で並べ替えるときは%nrと追加すればよい。 |
|
またコロンに続いて窓キーの項目名を指定しなければならない。複数項目を指定することもできる。 |
|
t= |
窓のサイズ(行数)を指定する。 |
k= |
ここで指定された項目の値を単位に窓の生成を行う。 |
-r |
窓における基準行を先頭行とする。指定がなければ最終行となる。 |
-n |
窓のサイズがt=で指定した行数に満たなくても出力する。 |
i= |
入力ファイル名 |
-nfn |
入力データの1行目を項目名行とみなさない。 |
$ more dat1.csv date,val 20130406,1 20130407,2 20130408,3 20130409,4 $ mwindow wk=date:win t=2 i=dat1.csv o=rsl1.csv #END# kgwindow i=dat1.csv o=rsl1.csv t=2 wk=date:win $ more rsl1.csv win%0,date,val 20130407,20130406,1 20130407,20130407,2 20130408,20130407,2 20130408,20130408,3 20130409,20130408,3 20130409,20130409,4
$ mwindow wk=date:win t=3 -r i=dat1.csv o=rsl2.csv #END# kgwindow -r i=dat1.csv o=rsl2.csv t=3 wk=date:win $ more rsl2.csv win%0,date,val 20130406,20130406,1 20130406,20130407,2 20130406,20130408,3 20130407,20130407,2 20130407,20130408,3 20130407,20130409,4
$ mwindow wk=date:win t=3 -r -n i=dat1.csv o=rsl3.csv #END# kgwindow -n -r i=dat1.csv o=rsl3.csv t=3 wk=date:win $ more rsl3.csv win%0,date,val 20130406,20130406,1 20130406,20130407,2 20130406,20130408,3 20130407,20130407,2 20130407,20130408,3 20130407,20130409,4 20130408,20130408,3 20130408,20130409,4 20130409,20130409,4
$ more dat2.csv store,date,val a,20130406,1 a,20130407,2 a,20130408,3 a,20130409,4 b,20130406,11 b,20130407,12 b,20130408,13 b,20130409,14 $ mwindow k=store wk=date:win t=2 i=dat2.csv o=rsl4.csv #END# kgwindow i=dat2.csv k=store o=rsl4.csv t=2 wk=date:win $ more rsl4.csv win%1,store%0,date,val 20130407,a,20130406,1 20130407,a,20130407,2 20130408,a,20130407,2 20130408,a,20130408,3 20130409,a,20130408,3 20130409,a,20130409,4 20130407,b,20130406,11 20130407,b,20130407,12 20130408,b,20130407,12 20130408,b,20130408,13 20130409,b,20130408,13 20130409,b,20130409,14
冒頭に示した移動平均の例では、窓における最終日を基準として平均を計算している。 時に、基準日を前日として移動平均を計算したいケースがある。 そういった場合はmslideで1日日付をずらしてから本コマンドを使えばよい。 その例を以下に示す。
$ mslide f=date:date2 s=date i=dat1.csv o=rsl5.csv #END# kgslide f=date:date2 i=dat1.csv o=rsl5.csv s=date $ more rsl5.csv date%0,val,date2 20130406,1,20130407 20130407,2,20130408 20130408,3,20130409 $ mwindow wk=date2:win t=2 i=rsl5.csv o=rsl6.csv #END# kgwindow i=rsl5.csv o=rsl6.csv t=2 wk=date2:win $ more rsl6.csv win%0,date,val,date2 20130408,20130406,1,20130407 20130408,20130407,2,20130408 20130409,20130407,2,20130408 20130409,20130408,3,20130409
mmvavg : 移動窓の平均(移動平均)に特化した計算コマンド。
mmvstats : 移動窓の各種統計量を計算する。