5.46. mselrand ランダムに行を選択

c= パラメータもしくは p= パラメータで指定した行数をランダムに選択する(非復元抽出)。 k= を指定した場合、同一キーの行から指定の行数をランダムに選択し、 また同時に B オプションを指定すると、キー単位で選択する。 乱数の生成にはメルセンヌ・ツイスター法を利用している

パラメータ

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

入力データを指定する。

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

出力データを指定する。

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

各キーの値毎に選択する行数を指定する。
p= パラメータを指定しない場合の指定は必ず指定する必要がある。

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

各キーの値毎に選択する割合をパーセントで指定する。
c= パラメータを指定しない場合の指定は必ず指定する必要がある。

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

指定する項目(複数項目指定可)の値が同じ行から、一定行数ランダムに選択する。

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

同じ乱数の種は同じシーケンスの乱数をふる。
指定しない場合は、時刻に応じた異なる乱数の種が利用される。
指定可能な乱数の種(-2147483648〜2147483647)

u= : 型=str , 任意(default=出力しない)

指定の条件に一致しない行を出力するデータを指定する。

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

キー単位選択

共通パラメータ

i= , o= , assert_diffSize= , assert_nullkey= , 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,date,amount
 6A,20081201,10
 7A,20081207,20
 8A,20081213,30
 9B,20081002,40
10B,20081209,50
11''')
12
13with open('dat2.csv','w') as f:
14  f.write(
15'''customer,date,amount
16A,20081201,10
17A,20081207,20
18A,20081213,30
19B,20081002,40
20B,20081209,50
21C,20081210,60
22D,20081201,70
23D,20081205,80
24D,20081209,90
25''')

基本例

一人の顧客につきランダムに1行を選択する。

1nm.mselrand(k="customer", c="1", S="1", i="dat1.csv", o="rsl1.csv").run()
2### rsl1.csv の内容
3# customer%0,date,amount
4# A,20081201,10
5# B,20081002,40

ランダムに一定割合の行を選択

一人の顧客につきランダムに50%の行を選択する。 また、それ以外の不一致データは oth2.csvと いうファイルに出力する。

 1nm.mselrand(k="customer", p="50", S="1", u="oth2.csv", i="dat1.csv", o="rsl2.csv").run()
 2### oth2.csv の内容
 3# customer%0,date,amount
 4# A,20081207,20
 5# A,20081213,30
 6# B,20081209,50
 7### rsl2.csv の内容
 8# customer%0,date,amount
 9# A,20081201,10
10# B,20081002,40

キー単位の選択

以下の例は、顧客 A,B,C,D の4人からランダムに2人を選ぶ。 顧客 D が選ばれると、顧客 D の行は全て出力される。

1nm.mselrand(k="customer", c="2", S="1", B=True, i="dat2.csv", o="rsl3.csv").run()
2### rsl3.csv の内容
3# customer%0,date,amount
4# C,20081210,60
5# D,20081201,70
6# D,20081205,80
7# D,20081209,90

関連メソッド