0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

シンプルなPythonで100万レコードのサンプルデータをcsvとして出力する

Posted at

概要

データ分析やシステムテストにおいて、大量のサンプルデータを生成することが求められることがあります。この記事では、Pythonを用いて100万レコードのサンプルデータを瞬時に、CSVファイルとして出力する方法を紹介します。

CSVのカラムとルール設定

今回、生成するCSVファイルはサイト利用者との通話データを想定しています。
以下の3つのカラムが含まれ、それぞれのルールに基づいて生成されます。

  1. サイトCV日時

    • 顧客がWebサイトでコンバージョン(購入や問い合わせなど)した日時。
    • ルール:
      • 2024年9月1日〜9月30日のランダムな日時を設定。
      • 例: 2024-09-10 12:34:56
  2. 初回通話日時

    • 顧客に対して初めて通話した日時。
    • ルール:
      • 50%の確率で値が設定され、残りの50%はnull
      • サイトCV日時より後で、10時〜20時の間にランダムに設定。
      • 例: 2024-09-10 15:00:00 または null
  3. 顧客成果判定

    • 顧客とのやり取りの成果。
    • ルール:
      • 初回通話日時がない場合は「失注」。
      • 初回通話日時がある場合、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スクリプトです。

generateSampleData.py
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)

スクリプトの実行方法

  1. generateSampleData.py という名前でファイルを保存します。

  2. ターミナル(もしくはコマンドプロンプト)を開き、ファイルが保存されているディレクトリに移動します。

    • 例: デスクトップにスクリプトを保存している場合は、以下のコマンドを実行します。
      cd ~/Desktop
      
  3. 次に、以下のコマンドを実行してスクリプトを動かします。
    実行時間は今回の場合だと10秒以下でした(M2 Macbook)。

    python generateSampleData.py
    

    pythonのバージョンによっては以下の場合もあります。

    python3 generateSampleData.py
    
  4. スクリプトが実行されると、デスクトップ(もしくはpythonファイルと同じディレクトリ)に sampleCustomerData.csv が生成されます。

    image.png
  5. csvを開き、ルールに沿って生成されていることを確認。

image.png

まとめ

このスクリプトを使えば、簡単に大量のサンプルデータを生成し、CSVファイルを生成できます。
生成データは、データベースの負荷テストや、機械学習モデルのトレーニング用として活用できます。

また、カラムの数や生成するデータの内容を変更することで、様々なシナリオに対応したサンプルデータを作成することも可能です。
例えば、カラムを追加してユーザー属性(年齢や地域など)を含めたり、異なる日付範囲でデータを生成することで、特定のマーケティングに沿ったデータを模倣して作成できます。

データ分析やシステムテストの効率化にぜひ活用してみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?