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_Afghanistancountry_Albaniacountry_Algeriacountry_Angolacountry_Argentina- etc
pd.get_dummies(gapminder).head(20)

columns パラメータを使う 🏷
get_dummies() 関数に columns パラメータを指定すると「ダミー変数」に変換するカラムを指定できる.今回は continent を指定した.すると country はそのままとなり,新しいカラム continent_Africa や continent_Americas が追加された.
continent_Africacontinent_Americascontinent_Asiacontinent_Europecontinent_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 の機能の豊富さに驚かされる.引き続き学んでいくぞ👍