Pandas で get_dummies()
関数を使うと「カテゴリ変数」を「ダミー変数」に変換できる.「カテゴリ変数」とは,例えば「血液型」や「職業」など,限られた選択肢の中から選んだ値で,ENUM 型のようなイメージをするとわかりやすい💡分析業務を前提に考えると A
や B
や AB
など,文字列のままだと計算しにくく,機械学習などの前処理として数値にエンコーディングする必要がある.そこで get_dummies()
関数を使う.今回は get_dummies()
関数の基本的な操作を試す.
データセット 🏷
今回の検証では,GitHub リポジトリ chendaniely/pandas_for_everyone に含まれているデータセット gapminder.tsv
を使う.これは「国名 / 大陸名 / 平均余命などをまとめたデータセット」となり,1700 行程度含まれている.あくまでサンプルとして使う.GitHub リポジトリ jennybc/gapminder には Gapminder の公式データも載っている.
gapminder = pd.read_csv('./gapminder.tsv', delimiter='\t') gapminder
get_dummies()
関数を使う 🏷
get_dummies()
関数の引数に DataFrame を指定する.デフォルトでは「文字列」など dtype
が object
の全てのカラムを「ダミー変数」に変換する.スクリーンショットには一部しか表示されていないけど country
と continent
が変換対象となる.具体的には country
の値によって,新しいカラム country_Afghanistan
や country_Albania
が追加されていて,それぞれの値は 0
と 1
になっている.なお,このように「N 個の値」に対して「N 個のカラム」を追加する方法を「One-Hot エンコーディング」と言う.
country_Afghanistan
country_Albania
country_Algeria
country_Angola
country_Argentina
- etc
pd.get_dummies(gapminder).head(20)
columns
パラメータを使う 🏷
get_dummies()
関数に columns
パラメータを指定すると「ダミー変数」に変換するカラムを指定できる.今回は continent
を指定した.すると country
はそのままとなり,新しいカラム continent_Africa
や continent_Americas
が追加された.
continent_Africa
continent_Americas
continent_Asia
continent_Europe
continent_Oceania
pd.get_dummies(gapminder, columns=['continent']).head(20)
prefix_sep
パラメータを使う 🏷
country_Afghanistan
や continent_Africa
など,デフォルトでは _
をセパレータとして新しいカラムが追加される.そこで prefix_sep
パラメータを指定すると任意のセパレータに変更できる.今回はサンプルとして prefix_sep='/'
とした.すると continent/Africa
や continent/Americas
など,期待通りにセパレータを変更できた.
pd.get_dummies(gapminder, columns=['continent'], prefix_sep='/').head(20)
dummy_na
パラメータを使う 🏷
get_dummies()
関数はデフォルトでは NaN
を無視する.そこで dummy_na
パラメータに True
を指定すると continent/nan
のように NaN
も値として変換される.
pd.get_dummies(gapminder, columns=['continent'], prefix_sep='/', dummy_na=True).head(20)
まとめ 🏷
Pandas で「カテゴリ変数」を「ダミー変数」に変換する get_dummies()
関数を試した.値によって新しいカラムを追加する「One-Hot エンコーディング」を簡単に実現できた.試せば試すほど Pandas の機能の豊富さに驚かされる.引き続き学んでいくぞ👍