「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > faker および pandas Python ライブラリを使用してテスト用の合成データを作成する

faker および pandas Python ライブラリを使用してテスト用の合成データを作成する

2024 年 11 月 7 日に公開
ブラウズ:647

導入:
データ駆動型アプリケーションには包括的なテストが不可欠ですが、多くの場合、常に適切なデータセットが利用できるとは限りません。 Web アプリケーション、機械学習モデル、バックエンド システムのいずれを開発している場合でも、適切な検証と堅牢なパフォーマンスの確保には、現実的で構造化されたデータが不可欠です。現実世界のデータの取得は、プライバシー上の懸念、ライセンス制限、または単に関連データが利用できないことにより制限される場合があります。ここで合成データが価値を持ちます。

このブログでは、Python を使用して次のようなさまざまなシナリオの合成データを生成する方法を検討します。

  1. 相互関連テーブル: 1 対多の関係を表します。
  2. 階層データ: 組織構造でよく使用されます。
  3. 複雑な関係: 登録システムにおける多対多の関係など。

faker ライブラリと pandas ライブラリを活用して、これらのユースケース向けの現実的なデータセットを作成します。


例 1: 顧客と注文の合成データの作成 (1 対多の関係)

多くのアプリケーションでは、データは外部キー関係を持つ複数のテーブルに保存されます。顧客とその注文の合成データを生成してみましょう。顧客は 1 対多の関係を表す複数の注文を行うことができます。

顧客テーブルの生成

Customers テーブルには、CustomerID、名前、電子メール アドレスなどの基本情報が含まれています。

import pandas as pd
from faker import Faker
import random

fake = Faker()

def generate_customers(num_customers):
    customers = []
    for _ in range(num_customers):
        customer_id = fake.uuid4()
        name = fake.name()
        email = fake.email()
        customers.append({'CustomerID': customer_id, 'CustomerName': name, 'Email': email})
    return pd.DataFrame(customers)

customers_df = generate_customers(10)

Using faker and pandas Python Libraries to Create Synthetic Data for Testing

このコードは、Faker を使用して現実的な名前と電子メール アドレスを作成する 10 人のランダムな顧客を生成します。

注文テーブルの生成

ここで、各注文が CustomerID を通じて顧客に関連付けられる Orders テーブルを生成します。

def generate_orders(customers_df, num_orders):
    orders = []
    for _ in range(num_orders):
        order_id = fake.uuid4()
        customer_id = random.choice(customers_df['CustomerID'].tolist())
        product = fake.random_element(elements=('Laptop', 'Phone', 'Tablet', 'Headphones'))
        price = round(random.uniform(100, 2000), 2)
        orders.append({'OrderID': order_id, 'CustomerID': customer_id, 'Product': product, 'Price': price})
    return pd.DataFrame(orders)

orders_df = generate_orders(customers_df, 30)

Using faker and pandas Python Libraries to Create Synthetic Data for Testing

この場合、Orders テーブルは、CustomerID を使用して各注文を顧客にリンクします。各顧客は複数の注文を出し、1 対多の関係を形成できます。


例 2: 部門と従業員の階層データの生成

階層データは、部門に複数の従業員がいる組織環境でよく使用されます。各部門に複数の従業員がいる組織をシミュレートしてみましょう。

部門テーブルの生成

Departments テーブルには、各部門の一意のDepartmentID、名前、およびマネージャーが含まれています。

def generate_departments(num_departments):
    departments = []
    for _ in range(num_departments):
        department_id = fake.uuid4()
        department_name = fake.company_suffix()
        manager = fake.name()
        departments.append({'DepartmentID': department_id, 'DepartmentName': department_name, 'Manager': manager})
    return pd.DataFrame(departments)

departments_df = generate_departments(10)

Using faker and pandas Python Libraries to Create Synthetic Data for Testing

従業員テーブルの生成

次に、Employees テーブルを生成します。ここで、各従業員は、DepartmentID を介して部門に関連付けられます。

def generate_employees(departments_df, num_employees):
    employees = []
    for _ in range(num_employees):
        employee_id = fake.uuid4()
        employee_name = fake.name()
        email = fake.email()
        department_id = random.choice(departments_df['DepartmentID'].tolist())
        salary = round(random.uniform(40000, 120000), 2)
        employees.append({
            'EmployeeID': employee_id,
            'EmployeeName': employee_name,
            'Email': email,
            'DepartmentID': department_id,
            'Salary': salary
        })
    return pd.DataFrame(employees)

