概要
データ分析やシステムテストにおいて、大量のサンプルデータを生成することが求められることがあります。この記事では、Pythonを用いて100万レコードのサンプルデータを瞬時に、CSVファイルとして出力する方法を紹介します。
CSVのカラムとルール設定
今回、生成するCSVファイルはサイト利用者との通話データを想定しています。
以下の3つのカラムが含まれ、それぞれのルールに基づいて生成されます。
-
サイトCV日時
- 顧客がWebサイトでコンバージョン(購入や問い合わせなど)した日時。
-
ルール:
- 2024年9月1日〜9月30日のランダムな日時を設定。
- 例:
2024-09-10 12:34:56
-
初回通話日時
- 顧客に対して初めて通話した日時。
-
ルール:
- 50%の確率で値が設定され、残りの50%は
null
。 - サイトCV日時より後で、10時〜20時の間にランダムに設定。
- 例:
2024-09-10 15:00:00
またはnull
- 50%の確率で値が設定され、残りの50%は
-
顧客成果判定
- 顧客とのやり取りの成果。
-
ルール:
- 初回通話日時がない場合は「失注」。
- 初回通話日時がある場合、
null
、「失注」、「受注」のいずれかがランダムに設定。 - 例:
失注
,受注
,null
サンプル
サイトCV日時 | 初回通話日時 | 顧客成果判定 |
---|---|---|
2024-09-01 14:25:47 | 2024-09-01 15:30:00 | 受注 |
2024-09-05 09:10:12 | 失注 | |
2024-09-12 11:45:00 | 2024-09-12 18:00:00 | 失注 |
2024-09-15 16:30:20 | 2024-09-15 19:00:00 | 受注 |
2024-09-28 20:15:35 | 失注 |
Pythonスクリプト
以下は、サンプルデータを生成し、CSVに保存するPythonスクリプトです。
import pandas as pd
import random
import datetime
def generate_csv(num_rows=1000000):
# 日付範囲(2024年9月1日から9月30日まで)
start_date = datetime.datetime(2024, 9, 1)
end_date = datetime.datetime(2024, 9, 30)
# データフレームの作成
data = {'サイトCV日時': [], '初回通話日時': [], '顧客成果判定': []}
for _ in range(num_rows):
# サイトCV日時を生成
cv_datetime = pd.Timestamp(start_date) + pd.Timedelta(seconds=random.randint(0, (end_date - start_date).total_seconds()))
data['サイトCV日時'].append(cv_datetime)
# 初回通話日時(50%の確率で生成、存在する場合はCV日時より後の10時〜20時に設定)
if random.random() < 0.5:
call_datetime = cv_datetime + pd.Timedelta(hours=random.randint(1, 10))
call_datetime = call_datetime.replace(hour=random.randint(10, 20), minute=0, second=0)
data['初回通話日時'].append(call_datetime)
# 顧客成果判定をランダムに設定(null、失注、受注)
result = random.choice([None, '失注', '受注'])
else:
data['初回通話日時'].append(None)
result = '失注'
data['顧客成果判定'].append(result)
# DataFrameに変換し、デスクトップにCSVを保存
df = pd.DataFrame(data)
df.to_csv('~/Desktop/sampleCustomerData.csv', index=False) # 生成されるCSVの名称
# レコード数を指定してCSVを生成
generate_csv(1000000)
スクリプトの実行方法
-
generateSampleData.py
という名前でファイルを保存します。 -
ターミナル(もしくはコマンドプロンプト)を開き、ファイルが保存されているディレクトリに移動します。
- 例: デスクトップにスクリプトを保存している場合は、以下のコマンドを実行します。
cd ~/Desktop
- 例: デスクトップにスクリプトを保存している場合は、以下のコマンドを実行します。
-
次に、以下のコマンドを実行してスクリプトを動かします。
実行時間は今回の場合だと10秒以下でした(M2 Macbook)。python generateSampleData.py
pythonのバージョンによっては以下の場合もあります。
python3 generateSampleData.py
-
スクリプトが実行されると、デスクトップ(もしくはpythonファイルと同じディレクトリ)に
sampleCustomerData.csv
が生成されます。 -
csvを開き、ルールに沿って生成されていることを確認。
まとめ
このスクリプトを使えば、簡単に大量のサンプルデータを生成し、CSVファイルを生成できます。
生成データは、データベースの負荷テストや、機械学習モデルのトレーニング用として活用できます。
また、カラムの数や生成するデータの内容を変更することで、様々なシナリオに対応したサンプルデータを作成することも可能です。
例えば、カラムを追加してユーザー属性(年齢や地域など)を含めたり、異なる日付範囲でデータを生成することで、特定のマーケティングに沿ったデータを模倣して作成できます。
データ分析やシステムテストの効率化にぜひ活用してみてください!