やりたいこと
Excelでダミーデータを作りたいのですが、簡単な方法がないのかを探していました。
以前、このような記事を見つけていいなと思っていたのですが
randarray()
の場合、完全にランダムになってしまいます。
今回作りたいダミーデータは、実際の業務における「製品コード」のようなもので、その「製品コード」をランダムで並べたいんですよね。ちょうど以下のようなイメージです。
ソリューション
いい感じのものがなかったので、書いてしまいました。
rand_excel.py
import random
import string
import numpy as np
import pandas as pd
# 作るファイル名
out_file = 'rand_sheet.xlsx'
# 作る行数
out_lows = 100
# num文字のランダム文字列を作成
def make_random_str(num):
# 英数字をすべて取得
dat = string.digits + string.ascii_lowercase + string.ascii_uppercase
return _get_random_dat(num, dat)
# num桁のランダム数列を作成
def make_random_int(num):
# 数字をすべて取得
dat = string.digits
return _get_random_dat(num, dat)
# __Base__
def _get_random_dat(num, dat):
# 英数字からランダムに取得
return ''.join([random.choice(dat) for i in range(num)])
# X文字のランダム文字列(Yパターン)を合計Z個生成する
def make_random_str_list(X, Y, Z, num_only=False):
random_str_length = X
random_vals = Y
str_vals = Z + 1
# ランダム文字列を何パターン作るか
random_str_ary = []
for i in range(random_vals):
if(num_only == True):
my_random_str = make_random_int(random_str_length)
else:
my_random_str = make_random_str(random_str_length)
random_str_ary.append(my_random_str)
# ランダム文字列をパターンの中から何個生成するか
for j in range(str_vals):
new_str_ary = np.random.choice(random_str_ary, j)
return new_str_ary
# ここからメイン
# DataFrameを作る
df = pd.DataFrame()
df['Code'] = make_random_str_list(8, 4, out_lows)
df['Price'] = make_random_str_list(4, 10, out_lows, True)
df['ManagingString'] = make_random_str_list(32, 10, out_lows)
df.to_excel(out_file, index=False)
print(df)
アウトプットの例
当然ですが、ランダムと言っているくらいなので毎回異なります。
おわりに
「num_only
フラグを立てても返り値が文字列になってしまうので、費用なのにExcel側でひと手間必要」とか、不完全なコードではありますが、とりあえず今のところこれで足りてるので、必要な方はこれをベースにご自由に改造いただければと思います。
(おわり)