機械学習:前処理 非数値データの扱い: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()

いいなと思ったら応援しよう!