【Python】Mimesisでモックデータを作成する方法

【Python】Mimesisでモックデータを作成する方法

適当なモックデータを準備したいとき、オープンデータを利用したりしていましたが、任意にデータを作りたい時に加工したりすることは非常に面倒です。

私はコレまでオープンデータを加工したりして、自分が使いたいテストデータを作成していましたが、データを結合したり調整したり整えることが非常に面倒でした。このMimesisを使うことで、自分が使いたい情報を指定して、大量にデータを作成出来るようになったので、使い方をまとめておきます。

Mimesisでできること

適当な文字列や数値などを、人物名、食べ物名、国名、企業名、、、など色々な種類で作成することができます。サンプルデータを作りたいけど、「Aさん、Bさん、Cさん、、、」の様なものではなく、実際の人名の様なものを作成できます。データの表示の際の確認や検証などの最初の段階には十分使えるレベルだと思います。

Mimesisの使い方

インストール

Mimesisはpip installのみ。

bat
pip install Mimesis

国(ロケール)の指定

国(ロケール)を指定することで、その国の言語や地域名、人名などが出力可能になります。

下記をインポートしておくことで、ロケールが指定できるようになります。

bat
from mimesis.locales import Locale

サンプルコード

下のように指定す

Python
from mimesis.locales import Locale
from mimesis import Address

# 日本語で出力
ja = Address(locale=Locale.JA)

# 英語で出力
en = Address(locale=Locale.EN)

ja.region()
print(ja.region())

en.federal_subject()
print(en.federal_subject())

ja.address()
print(ja.address())

en.address()
print(en.address())

ることで、色々な国の色々な条件で出力することができます。

CodeAssociated attributeNameNative Name
csLocale.CSCzechČesky
daLocale.DADanishDansk
deLocale.DEGermanDeutsch
de-atLocale.DE_ATAustrian germanDeutsch
de-chLocale.DE_CHSwiss germanDeutsch
elLocale.ELGreekΕλληνικά
enLocale.ENEnglishEnglish
en-auLocale.EN_AUAustralian EnglishEnglish
en-caLocALE.EN_CACanadian EnglishEnglish
en-gbLocale.EN_GBBritish EnglishEnglish
esLocale.ESSpanishEspañol
es-mxLocale.ES_MXMexican SpanishEspañol
etLocale.ETEstonianEesti
faLocale.FAFarsiفارسی
fiLocale.FIFinnishSuomi
frLocale.FRFrenchFrançais
huLocale.HUHungarianMagyar
isLocale.ISIcelandicÍslenska
itLocale.ITItalianItaliano
jaLocale.JAJapanese日本語
kkLocale.KKKazakhҚазақша
koLocale.KOKorean한국어
nlLocale.NLDutchNederlands
nl-beLocale.NL_BEBelgium DutchNederlands
noLocale.NONorwegianNorsk
plLocale.PLPolishPolski
ptLocale.PTPortuguesePortuguês
pt-brLocale.PT_BRBrazilian PortuguesePortuguês Brasileiro
ruLocale.RURussianРусский
skLocale.SKSlovakSlovensky
svLocale.SVSwedishSvenska
trLocale.TRTurkishTürkçe
ukLocale.UKUkrainianУкраїнська
zhLocale.ZHChinese汉语

様々なデータの種類の出力

色々な種類のデータの出力ができます。

ロケールパラメーター内容
◯Address人物に関する情報
◯Finance企業に関する情報
◯Datetime日時に関する情報
◯Food食べ物に関する情報
◯Person人物に関する情報
◯Text適当な種類の文字

サンプルコード

下記以外に出力できるものはあるので、詳しくはこちらの公式サイトのドキュメントを確認してください。

Python
from mimesis import Generic
from mimesis.random import Random
from mimesis.locales import Locale

person_generator = Generic(locale=Locale.JA)
print(person_generator.person.academic_degree())
print(person_generator.person.age())
print(person_generator.person.blood_type())
print(person_generator.person.email())
print(person_generator.person.first_name())
print(person_generator.person.full_name())
print(person_generator.person.gender())
print(person_generator.person.height())
print(person_generator.person.identifier())
print(person_generator.person.language())
print(person_generator.person.last_name())
print(person_generator.person.name())
print(person_generator.person.phone_number())
print(person_generator.person.political_views())
print(person_generator.person.university())
print(person_generator.person.work_experience())
print(person_generator.person.worldview())
print(person_generator.person.sex())
print(person_generator.person.username())
print(person_generator.person.password())


from mimesis import Address
address_generator = Address(locale=Locale.JA)
print(address_generator.address())
print(address_generator.calling_code())
print(address_generator.city())
print(address_generator.continent())
print(address_generator.coordinates())
print(address_generator.country())
print(address_generator.country_code())
print(address_generator.default_country())
print(address_generator.federal_subject())
print(address_generator.postal_code())
print(address_generator.prefecture())
print(address_generator.province())


from mimesis import Finance
finance_generator = Finance(locale=Locale.JA)
print(finance_generator.bank())
print(finance_generator.company())
print(finance_generator.company_type())
print(finance_generator.cryptocurrency_iso_code())
print(finance_generator.cryptocurrency_symbol())
print(finance_generator.price())
print(finance_generator.stock_exchange())
print(finance_generator.stock_name())
print(finance_generator.stock_ticker())


from mimesis import Datetime
datetime_generator = Datetime(locale=Locale.JA)
print(datetime_generator.century())
print(datetime_generator.date())
print(datetime_generator.datetime())

from mimesis import Food
food_generator = Food(locale=Locale.JA)
print(food_generator.dish())
print(food_generator.drink())

from mimesis import Text
text_generator = Text(locale=Locale.JA)
print(text_generator.alphabet())
print(text_generator.answer())
print(text_generator.color())


from mimesis import BinaryFile
binaryFile_generator = BinaryFile
print(binaryFile_generator.audio(self, * file_type: AudioFile = AudioFile.MP3))
print(binaryFile_generator.compressed())
print(binaryFile_generator.document())

jsonにデータを出力するサンプルコード

サンプルで作成したデータをjsonファイルに出力するコードです。jsonファイルはPythonファイルと同じ階層に出力されます。

また、ループ回数などを調整することで、大量のデータを作成できます。

MYSQLやクラウドのデータベースなどに格納する際には、一括で大量のデータを格納できない制限がある場合もあります。格納先に合わせて適宜修正してください。

Python
from mimesis import Generic
from mimesis.random import Random
from mimesis.locales import Locale
import json

# 1回のループで生成するデータ件数
batch_size = 10

# ループ回数
num_batches = 1

def generate_mock_data():
    # mimesisのインスタンスを生成
    gen = Generic(locale=Locale.JA)  # もし日本語のデータが欲しい場合は引数を'JA'に設定
    random = Random()
    data_list = []
    for _ in range(batch_size):
            data = {
            # モックデータの生成
            'address': gen.person.email(),
            'full_name' : gen.person.full_name(),
            'sex' : gen.person.sex(),
            'username' : gen.person.username(),
            'password' : gen.person.password()
            }
            data_list.append(data)
    return data_list

if __name__ == '__main__':
    all_data = []
    for batch in range(num_batches):
        batch_data = generate_mock_data()
        all_data.extend(batch_data)
        print(f"Generated batch {batch + 1}/{num_batches}")

    # ファイルに出力
    with open('mock_data.json', 'w',encoding="utf-8" ) as file:

        json.dump(all_data, file,  indent=2, ensure_ascii=False )

    print("Data generation complete!")

公式ドキュメント

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA