機械学習:前処理 非数値データの扱い:nominalデータ その1
前記事では、順序がつけられる非数値データのエンコーディングを扱いました。ここでは、順序がつけられない名義データ、nominalデータを同じように数値化してみます。
順序がつけられないデータとは、地名、人名、等がありますが、前記事のサイズのデータセットに、この順序をつけられないデータの色を加えましょう。
import pandas as pd
df = pd.DataFrame({
'Size':['S', 'M', 'L', 'S', 'M', 'P', 'M', 'L', 'XP', '2XL', 'XL'],
'Color':['green','red','yellow','yellow','blue',
'black','white','red','yellow','green','red']
})
df.transpose()
このデータフレームはこうなります。
サイズでは大小関係でコーディングしましたが、色は大きさもないので、そのまま読み込んでアルファベット順で辞書にします。
size_mapping = {'XP':0, 'P':1, 'S':2, 'M':3, 'L':4, 'XL':5, '2XL':6}
color_mapping={label:idx for idx, label in enumerate(np.unique(df['Color']))}
サイズで同じようにしないのは、アルファベット順では、大小関係が一致しないからです。
サイズと色の辞書を使って、データフレームをエンコードすると、
df['Size']=df['Size'].map(size_mapping)
df['Color']=df['Color'].map(color_mapping)
df.transpose()
元に戻すのも、サイズと同様に、逆変換の辞書を作成して戻します。
inv_size_mapping={v:k for k,v in size_mapping.items()}
inv_color_mapping={v:k for k,v in color_mapping.items()}
df['Size']=df['Size'].map(inv_size_mapping)
df['Color']=df['Color'].map(inv_color_mapping)
df.transpose()