上一篇介紹瞭如何將缺失值識別出來
代碼及數據集
鏈接:https://pan.baidu.com/s/1tEz3gkTfmZjD-0JaC-nhVQ 密碼:l16a
數據清洗知識脈絡
缺失值識別
缺失值處理
歸一化
缺失值處理
主要的缺失值處理方法:
- 刪除缺少值的行
- 填充缺失值
數據集說明
- 數據集:皮馬印第安人糖尿病預測數據集
- 數據來源:https://www.kaggle.com/uciml/pima-indians-diabetes-database
- 數據9列,768行
- 該數據希望通過體檢結果細節,預測21歲以上的女性5年內會否會換上糖尿病
數據含義
- 懷孕次數
- 口服葡萄糖耐量試驗中的2小時血漿葡萄糖濃度
- 舒張壓(mmHg)
- 三頭肌皮褶厚度(mm)
- 體重指數[BMI]
- 2小時血清胰島素濃度(uU/ml)
- 糖尿病家族函數
- 年齡
- 類變量(0/1,代表是否患有糖尿病)
刪除有害行
- 最常見和最容易的方法是直接刪除缺少數值的這一行
- 優點:可以得到完整的數據
- 缺點;儘管數據都有值,但是沒有利用到儘可能多的數據,忽略了一部分觀察值
需要判斷缺失值佔總體數據的大小,若是佔比過大則不適宜採用這種方法
對數據集做進一步的EDA
- 主要是比較缺失值前後的統計數據
pima_contrast = (pima_dropped.mean() - pima.mean()) / pima.mean()
ax = (pima_comtrast).plot(kind='bar', title='% change in average column values')
ax.set_ylabel('% change')
- Pregnanci 下降了百分之十四
- DiabetesPedingreeFunction上升了百分之11
- 變化非常大,這樣會影響數據的形狀,所以應該儘可能的保留多的數據
填充缺失值
利用現有的知識/數據來確定缺少的數據量值並填充的行爲
- 均值填充
- 衆數填充
- 中位數填充
# 使用均值填充
pima['Glucose'].fillna(pima['Glucose'].mean(), inplace=True)
pima.isnull().sum()
# 查看Glucose的缺失值
empty_plasma_index = pima[pima['Glucose'].isnull()].index
pima.loc[empty_plasma_index]['Glucose']
使用scikit-learn預處理類Imputer 來填充
from sklearn.impute import SimpleImputer as Imputer
imputer = Imputer(strategy='mean') # 實例化
pima_imputed = imputer.fit_transform(pima)
pima_imputed = pd.DataFrame(pima_imputed, columns=pima_colunmn_names)
pima_imputed.isnull().sum()
- 可以看出所有缺失值已經填充了
- strategy:
- mean 均值填充
- median 中值填充
- most_frequent 衆數填充