特徵工程(3)特徵增強:數據清洗——缺失值處理

上一篇介紹瞭如何將缺失值識別出來

代碼及數據集

鏈接: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 衆數填充
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章