心脏病题目(1)数据可视化

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 13:22   11   0

数据集:

https://www.kaggle.com/ronitf/heart-disease-uci

  • 检查目标值
print(data.target.value_counts())

1 165
0 138
Name: target, dtype: int64

  • 画出图像
sns.countplot(x='target',data=data)

  • 求百分比
target1 = len(data[data['target']==1])
target0 = len(data[data['target']==0])
NoHD = target0/len(data['target'])
IsHD = target1/len(data['target'])

0.45544554455445546 0.5445544554455446

  • 年龄跟心脏病的分布
pd.crosstab(data.age,data.target).plot(kind='bar',figsize=(18,6))
plt.title('Age distribution for heart attack')
plt.xticks(fontsize=20,rotation=45)
plt.xlabel('Age')
plt.ylabel('Frequency')
plt.savefig('Heartdisease.eps')#eps可以到AI里改美观一点,个人喜好啦
plt.show()

交叉表的利用:crosstab

参照:https://blog.csdn.net/hustqb/article/details/78086394

交叉表(cross-tabulation, 简称crosstab)是一种用于计算分组频率的特殊透视表

  • 性别与心脏病的关系
pd.crosstab(data.sex,data.target).plot(kind='bar')
plt.title('Sex distribution for heart attack')
plt.xlabel('Sex')
plt.ylabel('Frequency')
plt.show()

其实用seaborn的countplot效果也差不多吧(?

sns.countplot(x='sex',hue='target',data=data)
plt.show()

  • 年龄与心率的关系(分为有病和没病的两种)
plt.scatter(x=data.age[data.target==1],y=data.thalach[data.target==1],c='red')#挑选有病的
plt.scatter(x=data.age[data.target==0],y=data.thalach[data.target==0])#没病的
plt.legend(['HD','NoHD'])
plt.xlabel('Age')
plt.ylabel('Maximum Heart Rate')
plt.show()

再用seaborn试试

g = sns.lmplot(x="age", y="thalach", data=data,
                fit_reg=False,legend=False,hue='target',scatter=True)
plt.legend(['HD','NoHD'])
plt.xlabel('Age')
plt.ylabel('Maximum Heart Rate')
plt.show()

  • 统计slope的频次
print(data.slope.value_counts())

2 142
1 140
0 21
Name: slope, dtype: int64

pd.crosstab(data.slope,data.target).plot(kind='bar')
plt.title('slope frequency')
plt.xlabel('The Slope of The Peak Exercise ST Segment ')
plt.xticks(rotation=0)
plt.ylabel('Frequency')
plt.show()

  • fbs频次统计
pd.crosstab(data.fbs,data.target).plot(kind='bar')
plt.title('fbs frequency')
plt.xlabel('The persons fasting blood sugar (> 120 mg/dl, 1 = true; 0 = false)')
plt.xticks(rotation=0)
plt.ylabel('Frequency')
plt.legend(['NoHD','IsHD'])
plt.show()

  • cp频次

pd.crosstab(data.cp,data.target).plot(kind='bar')
plt.title('cp frequency')
plt.xlabel('Chest Pain Type')
plt.xticks(rotation=0)
plt.ylabel('Frequency')
plt.legend(['NoHD','IsHD'])
plt.show()

用countplot做效果一样。

sns.countplot(x='cp',hue='target',data=data)
plt.ylabel('Frequency')
plt.xlabel('Chest Pain Type')
plt.show()

  • seaborn的使用

sns.stripplot(x='target', y='trestbps', data=data)
plt.show()

有心脏病的人静息血压较低。

  • 热力图
plt.figure(figsize=(15,9))
sns.heatmap(data.corr(),annot=True,cmap='coolwarm',linewidths=.1)
plt.show()

总结:分析数据时,离散数据使用了散点图,分类数据采用了crosstab统计不同类出现的频次。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP