😀

Fakerを使用して日本語を含んだCSVダミーファイルを作成する方法

2022/11/28に公開

CSVのダミーデータを作る場合、巷にダミー作成サイトは沢山ありますが
大概の場合は日本語に対応されていません。

そこでPythonの Faker を使用してCSVダミーデータを日本語で作成した時のメモ

環境

  • OSX 10.9.5

参考にしたサイト

事前準備に必要なもの

  • python 2.6.9 (で試しました。他はわかりません・・・)
  • pip

Fakerのインストール

/path/to/hoge
pip install fake-factory

Fakerは日本語対応していません

joke2k/fakerより引用

You can check available Faker locales in the source code, under the providers package. The localization of Faker is an ongoing process, for which we need your help. Please don't hesitate to create a localized provider for your own locale and submit a Pull Request (PR).

Included localized providers:

bg_BG
cs_CZ
de_DE
dk_DK
.
.

ja_JPは現在ないです。
なので独自のproviderを作成して日本語を含んだダミーデータを作成します。

日本語を含んだCSVダミーデータを作るサンプルプログラム

fake.add_provider() を使用して独自プロバイダを作成します。

ja_dummy.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-

from faker import Factory
from faker.providers import BaseProvider
import csv
import random

class MyStatusProvider(BaseProvider):
    def state(self):
        return random.choice(['状態1', '状態2', '状態3'])
    def name(self):
        return random.choice(['田中', '鈴木', '山崎'])
    def phone_number(self):
        return random.choice(['080-1111-2222', '090-1234-5678', '070-1234-5678'])


fake = Factory.create()
fake.add_provider(MyStatusProvider)

with open("dummy_data.csv", "w+") as f:

    csv_writer = csv.writer(f)

    for i in range(5):
        l = [fake.md5(), fake.random_number(1), fake.date(pattern="%Y-%m-%d %H:%M:%S"), fake.random_int(min=0, max=1), fake.boolean(), fake.state(), fake.name(), fake.phone_number() ]
        csv_writer.writerow(l)
  • for i in range({数字}) の部分がCSVの作成行数を指定しています
  • l = [fake.md5(), ...., .....]の部分に作成したい部分のデータを指定してください。Faker が元々持っているダミーデータ作成メソッド(provider)は Faker のFormattersの部分を読むと大体わかります。

よく使いそうなダミーデータの作成方法

ちょこっとしか触っていないのでなんともいえませんが・・・

日付

patternの部分を変更すれば任意の日付型にできます

fake.date(pattern="%Y-%m-%d %H:%M:%S")
fake.date(pattern="%Y年%m月%d日 %H時%M分%S秒")

数字range

0-9まで数字でランダムにデータを作成したい場合

fake.random_int(min=0, max=9)

md5

fake.md5()
# 292bfff99620e2ae2f3b2f5b9fab4232
# 739169affdb932770deed3ff5f29f7b9

True or False

fake.boolean()
# False
# True

email

fake.email()
# wood.dubuque@strosin-ratke.com

詳しくはFaker 参照してください。
DBのサンプルデータやファイルIOのテスト用にどうぞ

Discussion