PythonでFakerを使ってダミーデータを作成する

めんどくさいテストデータの準備に便利そうなFakerというライブラリがあったので試しに使ってみた時のメモ。
## サクッと使ってみる

### インストール

```bash
pip install faker
```

### ランダムな名前と住所を出力

```python
from faker import Faker

fake = Faker()
print(fake.name())
print(fake.address())
```
```python:出力結果
Amy Arnold
76948 Andrea River Suite 401
West Kelliview, MO 14983
```
簡単に名前と住所を作成することができました。
ただ、日本の名前と住所じゃないので使いにくい・・・。
Faker()のインスタンスを生成する際にLocale設定を追加してあげれば日本語対応もできるみたいです。

```python
fake = Faker('jp-JP')
print(fake.name())
print(fake.address())
```
```python:出力結果
佐々木 拓真
奈良県杉並区中宮祠13丁目12番7号 前弥六南町パーク710
```
めっちゃ便利ですね。

## プロバイダの種類
それぞれの使い方は[こちら](https://faker.readthedocs.io/en/master/providers.html)を参照

|プロバイダ|内容|サンプル|
|:----|:----|:----|
|faker.providers.address|国名や住所など|福島県西多摩郡日の出町丹勢4丁目19番14号 コーポ羽折町892|
|faker.providers.automotive|車のナンバープレート|036-176|
|faker.providers.bank|銀行口座番号など|103532983|
|faker.providers.barcode|バーコード|7683072519026|
|faker.providers.color|カラーコード|#f9c9c0|
|faker.providers.company|会社名など|株式会社中村鉱業|
|faker.providers.credit_card|クレジットカード番号やセキュリティコードなど|4208918926586359178|
|faker.providers.currency|通過など|('ETC', 'Ethereum Classic')|
|faker.providers.date_time|日付関連|2007-01-27|
|faker.providers.file|ファイル名やファイルの拡張子|キャビン.txt|
|faker.providers.geo|緯度経度など|('29.53885', '-95.44744', 'Fresno', 'US', 'America/Chicago')|
|faker.providers.internet|メールアドレスやドメイン名など|umatsuda@example.org|
|faker.providers.isbn|図書番号|1-9816-5622-7|
|faker.providers.job|職業|お笑い芸人|
|faker.providers.lorem|文章やワードなど|['中世クルートスバケツ。', '感謝する文言葉リハビリ学生自体。', '供給タワー近代化する。']|
|faker.providers.misc|csvやbinary|booleanなど|True|
|faker.providers.person|男女別の名前など|内藤|
|faker.providers.phone_number|電話番号|090-1110-3910|
|faker.providers.profile|プロファイル|{'username': 'inoueyumiko', 'name': '高橋 花子', 'sex': 'F', 'address': '山形県武蔵村山市西川19丁目18番1号', 'mail': 'zkato@hotmail.com', 'birthdate': datetime.date(1948, 6, 19)|
|faker.providers.python|bool値やリストを適当に作成|-|
|faker.providers.ssn|社会保障番号|865-50-6891|
|faker.providers.user_agent|user_agent|Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_7) AppleWebKit/533.0 (KHTML, like Gecko) Chrome/61.0.884.0 Safari/533.0|

## 簡単にユーザプロファイルのCSVを作成してみる

```python
import csv
from faker import Faker

fake = Faker('jp-JP')

header = ['ID', '名前', '誕生日', '住所', '職業']
rows = []
for i in range(10):
    row = []
    row.append(fake.random_number(digits=10))
    row.append(fake.name())
    row.append(fake.date_of_birth().strftime('%Y年%m月%d日'))
    row.append(fake.address())
    row.append(fake.job())
    rows.append(row)

with open('test.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerow(header)
    writer.writerows(rows)

f.close()
```

```python:test.csv
ID,名前,誕生日,住所,職業
9054414722,佐藤 健一,1973年06月09日,大分県川崎市多摩区中鉢石町42丁目9番6号,航海士
6927657985,鈴木 治,1923年11月13日,大阪府夷隅郡御宿町下宇和田13丁目17番5号,運転士
1994436160,石川 千代,1928年09月17日,香川県豊島区東浅草38丁目20番20号 脚折アーバン809,和紙職人
2557213829,佐藤 篤司,2012年10月30日,栃木県西多摩郡日の出町幸手24丁目22番7号,エンジニア演奏家
8038438129,鈴木 晃,1967年06月24日,新潟県印旛郡印旛村四番町16丁目9番14号 土呂部パーク262,エンジニア演奏家
9731092256,山田 舞,1994年10月24日,沖縄県八丈島八丈町押上3丁目13番10号,YouTuber
6788773708,中川 浩,2006年03月28日,愛媛県山武郡横芝光町明石町37丁目5番15号 シティ松石956,歯科医師
8753593853,池田 浩,1980年04月05日,石川県横浜市中区横林8丁目2番8号,脚本家
6862344574,前田 結衣,1952年01月21日,秋田県川崎市高津区羽折町8丁目21番12号,歯科医師
6009441358,石川 涼平,2005年08月07日,岐阜県長生郡白子町西浅草30丁目21番5号 シティ月島603,運転士
```

他にもいろいろなデータがあるから結構便利