3
9

More than 3 years have passed since last update.

お手軽なサンプルデータ作成手順

Posted at

ホームページ:https://program-board.com

モチベーション

今回色々、サンプルデータを使って遊びたいと思ったが、お手軽に作れるAPIは存在するが自由度が低いと感じたため、自作で作ることを決めました。

モジュール

モジュールのインストールを行います.ここではpandas,numpyと偽データを簡単に生成できるfakerというモジュールを使います.

pip install faker

fakerについて

fakerの基本的な使い方を記述します.Faker(‘ja_JP’)で日本語用の偽データを生成する準備をします. あとは,好きな種類のデータを生成してみてください.英語ですが,以下のサイトにFakerが生成できるデータが載っています.
https://www.nblog09.com/w/2019/01/24/python-faker/

ここでは,名前,都道府県,会社,生年月日,職業を生成します.

# 日本語偽データの設定
from faker import Faker

# 日本語偽データの設定
fakegen = Faker('ja_JP')

print(fakegen.name())#名前
print(fakegen.prefecture())#都道府県
print(fakegen.company()) #会社
print(fakegen.date_of_birth()) #生年月日
print(fakegen.job()) #職業

偽データの生成

まず,名前,生年月日,住所(都道府県),職業,会社の偽データを生成します.

import numpy as np
import pandas as pd
from numpy.random import *
from faker import Faker

# 日本語偽データの設定
fakegen = Faker('ja_JP')
faker_list = []
for i in range(1000):
    name = fakegen.name() #名前
    pref = fakegen.prefecture() #都道府県
    company = fakegen.company() #会社
    birth = fakegen.date_of_birth() #生年月日
    job = fakegen.job() #職業
    faker_list.append([name,pref,company,birth,job])

# データフレーム化
df = pd.DataFrame(faker_list,columns=['名前','住所','会社','生年月日','職業'])

こんな感じで、簡単に作成することが可能です。

年齢

年齢の偽データを生成します.ここでは,numpyを用いり15〜85の一様分布の乱数からデータを生成します.欠損値を考慮してここでは800しか作りません.また,他の項目で欠損値を生成する際に同じ行で重ならないよう,データの並び方をごちゃにします.

age_list = randint(15,85,800) # 一様分布(下限,上限,生成数)
# データフレームに追加
df['年齢'] = pd.DataFrame(age_list)
# データの並び方をごちゃにする.
df = df.sample(frac=1)

年収・身長

年収・身長の偽データを生成します.ここでは,numpyを用いり平均値と分散の値を適当に決め,正規分布からデータを生成します.

# 身長
height_list = normal(170,6,900) # 正規分布(平均,分散,生成数)
height_list = np.round(height_list,decimals=0) # 整数止め
# データフレームに追加
df['身長'] = pd.DataFrame(height_list)
# データの並び方をごちゃにする.
df = df.sample(frac=1)

# 年収
income_list = normal(400,8,850) # 正規分布(平均,分散,生成数)
income_list = np.round(income_list,decimals=0) # 整数止め
# データフレームに追加
df['年収'] = pd.DataFrame(income_list)
# データの並び方をごちゃにする.
df = df.sample(frac=1)

婚姻

婚姻偽データは,numpyのnp.random.choiceで用意した選択肢を決まった割合で乱数生成します.

#性別
mariage = ['未婚','既婚','離別'] #選択肢
Weight = [0.4,0.3,0.3] #割合
mariage_list = np.random.choice(mariage,700,p=Weight) #np.random.choice(選択肢,生成数,割合)
# データフレームに追加
df['婚姻'] = pd.DataFrame(mariage_list)
# データの並び方をごちゃにする.
df = df.sample(frac=1)

スクリーンショット-2019-11-19-3.53.49-1024x432.png

おわりに

データ分析の練習用に偽データの生成を行いました.ただし,分析練習用にデータを生成するためには,生成に用いる分布の種類やパラメータを確認して実行する必要があります.

参考

https://www.nblog09.com/w/2019/01/24/python-faker/
https://qiita.com/ogamiki/items/4821173ca713a6b77510

3
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
9