代码及数据集
链接: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)