Previous: mvuniq ベクトル要素の単一化 Up: コマンドリファレンス Next: mxml2csv xmlからcsvへの変換 MCMD2
MCMD2 : コマンドリファレンス : mwindow スライド窓の生成

3.80 mwindow スライド窓の生成

複数行をずらしながら複製していく。 移動平均の計算など、時系列データにおいて一定幅の窓を設定し、 その窓をずらしながらその窓を単位に何らかの処理(例えば平均)をする目的に利用する。 このような窓をスライド窓(sliding window)と呼ぶ。

典型的な例をTable 3.46〜3.48に示す。

Table 3.46: 入力データ

date

val

4/6

1

4/7

2

4/8

3

4/9

4

Table 3.47: wk=date:win t=2

win

date

val

4/7

4/6

1

4/7

4/7

2

4/8

4/7

2

4/8

4/8

3

4/9

4/8

3

4/9

4/9

4

Table 3.48: wk=date:win t=2 -r

win

date

val

4/6

4/6

1

4/6

4/7

2

4/7

4/7

2

4/7

4/8

3

4/8

4/8

3

4/8

4/9

4

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行目を項目名行とみなさない。

利用例

例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

例2: 基準行を先頭にした例

$ 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

例3: 指定行数に満たない窓も出力する例

$ 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

例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

例5: 前日までの移動平均を求める

冒頭に示した移動平均の例では、窓における最終日を基準として平均を計算している。 時に、基準日を前日として移動平均を計算したいケースがある。 そういった場合は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 : 移動窓の各種統計量を計算する。

Previous: mvuniq ベクトル要素の単一化 Up: コマンドリファレンス Next: mxml2csv xmlからcsvへの変換 MCMD2