適当なモックデータを準備したいとき、オープンデータを利用したりしていましたが、任意にデータを作りたい時に加工したりすることは非常に面倒です。
私はコレまでオープンデータを加工したりして、自分が使いたいテストデータを作成していましたが、データを結合したり調整したり整えることが非常に面倒でした。この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())
ることで、色々な国の色々な条件で出力することができます。
Code | Associated attribute | Name | Native Name |
---|---|---|---|
cs | Locale.CS | Czech | Česky |
da | Locale.DA | Danish | Dansk |
de | Locale.DE | German | Deutsch |
de-at | Locale.DE_AT | Austrian german | Deutsch |
de-ch | Locale.DE_CH | Swiss german | Deutsch |
el | Locale.EL | Greek | Ελληνικά |
en | Locale.EN | English | English |
en-au | Locale.EN_AU | Australian English | English |
en-ca | LocALE.EN_CA | Canadian English | English |
en-gb | Locale.EN_GB | British English | English |
es | Locale.ES | Spanish | Español |
es-mx | Locale.ES_MX | Mexican Spanish | Español |
et | Locale.ET | Estonian | Eesti |
fa | Locale.FA | Farsi | فارسی |
fi | Locale.FI | Finnish | Suomi |
fr | Locale.FR | French | Français |
hu | Locale.HU | Hungarian | Magyar |
is | Locale.IS | Icelandic | Íslenska |
it | Locale.IT | Italian | Italiano |
ja | Locale.JA | Japanese | 日本語 |
kk | Locale.KK | Kazakh | Қазақша |
ko | Locale.KO | Korean | 한국어 |
nl | Locale.NL | Dutch | Nederlands |
nl-be | Locale.NL_BE | Belgium Dutch | Nederlands |
no | Locale.NO | Norwegian | Norsk |
pl | Locale.PL | Polish | Polski |
pt | Locale.PT | Portuguese | Português |
pt-br | Locale.PT_BR | Brazilian Portuguese | Português Brasileiro |
ru | Locale.RU | Russian | Русский |
sk | Locale.SK | Slovak | Slovensky |
sv | Locale.SV | Swedish | Svenska |
tr | Locale.TR | Turkish | Türkçe |
uk | Locale.UK | Ukrainian | Українська |
zh | Locale.ZH | Chinese | 汉语 |
色々な種類のデータの出力ができます。
ロケール | パラメーター | 内容 |
---|---|---|
◯ | 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!")