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値とする。

利用例

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

関連メソッド