在資料分析時,會遇到一些非數值型的類別變數,例如字串型別(string)。比如,西瓜的色澤:青綠、淺白、烏黑等等…直接放在svm、決策樹或者貝葉斯分類器時,不方便處理,也直接套用sklearn中的內建演算法。因而在預處理時需要對他們做相應的處理。
一般可以把類別資料分為:無序和有序兩類。
有序:比如衣服尺碼,s、m、l、xl,是有大小的;再比如擁堵指數,數值由0變化到4隨擁堵加劇
無序:比如衣服顏色,黑、白、黃、藍、綠,是沒有大小(優劣)序列的類別
我們可以用map函式,將字元型類別替換成有大小順序的數值。
# 定義乙個dataframe資料
data = pd.dataframe([[
"green"
,"s"
,100
,"label1"],
["blue"
,"m"
,110
,"label2"],
["red"
,"x"
,120
,"label3"],
["black"
,"xl"
,130
,"label4"]]
)# 設定列名
data.columns =
["color"
,"size"
,"price"
,"label"
]#通過列舉獲取類標與整數之間的對映關係
print
#對label列進行對映
data[
"size_label"
]= data[
"label"].
mapprint
(data)
結果:
我們對上面衣服的顏色特徵進行編碼,將顏色對映為。看起來這樣對映好像沒什麼問題,真的沒有問題嗎?實則不然,我們這樣對映實際上給顏色強加了乙個大小關係,即black>red>blue>green,實際上顏色是不存在這種關係的,很顯然結果肯定也不是最優的。這時,我們可以通過獨熱編碼(one-hot encoding)來解決這一類問題。獨熱編碼是通過建立乙個新的虛擬特徵,虛擬特徵的每一列各代表標稱資料的乙個值。例如,顏色一共有四個取值green、blue、red、black,獨熱編碼是通過四位二進位制來表示,如果是green就表示為[1,0,0,0],對應的顏色是[green,blue,red,black],如果屬於哪一種顏色,則取值為1,否則為0。
第一步:先對離散的數字、離散的文字、離散的類別進行編號,使用 labelencoder,labelencoder會根據取值的種類進行標註。
import sklearn.preprocessing as pre_processing
import numpy as np
label=pre_processing.labelencoder(
)labels=label.fit_transform(
['中國'
,'美國'
,'法國'
,'德國'])
print
(labels)
第二步:然後進行獨熱編碼,使用onehotencoder
labels=np.array(labels)
.reshape(
len(labels),1
)#先將x組織成(sample,feature)的格式
onehot=pre_processing.onehotencoder(
)onehot_label=onehot.fit_transform(labels)
print
(onehot_label.toarray())
#這裡一定要進行toarray()
注意:在使用onehotencoder進行onehot編碼的時候,需要先將字串轉換成為整數之後才能進行onehot編碼,不然會報錯。
也可以通過pandas模組的get_dummies起到同樣的作用。
與onehot兩者區別是:get_dummies用於對乙個資料集處理,而onehot由於提前設定了labelencoder,所以可以對不同的資料集用同一種轉換設定。(我覺得)
# 資料預處理
# 由於色澤、根蒂...都是string,且不可比較大小的變數,呼叫get_dummycolumns方法進行不可比較大小虛擬變數的轉換。
# 以西瓜色澤為例
# (對於可比較大小的虛擬變數,比如『12個月定存』、『6個月定存』、『1個月定存』...)使用map方法比較虛擬變數的轉換
dummycolumns =
['色澤'
]'''
for column in dummycolumns:
data[column] = data[column].astype('category')
'''dummiesdata = pd.get_dummies(data,
columns = dummycolumns, prefix=dummycolumns,
prefix_sep =
'_', dummy_na=
false
, drop_first =
false
)
結果:
參考:
Python資料分析 資料預處理
資料預處理主要包括 資料清洗 資料整合 資料變換和資料規約。資料清洗主要是刪除原始資料中的無關資料 重複資料,平滑噪音資料,篩選掉和挖掘主題無關的資料,處理缺失值和異常值。處理缺失值資料方法有三類 刪除記錄 資料插補和不處理。其中資料插補方法如下 1 均值 中數值 眾數插補 根據屬性型別,用均值 中...
在對資料進行預處理時,怎樣處理類別型特徵?
類別型特徵主要是指性別 男 女 體型 胖 瘦 適中 等只有在選項內取值的特徵,類別型特徵的原始輸入通常是字串形式,除了決策樹等少數模型能夠直接處理字串形式的輸入,對於邏輯回歸 支援向量機等模型來說,類別型特徵必須經過處理轉換成數值型特徵才能正確工作。序號編碼通常用於處理類別間具有大小關係的資料,例如...
資料分析與挖掘之資料預處理
目錄 資料整合 簡單變換 資料規範化 標準化 1 離差標準化 歸一化 2 z score標準化 0 1標準化 3 小數定標規範化 資料規範化 離散化 1 等寬離散化 2 等頻率離散化 3 優化離散 資料整合 import numpy a numpy.array 1,5,6 9,4,3 b numpy...