5.53. mslide 行ずらし¶
指定した項目の値を指定した行数ずらして出力する。 例えば、日別の株価データにおいて収益率(当日の株価/前日の株価)を計算するなど レコード間の演算を行いたい場合に利用する。 典型的な例を 表 5.11 〜 表 5.14 に示す。
date |
val |
---|---|
4/6 |
1 |
4/7 |
2 |
4/8 |
3 |
4/9 |
4 |
date |
val |
nextVal |
---|---|---|
4/6 |
1 |
2 |
4/7 |
2 |
3 |
4/8 |
3 |
4 |
date |
val |
nextVal |
---|---|---|
4/7 |
2 |
1 |
4/8 |
3 |
2 |
4/9 |
4 |
3 |
date |
val |
val1 |
val2 |
---|---|---|---|
4/6 |
1 |
2 |
3 |
4/7 |
2 |
3 |
4 |
表 5.11 に示される入力データは日別の集計値が4日分示されており、
スーパーの売上推移や株価推移と考えればよい。
この入力データについて、
日々の増加率(ここでは簡単のために「増加率=翌日の値/当日の値」とする)
を計算することを考える。
入力データに示される日付4/6〜4/9について、
それぞれの日の値(val)を1行上にずらし、
新しい項目(newVal)として出力した結果が 表 5.12 に示されている。
この出力結果に対してmcalコマンドでnextVal/valを計算すれば増加率が求められる。
ちなみに、4/9の行が消えているのは、4/9の行の次の行が存在しないからである。
存在しない時も-nオプションを指定することでNULL値を出力することができる。
表 5.12 は、下の行の値を上にずらしたが、-rオプションを指定することで、
逆に(上の行の値を下に)ずらすことも可能である( 表 5.13 )。
さらに、t=を指定することで、スライドの回数を指定することもできる。
t=2で実行した結果を 表 5.14 に示している。
これは " mslide f=val:val1 | mslide f=val1:val2
"のように、
mslideを複数回実行するのと同じ効果がある。
なお、 t=
を指定した場合、新たに出力される項目名は、
f=
で指定した項目名に、1から始まる連番が付与されたものとなる。
また t=
と l
オプションを併用することで、最後にずらした結果のみを出力することも可能である。
mslideの機能はmwindowによく似ている。
mslideはレコード間の演算を項目演算として実現し、
一方で、mwindowはレコード間演算を行集計として実現している。
よって、mslideした後の演算はmcalやmselが主役となり、
一方でmwindowしたのちはmsumやmavgなどのデータ集約のコマンドが主役となる。
パラメータ¶
i= : 型=str , 任意(default=標準入力)
入力データを指定する。
o= : 型=str , 任意(default=標準出力)
出力データを指定する。
f= : 型=str , 必須
ずらす対象となる項目名を指定する。複数項目指定可能。t=
を指定しないときは、コロンに続いて窓キーの項目名を指定しなければならない。
s= : 型=str , 任意(default=)
ここで指定した項目(複数項目指定可)で並べ替えられた後、行をずらす。q
オプションを指定しないとき、s=
パラメータは必須。
k= : 型=str , 任意(default=キーブレイク処理しない)
ここで指定された項目の値を単位に処理する。
t= : 型=str , 任意(default=)
ずらす回数を指定する。省略すればt=1
が設定される。
r= : 型=bool , 任意(default=False)
逆方向に(上の値を下に)ずらす。
n= : 型=bool , 任意(default=False)
次(前)の行がなくてもNULL値を出力する。
l= : 型=bool , 任意(default=False)
最後にずらした結果のみを出力する。
共通パラメータ¶
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'''date,val 620130406,1 720130407,2 820130408,3 920130409,4 10''')
基本例
1nm.mslide(s="date", f="val:newVal", i="dat1.csv", o="rsl1.csv").run() 2### rsl1.csv の内容 3# date%0,val,newVal 4# 20130406,1,2 5# 20130407,2,3 6# 20130408,3,4
逆にずらした例
1nm.mslide(s="date", f="val:newVal", r=True, i="dat1.csv", o="rsl2.csv").run() 2### rsl2.csv の内容 3# date%0,val,newVal 4# 20130407,2,1 5# 20130408,3,2 6# 20130409,4,3
複数回指定した場合
1nm.mslide(s="date", f="val", t="2", i="dat1.csv", o="rsl3.csv").run() 2### rsl3.csv の内容 3# date%0,val,val1,val2 4# 20130406,1,2,3 5# 20130407,2,3,4
最後にずらした項目だけを出力する例
1nm.mslide(s="date", f="val", t="2", l=True, i="dat1.csv", o="rsl4.csv").run() 2### rsl4.csv の内容 3# date%0,val,val2 4# 20130406,1,3 5# 20130407,2,4
複数項目名を変更して出力する例
1nm.mslide(s="date", f="date:d_,val:v_", t="2", i="dat1.csv", o="rsl5.csv").run() 2### rsl5.csv の内容 3# date%0,val,d_1,d_2,v_1,v_2 4# 20130406,1,20130407,20130408,2,3 5# 20130407,2,20130408,20130409,3,4