關於使用Sklearn進行資料預處理 —— 缺失值(Missing Value)處理
關於缺失值(missing value)的處理
在sklearn的preprocessing包中包含了對資料集中缺失值的處理,主要是應用Imputer類進行處理。
首先需要說明的是,numpy的陣列中可以使用np.nan/np.NaN(Not A Number)來代替缺失值,對於陣列中是否存在nan可以使用np.isnan()來判定。
使用type(np.nan)或者type(np.NaN)可以發現改值其實屬於float型別,程式碼如下:
1 2 3 4 5 6 7 8 |
(np.NaN)
|
因此,如果要進行處理的資料集中包含缺失值一般步驟如下:
1、使用字串'nan'來代替資料集中的缺失值;
2、將該資料集轉換為浮點型便可以得到包含np.nan的資料集;
3、使用sklearn.preprocessing.Imputer類來處理使用np.nan對缺失值進行編碼過的資料集。
程式碼如下:
1 2 3 4 5 6 7 8 9 10 |
2 ], [ 6 , np.nan], [ 7 , 6 ]]
|
上述程式碼使用陣列X去“訓練”一個Imputer類,然後用該類的物件去處理陣列Y中的缺失值,缺失值的處理方式是使用X中的均值(axis=0表示按列進行)代替Y中的缺失值。
當然也可以使用imp物件來對X陣列本身進行處理。
通常,我們的資料都儲存在檔案中,也不一定都是Numpy陣列生成的,因此缺失值可能不一定是使用nan來編碼的,對於這種情況可以參考以下程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
上述程式碼line模擬從檔案中讀取出來的一行資料,使用nan來代替原始資料中的缺失值編碼,將其轉換為浮點型,然後使用X中的均值填補Z中的缺失值。