5.41. mrand 擬似乱数

0.0から1.0の範囲の実数の擬似乱数、もしくは範囲指定による整数の擬似乱数を生成し、 a= パラメータで指定した項目名で出力する。 乱数の生成にはメルセンヌ・ツイスター法を利用している (href{http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html}{原作者のページ} , href{http://www.boost.org/doc/libs/1_54_0/doc/html/boost_random.html}{boostライブラリ})。

パラメータ

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

入力データを指定する。

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

出力データを指定する。

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

指定したキー項目について、同じキー値には同じ乱数値が振られる。

a= : 型=str , 必須

新たに追加される項目の名前を指定する。【但し、-nfn,-nfnoオプション指定時は必要なし】

max= : 型=str , 任意(default=INT_MAX)

乱数の最大値
0〜 \(2^{32}\) (約21億)の範囲の整数が指定可能
このパラメータを指定するときは int オプションも指定しなければならない。

min= : 型=str , 任意(default=0)

整数乱数の最小値
0〜 \(2^{32}\) (約21億)の範囲の整数が指定可能
このパラメータを指定するときは int オプションも指定しなければならない。

S= : 型=str , 任意(default=現在時刻)

乱数の種
同じ乱数の種を指定すれば、同じ乱数系列となる。
S= を指定しなければ、時刻(ミリ(1/1000秒単位)に応じた異なる乱数の種が利用される。
指定可能な乱数の種(-2147483648〜2147483647)

int= : 型=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
 6A
 7B
 8C
 9D
10E
11''')
12
13with open('dat2.csv','w') as f:
14  f.write(
15'''customer
16A
17A
18A
19B
20B
21C
22D
23D
24D
25''')

基本例

0.0から1.0の範囲の実数乱数を生成する。

1nm.mrand(a="rand", i="dat1.csv", o="rsl1.csv").run()
2### rsl1.csv の内容
3# customer,rand
4# A,0.2326046587
5# B,0.8796894355
6# C,0.4733951823
7# D,0.1713104991
8# E,0.9858783041

基本例2

-intで整数乱数

1nm.mrand(a="rand", int=True, i="dat1.csv", o="rsl2.csv").run()
2### rsl2.csv の内容
3# customer,rand
4# A,1960666384
5# B,1548479388
6# C,303832552
7# D,221426400
8# E,1692666423

最小値、最大値を決めた乱数の生成

最小値が10、最大値が100の整数の乱数を生成し、 rand という項目名で出力する。

1nm.mrand(a="rand", int=True, min="10", max="100", S="1", i="dat1.csv", o="rsl3.csv").run()
2### rsl3.csv の内容
3# customer,rand
4# A,47
5# B,100
6# C,75
7# D,94
8# E,10

キー単位の乱数生成

以下の例は、顧客 A,B,C,D の4人について同じ顧客には同じ乱数値を振る。

 1nm.mrand(k="customer", int=True, min="0", max="1", a="rand", i="dat2.csv", o="rsl4.csv").run()
 2### rsl4.csv の内容
 3# customer%0,rand
 4# A,0
 5# A,0
 6# A,0
 7# B,1
 8# B,1
 9# C,1
10# D,0
11# D,0
12# D,0

関連メソッド