Fakerでテスト用のダミーデータを作成する
Fakerは、フェイクデータを生成するPythonパッケージです。データベースのブートストラップ、見栄えの良いXMLドキュメントの作成、永続化されたデータのストレステスト、運用中のサービスから取得したデータの匿名化など、さまざまな用途にFakerをご利用いただけます。
Faker は、PHP Faker、Perl Faker、Ruby Faker に強く影響を受けています。
日本語での例はだいたいここにまとまってるので、自分は単に写経するだけ。
Basic Usage
インストール
!pip install faker
名前、住所、適当なテキストを生成してみる。
from faker import Faker
fake = Faker()
print(fake.name())
print("---")
print(fake.address())
print("---")
print(fake.text())
James Weber
---
193 Rhodes Canyon
Lake Thomasfort, AL 68328
---
Successful address control. Source word order on pretty yet sport.
General yeah pressure then note knowledge goal. Also be return by deep. Table kid Democrat such reflect help student.
日本語で使いたい場合はロケールを指定する。
from faker import Faker
fake = Faker('ja_JP')
print(fake.name())
print("---")
print(fake.address())
print("---")
print(fake.text())
三浦 太郎
---
岡山県八王子市美原町12丁目12番3号
---
カレッジスキーム偏差パン。中央極端な主婦運。クロスささやきスマッシュ錯覚。
デフォルト敵対的な偏差埋め込むバーゲン証言する君は特徴。ホイールバーゲンフェミニスト埋め込む。
指名省略リハビリバナーバスケット管理するメニュー。
彼近代化する偏差敵対的な欠乏。衝突中央クロスコミュニケーション。タワー高い創傷持ってる評議会。
カラム電池創傷今日クール。発生する通行料金今日器官ノートオークションリフト。
Fakerには「プロバイダー」というプラグイン的な機構がある。プラグインを使えば、ビルトインで用意されているフェイクデータ以外の種類のデータを拡張することができる。プロバイダーには
- Standard Provider
- Community Provider
の2種類がある。
Standardの方はビルトインで組み込まれている様子で、ドキュメントには以下の例があるが、
from faker import Faker
from faker.providers import internet
fake = Faker()
fake.add_provider(internet)
print(fake.ipv4_private())
上記の様にimportしたりadd_providerしなくても普通に
print(fake.ipv4_private())
だけで呼び出せた。同じように使えるものには以下がある。かなりいろいろあるのでここをまず探してみるといいかもしれない。
Community Providerには以下のようなものがある。
こちらは別パッケージとなっており、追加でインストールしてadd_providerする必要がある。試しに以下を追加してみる。
Python Fakerモジュールのアドオンプロバイダーで、音楽関連のカテゴリーに対してランダムなデータや偽のデータを生成します。
パッケージインストール
!pip install faker_music
from faker import Faker
from faker_music import MusicProvider
fake = Faker()
fake.add_provider(MusicProvider)
print(fake.music_genre())
print(fake.music_subgenre())
print(fake.music_instrument())
print(fake.music_instrument_category())
German Folk
Iranian Pop
Bullroarer
winds
日本語はどうか?
from faker import Faker
from faker_music import MusicProvider
fake = Faker('ja_JP')
fake.add_provider(MusicProvider)
print(fake.music_genre())
print(fake.music_subgenre())
print(fake.music_instrument())
print(fake.music_instrument_category())
French Pop
Progressive Techno
Sampler
electronics
Fakerのパッケージの中身を見てみると、各providerは言語ごとに用意されたファイルを読み込んでいるようなので、Community Provider側でもこれに倣っている必要がある。
上で試したfaker_musicの場合は多言語を意識していないようなので、日本語ロケールを設定しても英語でしか出力されないということになる。
テストデータの作成は最近だとLLMとかでも行えるのだけど、最近たまたまタイムスタンプを生成してみたところ、意図通りに出力されなかったことがあった。(自分のケースでは日次を指定してタイムスタンプを生成させたら1日ずれていた)
LLMなので当然ハルシネーションすることはあるのだけれども、ランダムで中身がどうでも良いデータならば問題ないが、多少なりとも厳密性が必要なケースだとちょっとこれは困る。データ量が多いとわざわざチェックしないといけないのはやや本末転倒感があるし、プロンプトを駆使して正確に出力させることはできるのかもしれないけど、それならば確実に生成できるものを選んで使う、というのはもう1つの考え方ではあると思う。
LLMにfakerパッケージ与えてCode Interpreterで実行するのが一番正解かなという気はする。