概要
- あるテストをするのにレコード数1000のCSVを作りたい
- ただし、ランダムに生成した整数を(1000レコード分)足し合わせたときに特定の数(今回は
32767
)にしなければならない
実装1
import random
def gen_int():
comb = []
for i in range(1,1001):
next_max_value = 32766-sum(comb)
if next_max_value == 0:
comb.append(0)
else:
comb.append(random.randint(0,next_max_value))
こういう風に書けば、1000レコード分足し合わせたときに32767になるのだが、、、中身を確認してみると途中から全部0
になっていてデータとして使い物にならなそう。
csv
27560
3412
1513
100
169
6
3
2
0
0
0
1
0
0
0
・
・
・
・
0
実装2
import random
import numpy as np
def gen_int():
value = []
np.random.seed(32)
value.append(np.random.uniform(0,65,998))
int_list = []
for i in value[0]:
if sum(int_list) >= 32766:
break
else:
int_list.append(int(i))
int_list.append(352)
しょうがないので書き直したが、uniform
の引数のチューニングに無駄に時間がかかってしまった上に、最後に足りない数(今回は352)をappendするという格好悪いやり方になってしまった。が、一応中身は期待するように出来上がった。
csv
・
・
・
・
29
32
16
47
36
50
34
0
8
60
25
6
5
37
352
まとめ
気の利いたやり方を考える時間が無いので今回はこんな感じで終わり。一応やりたいことはできたのだが格好悪い出来上がりになってしまったので、他に良いやり方があれば是非教えて下さい・・・。