«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Использование библиотек Python Faker и Pandas для создания синтетических данных для тестирования

Использование библиотек Python Faker и Pandas для создания синтетических данных для тестирования

Опубликовано 7 ноября 2024 г.
Просматривать:307

Введение:
Комплексное тестирование имеет важное значение для приложений, управляемых данными, но оно часто зависит от наличия правильных наборов данных, которые не всегда могут быть доступны. Независимо от того, разрабатываете ли вы веб-приложения, модели машинного обучения или серверные системы, реалистичные и структурированные данные имеют решающее значение для правильной проверки и обеспечения надежной производительности. Получение реальных данных может быть ограничено из-за проблем конфиденциальности, лицензионных ограничений или просто отсутствия соответствующих данных. Именно здесь синтетические данные становятся ценными.

В этом блоге мы рассмотрим, как можно использовать Python для генерации синтетических данных для различных сценариев, в том числе:

  1. Взаимосвязанные таблицы: представление связей «один ко многим».
  2. Иерархические данные: часто используются в организационных структурах.
  3. Сложные отношения: например, отношения «многие ко многим» в системах регистрации.

Мы будем использовать библиотеки Faker и Pandas для создания реалистичных наборов данных для этих случаев использования.


Пример 1. Создание синтетических данных для клиентов и заказов (отношения «один ко многим»)

Во многих приложениях данные хранятся в нескольких таблицах со связями по внешнему ключу. Давайте сгенерируем синтетические данные о клиентах и ​​их заказах. Клиент может разместить несколько заказов, что представляет собой связь «один ко многим».

Создание таблицы клиентов

Таблица «Клиенты» содержит основную информацию, такую ​​как идентификатор клиента, имя и адрес электронной почты.

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

Этот код генерирует 10 случайных клиентов с помощью Faker для создания реалистичных имен и адресов электронной почты.

Создание таблицы заказов

Теперь мы создаем таблицу Orders, где каждый заказ связан с клиентом через CustomerID.

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. Каждый клиент может разместить несколько заказов, образуя отношения «один ко многим».


Пример 2: создание иерархических данных для отделов и сотрудников

Иерархические данные часто используются в организациях, где в подразделениях работает несколько сотрудников. Давайте смоделируем организацию с отделами, в каждом из которых работает несколько сотрудников.

Создание таблицы отделов

Таблица «Отделы» содержит уникальный идентификатор отдела, имя и руководителя каждого отдела.

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

Создание таблицы сотрудников

Далее мы создаем таблицу Employeestable, где каждый сотрудник связан с отделом через 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. Моделирование отношений «многие ко многим» для записи на курсы

В определенных сценариях существуют отношения «многие ко многим», когда одна сущность связана со многими другими. Давайте смоделируем это со студентами, зачисленными на несколько курсов, где на каждом курсе обучается несколько студентов.

Создание таблицы курсов

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. Взаимосвязанные таблицы: демонстрация связи «один ко многим» между клиентами и заказами.
  2. Иерархические данные: иллюстрируют детско-родительские отношения между отделами и сотрудниками.
  3. Сложные отношения: моделирование отношений «многие ко многим» между студентами и курсами.

Эти примеры закладывают основу для создания синтетических данных, адаптированных к вашим потребностям. Дальнейшие улучшения, такие как создание более сложных связей, настройка данных для конкретных баз данных или масштабирование наборов данных для тестирования производительности, могут вывести генерацию синтетических данных на новый уровень.

Эти примеры обеспечивают прочную основу для создания синтетических данных. Однако для повышения сложности и специфичности можно внести дальнейшие улучшения, например:

  1. Данные, специфичные для базы данных: настройка генерации данных для различных систем баз данных (например, SQL или NoSQL).
  2. Более сложные отношения: создание дополнительных взаимозависимостей, таких как временные отношения, многоуровневые иерархии или уникальные ограничения.
  3. Масштабирование данных: создание больших наборов данных для тестирования производительности или стресс-тестирования, гарантируя, что система сможет обрабатывать реальные условия в большом масштабе. Создавая синтетические данные, адаптированные к вашим потребностям, вы можете моделировать реалистичные условия для разработки, тестирования и оптимизации приложений, не полагаясь на конфиденциальные или труднодоступные наборы данных.

Если вам понравилась статья, поделитесь ею с друзьями и коллегами. Вы можете связаться со мной в 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