5.14. m2cross 1対Nのクロス集計¶
1対Nのクロス集計を行う。
s=
を指定した場合には項目の値が項目名となるように横に展開され、
f=
で指定した項目がセルとして出力される。
a=
を指定した場合(2項目指定)には
指定した値が項目名となり、
1項目に f=
で指定した項目名が、
2項目に f=
で指定した項目値がそれぞれ縦展開される
k=
が指定されていた場合には、
指定した値が行idとなり、id単位で展開される。
パラメータ¶
i= : 型=str , 任意(default=標準入力)
入力データを指定する。
o= : 型=str , 任意(default=標準出力)
出力データを指定する。
fixfld= : 型=str , 任意(default=)
横に展開する際、データがない場合に追加する項目名を指定する。
f= : 型=str , 必須
ここで指定された項目の値がセルの値として出力される。a=を使用するときのみ複数項目指定可。
s= : 型=str , 任意(default=)
列項目名に展開する項目を指定する。ここで指定された項目の値が項目名として出力される。
a= : 型=str , 任意(default=)
2項目指定する。1項目目にf=
で指定した項目名がデータとして展開される項目名を指定する。2項目目にf=
で指定した項目値の項目名を指定する
k= : 型=str , 任意(default=キーブレイク処理しない)
キー項目名リストここで指定した項目を単位に展開をおこなう。
v= : 型=str , 任意(default=)
NULL値置換文字列NULL値があった場合、v=
パラメータで指定する置換文字列により、項目の値を置換する。
共通パラメータ¶
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'''item,date,quantity 6A,20081201,1 7A,20081202,2 8A,20081203,3 9B,20081201,4 10B,20081203,5 11''') 12 13with open('dat2.csv','w') as f: 14 f.write( 15'''item,week,quantity 16A,Monday,1 17A,Tuesday,2 18A,Wednesday,3 19B,Thursday,4 20B,Friday,5 21''')
基本例
item
項目を単位に date
項目を横に展開し、
quantity
項目を出力する。
1nm.m2cross(k="item", f="quantity", s="date", i="dat1.csv", o="rsl1.csv").run() 2### rsl1.csv の内容 3# item%0,20081201,20081202,20081203 4# A,1,2,3 5# B,4,,5
元の入力データに戻す例
例1の出力結果を元に戻すには、同じく m2cross
を以下のよう用いればよい。
1nm.m2cross(f="2008*", a="date,quantity", i="rsl1.csv", o="rsl2.csv").run() 2### rsl2.csv の内容 3# item%0,date,quantity 4# A,20081201,1 5# A,20081202,2 6# A,20081203,3 7# B,20081201,4 8# B,20081202, 9# B,20081203,5
並びを逆順する例
横に展開する項目名の並びを逆順にする。
1nm.m2cross(k="item", f="quantity", s="date%r", i="dat1.csv", o="rsl3.csv").run() 2### rsl3.csv の内容 3# item%0,20081203,20081202,20081201 4# A,3,2,1 5# B,5,,4
データがない場合に項目を追加する例
横に展開する際に、データがない場合に項目を追加する"
1nm.m2cross(k="item", f="quantity", s="week", i="dat2.csv", fixfld="Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", o="rsl4.csv").run() 2### rsl4.csv の内容 3# item%0,Friday,Monday,Saturday,Sunday,Thursday,Tuesday,Wednesday 4# A,,1,,,,2,3 5# B,5,,,,4,,
関連メソッド¶
mcross クロス集計 : イメージは同じだが、
mcross
はN対Nクロス集計として出力する。