vol.6 データを数字に変換
4月に入ってからは
機械学習でデータ分析するための下準備を進めていますが、
機械学習でデータ分析をするには
すべてのデータを数字に変換する必要があるので
今回はそれを中心に書いていって、
そのほか、
わたしが新しく知った関数がいくつかあるので、
最後のほうに備忘録として書こうと思います。
ユーザーに関するあらゆるデータを数字に変換
といっても、ユーザーのデータには
①連続値:数字で説明できるデータ(従業員数や年収など)
②離散値:数字で説明できないデータ(役職や業種など)
があって、、、
①従業員数や年数など
これらは順番に並べられそうなので、
その順番通りに数字を振っていく。
例えば従業員数、
# employee_scale member_df["employee_scale_num"] = member_df['employee_scale'].map({ '1~9名':0, '10~49名':1, '50~99名':2, '100~299名':3, '300~499名':4, '500~999名':5, '1000~2999名':6, '3000~4999名':7, '5000~9999名':8, '10000名以上':9, }) #member_df
「1~9名」や「10~49名」は
そのままでは単なる文字列なので、
「map」で連続値に変換し、意味を持たせる。
②役職や業種など
こっちは数字にして並べることができないので、
真偽値に変換してデータフレームの表を埋めていく。
真偽値に変換するには
Pandasの「get_dummies()」を使用
bool_columns = ['managerial_position', 'job_spec1', 'industry'] pd.set_option("display.max_columns", 560) member_df = pd.get_dummies(member_df, columns=bool_columns)
・bool_columns = ['managerial_position', 'job_spec1', 'industry']
役職、職種、業種などで同じ作業をしていくので、
「bool_columns」で括ると1回の作業で済む
・pd.set_option("display.max_columns", 560)
columns数を560に設定
・member_df = pd.get_dummies(member_df, columns=bool_columns)
get_dumiesで真偽値に変換
(既成のmember_dfのcolumns部分に[bool_columns]をもってきて)真偽値に変換、
変更を上書きされたデータフレームとしてのmember_dfを表示
これはデータフレーム全体のごく一部でしかないので
分かりずらいが、
1番上のユーザーの役職は「その他」、
上から5番目のユーザーの役職は「一般社員・職員」
であることを示す
(真であれば1、偽であれば0)
備忘録
⑴ランダム抽出
機械学習のための下準備をするうえで
データが大きすぎると時間やお金がかかってしまうので、
ユーザー数を少なめにして、データを小さくしてスキャンを試みる。
たくさんのユーザーからたとえば100人のみをランダムに抽出するとき、
SELECTで
rand() を使って全ユーザーに0以上1未満の数をランダムに振る、
(振った数を random とおく)
ORDER BYで
random を降順に並べる
で、LIMIT 100で絞ると、
結果としてユーザー100人をランダム抽出できたことになる。
⑵日数の差を求める
例えば入会日から現在までの日数を求めるとき、
DATEDIFFで期間(日数)を求める
期間…CURRENT_TIMESTAMP(サーバーの現在の日時) と
TIMESTAMP(create_date)(入会した日時) の期間
DATEDIFF(CURRENT_TIMESTAMP(),TIMESTAMP(create_date)) as create_date_duration