5.26. mmvavg 移動平均の算出¶
移動平均(moving average)を算出する。 移動平均としては、単純移動平均( \(SMA\) )、線形荷重移動平均( \(WMA\) )、指数平滑移動平均( \(EMA\) )の3種類の移動平均が計算可能である。 ある時 \(t\) における値を \(x_t\) で表したとき、 \(m\) 期の各種移動平均は式( ef{eq:sma}, ef{eq:wma}, ef{eq:ema})で定義される。 egin{eqnarray} SMA_t= rac{1}{m} sum_{i=0}^{m-1} x_{t-i} label{eq:sma} end{eqnarray} egin{eqnarray} WMA_t=sum_{i=0}^{m-1} rac{m-i}{S} x_{t-i},S=sum_{i=1}^m i label{eq:wma} end{eqnarray} egin{eqnarray} EMA_t=lpha x_t + (1-lpha)EMA_{t-1} label{eq:ema} end{eqnarray}
パラメータ¶
i= : 型=str , 任意(default=標準入力)
入力データを指定する。
o= : 型=str , 任意(default=標準出力)
出力データを指定する。
s= : 型=str , 任意(default=)
ここで指定した項目(複数項目指定可)で並べ替えられた後、移動平均が計算される。q
オプションを指定しないとき、s=
パラメータは必須。
k= : 型=str , 任意(default=キーブレイク処理しない)
ここで指定された項目(複数項目指定可)を単位として集計する。
f= : 型=str , 必須
移動平均を求める項目名リスト(複数項目指定可)を指定する。
t= : 型=str , 任意(default=)
期間数を1以上の整数で指定する。exp
オプション指定時にalpha=
を指定すればt=
は指定できない。
w= : 型=bool , 任意(default=False)
線形加重移動平均を求める。
exp= : 型=bool , 任意(default=False)
指数平滑移動平均を求める。
alpha= : 型=str , 任意(default=)
exp
オプションが指定された時の平滑化係数を実数値で与える。省略時はalpha=2/(t=の値+1)
。
skip= : 型=str , 任意(default=)
出力を抑制する最初の行数。デフォルト値:skip=(t=の値-1)
,exp
オプションが指定された場合はskip=0
n= : 型=bool , 任意(default=False)
期間内にNULL値が1つでも含まれていると結果もNULL値とする。
共通パラメータ¶
i= , o= , assert_diffSize= , assert_nullkey= , assert_nullin= , assert_nullout= , nfn= , nfno= , x= , q= , tmppath= , precision=
利用例¶
importと入力データ(CSV)の準備
1import nysol.mcmd as nm 2 3with open('dat1.csv','w') as f: 4 f.write( 5'''id,value 61,5 72,1 83,3 94,4 105,4 116,6 127,1 138,4 149,7 15''') 16 17with open('dat2.csv','w') as f: 18 f.write( 19'''id,key,value 201,a,5 212,a,1 223,a,3 234,a,4 245,a,4 256,b,6 267,b,1 278,b,4 289,b,7 29''') 30 31with open('dat3.csv','w') as f: 32 f.write( 33'''key,value 34a,1 35a,2 36a,3 37a,4 38a,5 39b,6 40b,1 41b,4 42b,7 43''')
基本例
最初の行は期数に満たないため出力されない。
1nm.mmvavg(s="id", f="value", t="2", i="dat1.csv", o="rsl1.csv").run() 2### rsl1.csv の内容 3# id%0,value 4# 2,3 5# 3,2 6# 4,3.5 7# 5,4 8# 6,5 9# 7,3.5 10# 8,2.5 11# 9,5.5
基本例2
最初の行は期数に満たないため出力されない。
1nm.mmvavg(s="id", f="value", t="2", w=True, i="dat1.csv", o="rsl2.csv").run() 2### rsl2.csv の内容 3# id%0,value 4# 2,2.333333333 5# 3,2.333333333 6# 4,3.666666667 7# 5,4 8# 6,5.333333333 9# 7,2.666666667 10# 8,3 11# 9,6
基本例3
指数平滑移動平均( exp=True
)の場合は最初の行から出力される。
1nm.mmvavg(s="id", f="value", t="2", exp=True, i="dat1.csv", o="rsl3.csv").run() 2### rsl3.csv の内容 3# id%0,value 4# 1,5 5# 2,2.333333333 6# 3,2.777777778 7# 4,3.592592593 8# 5,3.864197531 9# 6,5.288065844 10# 7,2.429355281 11# 8,3.47645176 12# 9,5.82548392
キーを指定する例
1nm.mmvavg(s="key,id", k="key", f="value", t="2", i="dat2.csv", o="rsl4.csv").run() 2### rsl4.csv の内容 3# id,key,value 4# 2,a,3 5# 3,a,2 6# 4,a,3.5 7# 5,a,4 8# 7,b,3.5 9# 8,b,2.5 10# 9,b,5.5
指定した期に満たなくても出力する例
1nm.mmvavg(q=True, k="key", f="value", t="2", skip="0", i="dat3.csv", o="rsl5.csv").run() 2### rsl5.csv の内容 3# key,value 4# a,1 5# a,1.5 6# a,2.5 7# a,3.5 8# a,4.5 9# b,6 10# b,3.5 11# b,2.5 12# b,5.5
関連メソッド¶
mmvstats 移動窓の統計量の計算 : 平均だけでなく、各種統計量を指定可能。
mmvsim 移動窓の類似度計算 : 2変量の統計量を計算する。
mwindow スライド窓の生成 : 動窓のデータを作成するので、そのデータを使えば
mmvstats
で計算できない統計量も計算可能。