ویژگی تصویر

کتابخانه mimesis در پایتون — تولید دادهٔ ساختگی با کنترل و انعطاف‌پذیری

  /  پایتون   /  کتابخانه mimesis در پایتون
بنر تبلیغاتی الف

mimesis یک کتابخانهٔ سبک، سریع و چندزبانه برای تولید دادهٔ ساختگی (fake data) در پایتون است. این کتابخانه مناسب تست، نمونه‌سازی دیتابیس، تولید داده برای نمایش در داشبوردها و بارگذاری اولیهٔ برنامه‌هاست. در ادامه ویژگی‌ها، نمونه‌کدها، نکات حرفه‌ای و روش‌های یکپارچه‌سازی را می‌بینیم.

چرا mimesis؟ مزایا و موارد استفاده

  • پشتیبانی از چندین زبان و محلی‌سازی (Locale)
  • عملکرد مناسب و امکان تولید حجم بالا از داده
  • دارةٔ وسیعی از providerها (مثل Person, Address, Datetime, Finance و غیره)
  • سازماندهی با Schema و Field برای تولید ساختارهای مشخص
  • قابلیت تکرارپذیری با seed برای تست‌های deterministic

نصب

pip install mimesis

این دستور mimesis را از PyPI نصب می‌کند. در محیط‌های مجازی (virtualenv یا venv) اجرا کنید تا وابستگی‌ها مدیریت شوند.

مثال پایه: تولید نام و آدرس

from mimesis import Person, Address
from mimesis.locales import Locale

p = Person(Locale.EN)
a = Address(Locale.EN)

print(p.full_name())
print(p.email())
print(a.city(), a.street_name())

در این مثال دو provider مختلف ساخته شده‌اند: Person و Address با محلی انگلیسی. سپس نام کامل، ایمیل و شهر/نام خیابان تولید می‌شود. استفاده از کلاس‌های provider مناسب زمانی است که فقط چند مقدار از یک نوع لازم دارید.

استفاده از Generic (یک نقطه دسترسی برای چند provider)

from mimesis import Generic

g = Generic('en')  # یا Generic(Locale.EN)
print(g.person.full_name())
print(g.address.city())
print(g.datetime.datetime())

Generic یک رابط ساده برای دسترسی به providerهای مختلف فراهم می‌کند. زمانی که چند نوع دادهٔ متفاوت در همان locale نیاز دارید، ایجاد یک نمونهٔ Generic کار را ساده‌تر و خواناتر می‌کند.

ساختاردهی داده با Schema و Field

from mimesis.schema import Field, Schema

_ = Field('en')

schema = Schema(lambda: {
    "id": _("uuid"),
    "name": _("full_name"),
    "email": _("email"),
    "age": _("age", minimum=18, maximum=75)
})

data = schema.create(iterations=5)
print(data)

Field یک تابع کمکی است که تماس با providerها را آسان و سریع می‌کند. Schema به شکل تابعی یک الگو (schema) تعریف می‌کند و با متد create می‌توانید لیستی از رکوردها تولید کنید. استفاده از Field معمولاً کارایی را بهتر می‌کند نسبت به فراخوانی دستی providerها در حلقه‌ها.

تضمین تکرارپذیری: seed

from mimesis import seed
from mimesis import Generic

seed(12345)
g = Generic('en')
print(g.person.full_name())  # همیشه همان مقدار تولید خواهد شد

با فراخوانی seed، تولید داده‌ها تکرارپذیر می‌شود که برای تست‌های واحد یا تولید دادهٔ نمونه با نتایج قابل بازتولید ضروری است.

ترکیب با pandas برای تولید DataFrame

import pandas as pd
from mimesis.schema import Field, Schema

_ = Field('en')
schema = Schema(lambda: {
    "id": _("uuid"),
    "name": _("full_name"),
    "email": _("email"),
})

data = schema.create(1000)
df = pd.DataFrame(data)
print(df.head())

کافی است خروجی Schema را به pandas.DataFrame بدهید تا بتوانید از امکانات پردازش و ذخیره‌سازی pandas استفاده کنید (مثلاً export به CSV یا ورود به دیتابیس).

تولید فیلدهای سفارشی (تابعی)

import random
from mimesis.schema import Schema

def product_code():
    return f"PRD-{random.randint(1000, 9999)}"

schema = Schema(lambda: {
    "code": product_code(),
    "price": round(random.uniform(10.0, 200.0), 2)
})

print(schema.create(5))

در مواردی که منطق تولید خاص دارید، می‌توانید توابع پایتون را در schema فراخوانی کنید. این روش ساده و منعطف است و نیازی به تعریف provider جدید ندارد.

نمونه‌ای از providerهای رایج

Providerکاربرد
Personنام، نام خانوادگی، ایمیل، شماره تلفن، سن
Addressشهر، کد پستی، خیابان، کشور
Internetآدرس‌های ایمیل، URL، نام کاربری
Datetimeتاریخ، زمان، بازهٔ زمانی
Financeشماره کارت، شماره حساب، مبالغ
Textمتون ساختگی، جملات، پاراگراف

نکات حرفه‌ای و بهینه‌سازی

  • برای تولید حجم بالا، از Schema و Field استفاده کنید تا تماس با providerها بهینه شود.
  • برای تست‌های deterministic همیشه seed تعریف کنید.
  • از Generic به‌جای ساختن providerهای متعدد در حلقه استفاده کنید تا حافظه و زمان مدیریت شود.
  • قبل از استفاده از locale خاص، لیست localeها را بررسی کنید (mimesis.locales.Locale) تا از پشتیبانی زبان مطمئن شوید.
  • وقتی نیاز به دادهٔ نزدیک به واقعیت دارید (مثلاً شماره‌های خاص کشور)، از providerهای locale-specific استفاده کنید.

مقایسه کوتاه با Faker

Faker نیز کتابخانهٔ شناخته‌شده‌ای برای تولید دادهٔ ساختگی است. تفاوت‌های اصلی: mimesis معمولاً از نظر عملکرد سریع‌تر است و API مدرن‌تری دارد، در حالی که Faker اکوسیستم گسترده‌تری دارد و community packages بیشتری دارد. انتخاب بین این دو بستگی به نیاز پروژه و ترجیحات تیم دارد.

امنیت و ملاحظات اخلاقی

هرچند داده‌ها ساختگی هستند، اما هنگام تولید و نمایش باید از لو رفتن اطلاعات واقعی جلوگیری کرد. برای نمونه‌سازی دیتابیس‌ها از دادهٔ ساختگی استفاده کنید و هرگز داده‌های واقعی کاربران را در محیط‌های عمومی یا non-secure قرار ندهید.

جمع‌بندی سریع

mimesis یک ابزار قدرتمند برای تولید دادهٔ ساختگی با تمرکز بر سرعت، انعطاف و محلی‌سازی است. با استفاده از providerها، Schema و قابلیت seed می‌توانید دادهٔ قابل تکرار و مطابق با نیاز پروژه تولید کنید. در پروژه‌های تست، توسعهٔ اولیه و تولید نمونهٔ داده برای دموی محصول، mimesis یک گزینهٔ مطرح و دوستانه برای توسعه‌دهندگان پایتون است.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: