5.13. mcross クロス集計

クロス集計を行う。 s= で指定した項目の値が項目名となるように横に展開され、 k= で指定した値が行idとなり、 f= で指定した項目がセルとして出力される。

パラメータ

i= : 型=str , 任意(default=標準入力)

入力データを指定する。

o= : 型=str , 任意(default=標準出力)

出力データを指定する。

f= : 型=str , 必須

ここで指定された項目の値がセルの値として出力される。
複数項目指定すると、複数行に展開される。
それら複数行を識別するための項目として fld 項目が出力され、
f= で指定した項目名が値として出力される。
この fld という項目名を変更したい場合は a= パラメータを使う。

s= : 型=str , 条件付き必須( q オプションの指定がない場合)

列項目名に展開する項目を指定する。
ここで指定された項目の値が項目名として出力される。

a= : 型=str , 任意(default=)

f= で指定した項目名がデータとして展開される項目名を指定する。
省略した場合は fld という項目名で出力される。

k= : 型=str , 任意(default=キーブレイク処理しない)

キー項目名リスト
ここで指定した項目を単位に横展開をおこなう。

v= : 型=str , 任意(default=)

NULL値置換文字列
NULL値があった場合、 v= パラメータで指定する置換文字列により、項目の値を置換する。

利用例

importと入力データ(CSV)の準備

 1import nysol.mcmd as nm
 2
 3with open('dat1.csv','w') as f:
 4  f.write(
 5'''item,date,quantity,price
 6A,20081201,1,10
 7A,20081202,2,20
 8A,20081203,3,30
 9B,20081201,4,40
10B,20081203,5,50
11''')

基本例

item 項目を単位に date 項目を横に展開し、 quantity 項目を出力する。

1nm.mcross(k="item", f="quantity", s="date", i="dat1.csv", o="rsl1.csv").run()
2### rsl1.csv の内容
3# item%0,fld,20081201,20081202,20081203
4# A,quantity,1,2,3
5# B,quantity,4,,5

元の入力データに戻す例

例1の出力結果を元に戻すには、同じく mcross を以下のよう用いればよい。

1nm.mcross(k="item", f="2008*", s="fld", a="date", 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

複数の値を出力

quantity,price の2項目を出力する。

1nm.mcross(k="item", f="quantity,price", s="date", i="dat1.csv", o="rsl3.csv").run()
2### rsl3.csv の内容
3# item%0,fld,20081201,20081202,20081203
4# A,quantity,1,2,3
5# A,price,10,20,30
6# B,quantity,4,,5
7# B,price,40,,50

並びを逆順する例

横に展開する項目名の並びを逆順にする。

1nm.mcross(k="item", f="quantity,price", s="date%r", i="dat1.csv", o="rsl4.csv").run()
2### rsl4.csv の内容
3# item%0,fld,20081203,20081202,20081201
4# A,quantity,3,2,1
5# A,price,30,20,10
6# B,quantity,5,,4
7# B,price,50,,40

関連メソッド