5.10. mcombi 組合せ計算

f= パラメータで指定した項目について、 n= パラメータで指定した数の組み合せを求め、 a= パラメータで指定した項目名で出力する。 p オプションを指定することで順列として出力することも可能である。

パラメータ

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

入力データを指定する。

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

出力データを指定する。

a= : 型=str , 必須

新たに追加される項目の名前を指定する。

f= : 型=str , 必須

組合せを求める項目名リスト(複数項目指定可)を指定する。
ここで指定した項目の値の全組合せを出力する。

n= : 型=str , 必須

組合せの数を指定する。
組み合わせ数を大きくすると、出力レコードが爆発的に大きくなることに注意する。

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

ここで指定した項目(複数項目指定可)で並べ替えられた後、 f= で指定した項目の組み合わせを求める。

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

キー項目名リスト(複数項目指定可)
組合せを求める単位となる項目名リスト。

p= : 型=bool , 任意(default=False)

組合せでなく順列を求める。

dup= : 型=bool , 任意(default=False)

同一の値の組み合せも出力する

共通パラメータ

i= , o= , assert_diffSize= , assert_nullin= , 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'''customer,item
 6A,a1
 7A,a2
 8A,a3
 9B,a4
10B,a5
11''')

基本例

customer 項目を単位に、 item 項目の2アイテムの組み合わせを求め、 item1,item2 という項目名で出力する。 k=,f= で指定していない項目(ここでは item 項目)は、キーの最終行の値が出力される。

1nm.mcombi(k="customer", f="item", n="2", a="item1,item2", i="dat1.csv", o="rsl1.csv").run()
2### rsl1.csv の内容
3# customer%0,item,item1,item2
4# A,a3,a1,a2
5# A,a3,a1,a3
6# A,a3,a2,a3
7# B,a5,a4,a5

基本例2

dup=True オプションを指定すると同一のアイテムの組み合せも出力される。

 1nm.mcombi(k="customer", f="item", n="2", a="item1,item2", i="dat1.csv", o="rsl2.csv", dup=True).run()
 2### rsl2.csv の内容
 3# customer%0,item,item1,item2
 4# A,a3,a1,a1
 5# A,a3,a1,a2
 6# A,a3,a1,a3
 7# A,a3,a2,a2
 8# A,a3,a2,a3
 9# A,a3,a3,a3
10# B,a5,a4,a4
11# B,a5,a4,a5
12# B,a5,a5,a5

順列を求める例

customer 項目を単位に、 item 項目の2アイテムの順列を求め、 item1,item2 という項目名で出力する。

 1nm.mcombi(k="customer", f="item", n="2", a="item1,item2", p=True, i="dat1.csv", o="rsl3.csv").run()
 2### rsl3.csv の内容
 3# customer%0,item,item1,item2
 4# A,a3,a1,a2
 5# A,a3,a2,a1
 6# A,a3,a1,a3
 7# A,a3,a3,a1
 8# A,a3,a2,a3
 9# A,a3,a3,a2
10# B,a5,a4,a5
11# B,a5,a5,a4

順列を求める例

item 項目を降順に並べ替えた後、 item 項目の2アイテムの順列を求める。

 1nm.mcombi(k="customer", f="item", n="2", s="item%r", a="item1,item2", p=True, i="dat1.csv", o="rsl4.csv").run()
 2### rsl4.csv の内容
 3# customer%0,item%1r,item1,item2
 4# A,a1,a3,a2
 5# A,a1,a2,a3
 6# A,a1,a3,a1
 7# A,a1,a1,a3
 8# A,a1,a2,a1
 9# A,a1,a1,a2
10# B,a4,a5,a4
11# B,a4,a4,a5

関連メソッド