機械学習:前処理 非数値データの扱い
機械学習に使うデータセットが、構成データの全てが数値だとは限りません。この非数値データをカテゴリーデータを呼び、例えば、大中小のサイズのように順序がつくordinal data、そして順序のつかない色、赤、青、黄色のようなnominal dataの二つがあります。
この非数値データを特徴料として機械学習を行う場合、これらのデータをエンコードする必要があります。
順次特徴量は比較的簡単で、pythonの辞書機能を使います。
サンプルデータは以下の通り、サイズとし、
XP<P<S<M<L<XL<2XL
の順序関係があるとします。
import pandas as pd
df = pd.DataFrame({
'Size':['S', 'M', 'L', 'S', 'M', 'P', 'M', 'L', 'XP', '2XL', 'XL']
})
df.transpose()

サイズの順序関係を明記して、数値化する辞書を定義し、辞書機能を使って数値化します。
size_mapping = {'XP':0, 'P':1, 'S':2, 'M':3, 'L':4, 'XL':5, '2XL':6}
df['Size']=df['Size'].map(size_mapping)
df.transpose()
出力はこうなります。

元に戻すには、size_mappingの逆関数を定義し、再度マップしましょう。
inv_size_mapping={v:k for k,v in size_mapping.items()}
df['Size']=df['Size'].map(inv_size_mapping)
df.transpose()
