Pythonでテスト用データなどのダミーデータを作りたい場合はFakerを利用することができる。その際のノウハウを記載する。
氏名の取得
ダミーの氏名を生成する場合に、漢字名とカナ名をそれぞれ取得すると、それぞれでランダムに取得されてしまう。
from faker import Factory
fake = Factory.create('ja_JP')
print(fake.last_name())
# "田中"
print(fake.last_kana_name())
# "サトウ"
以下のようにpair
を取得すると、(漢字表記, カナ表記, ローマ字表記)
のタプルが返ってくるので、こちらを利用したほうがいい。
print(fake.last_name_pair())
# ("田中", "タナカ", "tanaka")
print(fake.first_name_pair())
# ("太郎", "タロウ", "tarou")
名前のデータセット追加
Fakerに登録されている氏名のデータセットは少ないため、データセットを増やす場合、以下の方法が考えられる。
- Fakerのソースに追加してプルリクエストを送る
- プルリクエストを作成するまで頑張って採用まで時間がかかる可能性あり
- FakerをForkして改変して使用する
- 本体側の修正に合わせてマージしていくなど、Forkしたリポジトリの管理が必要になる
- 自分の環境でだけ無理やりデータセットを追加する
今回は3番目の方法を記載する
from faker import Factory
from faker.providers.person.ja_JP import Provider as PersonProviderJP
fake = Factory.create('ja_JP')
person_provider: PersonProviderJP = list(filter(lambda provider: isinstance(provider, PersonProviderJP), fake.providers))[0]
# 追加する分の名前を作る(ここでは男性名)
# 実際にはCSVとか読み込むようにするとよさそう
my_first_name_male_pairs = (
("蓮", "レン", "ren"),
("陽翔", "ハルト", "haruto"),
("蒼", "アオイ", "aoi"),
)
# データセットに追加
person_provider.first_name_male_pairs += my_first_name_male_pairs
# 確認
for _ in range(1000):
result = fake.first_name_male_pair()
if result in my_first_name_male_pairs:
print("★:" + str(result))
else:
print(str(result))
参考:https://github.com/joke2k/faker/blob/master/faker/providers/person/ja_JP/__init__.py