###pandas でダミー変数を作成する
この記事ではpandas 0.18.1を利用しています。
Rを使っていた人が Python(scikit-learn)で同じことをやろうとした場合、カテゴリカルな変数の扱いに困るケースがあると思います。
カテゴリカルなデータは sklearn(numpy.ndarray をインプットとする場合)ではそのままでは扱えないので、ダミー変数に変換します。
データは以下のようなデータ。
sexは男性が1、女性が2、ageは各年代に対応する値が1~3で入っているとします。
df1
id sex age
0 1001 1 3
1 1002 2 2
2 1003 1 3
3 1004 2 1
4 1005 2 1
df1 = df1.reset_index(drop=True) # 後からインデックスでマージするので、念のため初期化しておく
dummy_df = pd.get_dummies(df1[['sex', 'age']], drop_first = True)
print dummy_df
sex_2 age_2 age_3
0 0.0 0.0 1.0
1 1.0 1.0 0.0
2 0.0 0.0 1.0
3 1.0 0.0 0.0
4 1.0 0.0 0.0
うまくダミー変数にできています。
各変数についてダミー変数を設けたのち、drop_firstで最初の変数を除いています。
(残しておくと変数が従属関係になり都合が悪いので、ここでは除く処置を取っています)
なお、drop_firstはpandas 0.18.0 以降の対応なのでご注意ください。
df2 = pd.merge(df1, dummy_df, left_index=True, right_index=True)
print df2
id sex age sex_2 age_2 age_3
0 1001 1 3 0.0 0.0 1.0
1 1002 2 2 1.0 1.0 0.0
2 1003 1 3 0.0 0.0 1.0
3 1004 2 1 1.0 0.0 0.0
4 1005 2 1 1.0 0.0 0.0
マージすると、ちゃんとダミー変数にできていることが確認できます。