employees_df = generate_employees(departments_df, 100)

Using faker and pandas Python Libraries to Create Synthetic Data for Testing

この階層構造は、DepartmentID を通じて各従業員を部門にリンクし、親子関係を形成します。


例 3: コース登録のための多対多の関係のシミュレーション

特定のシナリオでは、1 つのエンティティが他の多数のエンティティに関連する多対多の関係が存在します。各コースに複数の学生がいる複数のコースに登録する学生でこれをシミュレーションしてみましょう。

コース テーブルの生成

def generate_courses(num_courses):
    courses = []
    for _ in range(num_courses):
        course_id = fake.uuid4()
        course_name = fake.bs().title()
        instructor = fake.name()
        courses.append({'CourseID': course_id, 'CourseName': course_name, 'Instructor': instructor})
    return pd.DataFrame(courses)

courses_df = generate_courses(20)

Using faker and pandas Python Libraries to Create Synthetic Data for Testing

生徒テーブルの生成

def generate_students(num_students):
    students = []
    for _ in range(num_students):
        student_id = fake.uuid4()
        student_name = fake.name()
        email = fake.email()
        students.append({'StudentID': student_id, 'StudentName': student_name, 'Email': email})
    return pd.DataFrame(students)

students_df = generate_students(50)
print(students_df)

Using faker and pandas Python Libraries to Create Synthetic Data for Testing

コース登録テーブルの生成

CourseEnrollments テーブルは、学生とコース間の多対多の関係をキャプチャします。

def generate_course_enrollments(students_df, courses_df, num_enrollments):
    enrollments = []
    for _ in range(num_enrollments):
        enrollment_id = fake.uuid4()
        student_id = random.choice(students_df['StudentID'].tolist())
        course_id = random.choice(courses_df['CourseID'].tolist())
        enrollment_date = fake.date_this_year()
        enrollments.append({
            'EnrollmentID': enrollment_id,
            'StudentID': student_id,
            'CourseID': course_id,
            'EnrollmentDate': enrollment_date
        })
    return pd.DataFrame(enrollments)

enrollments_df = generate_course_enrollments(students_df, courses_df, 200)

Using faker and pandas Python Libraries to Create Synthetic Data for Testing

この例では、学生とコース間の多対多の関係を表すリンク テーブルを作成します。


結論:
Python と Faker や Pandas などのライブラリを使用すると、さまざまなテストのニーズを満たす現実的で多様な合成データセットを生成できます。このブログでは次のことを取り上げました:

  1. 相互関連テーブル: 顧客と注文の間の 1 対多の関係を示します。
  2. 階層データ: 部門と従業員の間の親子関係を示します。
  3. 複雑な関係: 学生とコース間の多対多の関係をシミュレートします。

これらの例は、ニーズに合わせた合成データを生成するための基礎を築きます。より複雑な関係の作成、特定のデータベースのデータのカスタマイズ、パフォーマンス テスト用のデータセットのスケーリングなどのさらなる機能強化により、合成データの生成を次のレベルに引き上げることができます。

これらの例は、合成データを生成するための強固な基盤を提供します。ただし、次のようなさらなる機能強化を行って、複雑さと具体性を高めることができます。

    データベース固有のデータ: さまざまなデータベース システムに合わせてデータ生成をカスタマイズします (SQL と NoSQL など)。
  1. より複雑な関係: 一時的な関係、マルチレベル階層、一意の制約などの追加の相互依存関係を作成します。
  2. データのスケーリング: パフォーマンス テストまたはストレス テスト用に大規模なデータセットを生成し、システムが現実世界の条件を大規模に処理できるようにします。 ニーズに合わせた合成データを生成することで、機密データセットや取得が困難なデータセットに依存せずに、アプリケーションの開発、テスト、最適化のための現実的な条件をシミュレートできます。
記事が気に入ったら、友達や同僚と共有してください。さらにアイデアについて話し合うために、LinkedIn で私と連絡を取ることができます。


リリースステートメント この記事は次の場所に転載されています: https://dev.to/rahulbhave/using-faker-and-pandas-python-libraries-to-create-synthetic-data-for-testing-4gn4?1 侵害がある場合は、 Study_golang@163 .comdelete に連絡してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3