資料分析預處理 字元型類別變數(string)

2021-10-09 22:32:05 字數 2776 閱讀 4842

在資料分析時,會遇到一些非數值型的類別變數,例如字串型別(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...