ホームページ: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)
##おわりに
データ分析の練習用に偽データの生成を行いました.ただし,分析練習用にデータを生成するためには,生成に用いる分布の種類やパラメータを確認して実行する必要があります.
##参考
https://www.nblog09.com/w/2019/01/24/python-faker/
https://qiita.com/ogamiki/items/4821173ca713a6b77510