Pythonの統計処理や機械学習でカテゴリ変数を扱いたい(get_dummiesを使う)

統計処理や機械学習でカテゴリ変数を扱う場合、
そのままでは使えないことが多く、数値変換やフラグ変換が必要です。

pandas.get_dummiesはフラグ変換をかなり簡単にしてくれますが、
引数の渡し方で挙動が変わるので注意が必要です。

カテゴリ変数の扱い方

よく使われるものでは以下の二つが存在します。

種類 内容
One-Hotエンコーディング カテゴリすべてを列にし、該当に1を立てたもの
ダミーエンコーディング カテゴリを一つを除き列にし、該当に1を立てたもの

この本では、

pandas.get_dummiesはダミーエンコーディングをしてくれる
と書かれているのですが、ドキュメントを読むと違っていました。

get_dummiesを使ったエンコーディング

import pandas as pd
a = pd.Series(['a','b','c'])

# そのままだと、one-hotになる
pd.get_dummies(a)

#出力
#  a   b   c
#0 1   0   0
#1 0   1   0
#2 0   0   1

#drop_first = Trueにするとダミーエンコーディングになる
pd.get_dummies(a,drop_first = True)

#出力
#  b   c
#0 0   0
#1 1   0
#2 0   1

その他知っていると便利な引数

  • prefix,prefix_sep : ダミー化したカラム名につけるprefixとそのprefixをつなく文字
  • columns:エンコード対象とするカラム。知らないと、そのカラムだけ分けてjoinして、とかをすることになる(してた)
  • dummy_na:Trueにすると、対象カテゴリがNaだったときにNAというカラムにする。デフォルトはFalse