諸如sklearn庫,只能對數(shù)值型數(shù)據(jù)進(jìn)行訓(xùn)練分析,我們要把非數(shù)值型數(shù)據(jù)轉(zhuǎn)換成數(shù)值型,在這里介紹幾種方法,和大家一起學(xué)習(xí)。

實(shí)驗(yàn)數(shù)據(jù)
1. one-hot encode(獨(dú)熱編碼)
適用于屬性值域較小的特征,如 gender = {‘male’, ‘female’} ,它將添加2個新的列:female,male(之所以是2,因?yàn)閟ex特征只有兩種取值。),若是女性,則兩個新列取(1,0),反之為(0,1)。類似于寄存器引腳的有效電平,或者網(wǎng)絡(luò)編程中select函數(shù)的fd_set參數(shù)變量
以這個例子:
dummy_df = pd.get_dummies(df.gender)
dummy_df = dummy_df.rename(columns= lambda x: 'gender_'+str(x) )
df = pd.concat([df, dummy_df], axis=1)

Snip20180902_21.png
2. 使用map函數(shù)
pandas中, Series有map()函數(shù),可以用它來實(shí)現(xiàn)少量的映射
# create mapping rule
mapping_size = {'S':1, 'M':2, 'L':3}
# mapping
df['size'] = df['size'].map(mapping_size)

Snip20180902_23.png
3. factorizing 因子化
factorize函數(shù)把相同字符串映射為同一數(shù)字
pd.factorize(df.gender)

Snip20180902_27.png
結(jié)果返回一個元祖,發(fā)現(xiàn)第一個數(shù)組跟上圖的gender_female列一致。我試著又添加了一種性別,再次調(diào)用后:

Snip20180902_28.png
新性別被映射為2 ,說明映射后的值域是從0開始依次遞增的
關(guān)于獨(dú)熱編碼的具體介紹,大家可以看 OneHotEncoder獨(dú)熱編碼和 LabelEncoder標(biāo)簽編碼.