代碼及數據集
鏈接: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 = pd.read_csv('data/pima.data')
pima.head()
- 由於數據集沒有列名所以通過數據集說明手動將其加上
pima_colunmn_names = ['Pregnanci', 'Glucose', 'BloodPressure', 'SkinTickness', 'Insulin',
'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome']
pima = pd.read_csv('data/pima.data', names=pima_colunmn_names)
pima.head()
計算空準確率
- 空準確率:使用樣本比例最多的類別進行預測時的準確率。
pima['Outcome'].value_counts(normalize=True)
- 可以看出當前空準確率爲65%左右
用列名做一個基本的統計、選擇和可視化操作
- 對糖尿病人和健康人區別進行可視化
- 希望直方圖可以顯示出一些規律
- 或者這兩類之間的顯著差異
for col in ['BMI', 'BloodPressure', 'Glucose']:
plt.hist(pima[pima['Outcome']==0][col], 10, alpha=0.5, label='non-diabetes')
plt.hist(pima[pima['Outcome']==1][col], 10, alpha=0.5, label='diabetes')
plt.legend(loc='uper right')
plt.xlabel(col)
plt.ylabel('Frequency')
plt.title('Histogram of {}'.format(col))
plt.show()
- 通過這幾張圖可以看出患者與正常人的體徵有着顯著的不同
- 例如血漿葡萄糖濃度會有很大的增長
- 血壓和BMI也比正常人低
使用線性相關矩陣來量化變量間的關係
# 數據集相關矩陣的熱力圖
plt.figure(figsize=(16,8))
sns.heatmap(pima.corr(), annot=True, cmap= 'PuBuGn')
plt.title('Variable relationship')
plt.show()
- 可以看出Glucose和Outcome是一個強相關的關係
EDA分析提示Glucose是預測糖尿病的重要變量
查看缺失值
- 目前來看並沒有缺失值
- 在通過describe查看下
ext_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NhbXBiZWxsMDAx,size_16,color_FFFFFF,t_70)
要儘可能的瞭解數據集,以便找到其他符號填充的缺失數據
務必閱讀數據及說明文檔,裏面可能會提到缺失數據問題
缺失值的常見填充方法
- 0(數值型
- unknown或者Unknown(類別型)
- ?(類別型)
清洗數據將0替換成None
columns = ['Glucose','BloodPressure','SkinTickness','Insulin','BMI']
for col in columns:
pima[col].replace([0], [None], inplace=True)