Введение:
Комплексное тестирование имеет важное значение для приложений, управляемых данными, но оно часто зависит от наличия правильных наборов данных, которые не всегда могут быть доступны. Независимо от того, разрабатываете ли вы веб-приложения, модели машинного обучения или серверные системы, реалистичные и структурированные данные имеют решающее значение для правильной проверки и обеспечения надежной производительности. Получение реальных данных может быть ограничено из-за проблем конфиденциальности, лицензионных ограничений или просто отсутствия соответствующих данных. Именно здесь синтетические данные становятся ценными.
В этом блоге мы рассмотрим, как можно использовать Python для генерации синтетических данных для различных сценариев, в том числе:
Мы будем использовать библиотеки 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)
Этот код генерирует 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)
В этом случае таблица 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)
Создание таблицы сотрудников
Далее мы создаем таблицу 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)
Эта иерархическая структура связывает каждого сотрудника с отделом через 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)
Создание таблицы учащихся
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)
Создание таблицы набора на курсы
Таблица 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)
В этом примере мы создаем связывающую таблицу для представления отношений «многие ко многим» между студентами и курсами.
Заключение:
Используя Python и такие библиотеки, как Faker и Pandas, вы можете создавать реалистичные и разнообразные синтетические наборы данных для удовлетворения различных потребностей тестирования. В этом блоге мы рассмотрели:
Эти примеры закладывают основу для создания синтетических данных, адаптированных к вашим потребностям. Дальнейшие улучшения, такие как создание более сложных связей, настройка данных для конкретных баз данных или масштабирование наборов данных для тестирования производительности, могут вывести генерацию синтетических данных на новый уровень.
Эти примеры обеспечивают прочную основу для создания синтетических данных. Однако для повышения сложности и специфичности можно внести дальнейшие улучшения, например:
Если вам понравилась статья, поделитесь ею с друзьями и коллегами. Вы можете связаться со мной в LinkedIn, чтобы обсудить любые дополнительные идеи.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3