logo资料库

利用Python进行心脏病患者特征分析.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
利用利用Python进行心脏病患者特征分析 进行心脏病患者特征分析 今天要跟大家说到的一个数据集分析,是关于心脏病的。心脏病作为全球第一大杀手,是我们不得不提前防御的疾病。今天我 们利用Python从一份心脏病数据集中找出一些规律,看下哪些特征对于确诊心脏病影响比较大,从而提醒我们注意平时的生 活规律。 数据集介绍 数据集介绍 数据分析之前,先得有数据集,首先先来介绍一下这份kaggle上下载的数据集。 对其中的字段进行分析: age:年龄。 sex:性别(1:男,0:女) cp:疼痛类型(1:典型心绞痛,2:非典型心绞痛,3:非心绞痛,4:没有症状(不痛)) trestbps:静息血压。 chol:胆固醇。 fbs:血糖(>120mg/dl为1,否则为0) restecg:心电图(0:正常,1:异常,2:严重) thalach:达到的最高心率。 exang:运动诱发心绞痛(1:是的,0:不是) oldpeak:运动相对于休息引起的ST期抑郁 slope:运动高峰的心电图(1:上坡,2:平和,3:下坡) ca:主要血管数目(0-3) thal:地中海贫血(3:普通。6:固定的缺陷,7:可逆的缺陷)。 target:心脏疾病诊断(0:没有心脏病,1:有心脏病) 这份数据集,记录的都是生理的特征,但是我们可以根据这些特征,来反向关注生活习惯。比如胆固醇,蛋黄、猪肝都是引起 胆固醇过高的食物,如果我们后面分析后,发现胆固醇过高会引起心脏病,那么平时就要注意少吃这些食物了。 数据分析-性别特征 数据分析 性别特征 接下来对这个数据集进行一波分析了,我们尽可能多的分析某些特征对于心脏病的影响。需要说一下,这里我们用到的依然是 pandas+seaborn的技术栈(需要完整代码私信“心脏病”即可获取)。先来看下性别比例吧: # 性别因素 gender_dist = df['sex'].value_counts() plt.pie(gender_dist.values,labels=['男','女'],autopct="%.2f%%") print(gender_dist) >> 1 207 >> 0 96 其中男性207,女性96,男性的占到了接近70%了。但这个并不是有70%的男性得了心脏病,而是这份数据集的男女比例。那 接下来再来看下,不同的性别患心脏病的分布情况。代码如下: fig,axes = plt.subplots(1,3,figsize=(15,4)) g_target_dist = df.groupby(['sex','target']).count()['age'].unstack()
# 患病柱状图 ax1 = sns.countplot(x="sex",hue='target',data=df,ax=axes[0]) ax1.set_xlabel("性别") ax1.set_xticklabels(['女','男']) # 女性患病比例饼状图 ax2 = axes[1] ax2.pie(g_target_dist.loc[0],labels=['正常','患病'],autopct="%.2f%%") ax2.set_title("女性患病比例") # 男性患病比例饼状图 ax3 = axes[2] ax3.pie(g_target_dist.loc[1],labels=['正常','患病'],autopct="%.2f%%") ax3.set_title("男性患病比例") 第一个图可以看出,女性的患病比例明显高于男性。然后具体性别来看,女性患病比例达到75%,男性患病比例只有45%。通 过数据集分析发现,女性患病的概率高于男性 女性患病的概率高于男性,所以女性朋友们注意啦,要好好保护自己哦~ 数据分析-年龄特征 数据分析 年龄特征 在分析之前,按照我的常识来说,年龄对于患心脏病的概率影响是比较大的,一般年纪比较大的患心脏病的概率比较高。那事 实是不是这样的呢?我们用数据说话!原来的数据集中年龄是具体的数字,为了更加方便的分析,我们将年龄分成“儿童(0- 18)”、“青年(18-40)”、“中年(40-66)”、“老年(66-200)”,而经过分割后,发现属于儿童阶段的数据没有,因此我们就只取后面三 个进行分析。分析的代码如下: fig,axes = plt.subplots(2,2,figsize=(8,8)) age_dist = df[['age','target']] age_dist['age_range'] = pd.cut(age_dist['age'],bins=[0,18,40,66,200],include_lowest=True,right=False,labels=['儿童','青年','中 年','老年']) sns.countplot(x="age_range",hue="target",data=age_dist,ax=axes[0,0]) axes[0,0].set_xlabel("年龄段") youth = age_dist[age_dist['age_range']=='青年']['target'].value_counts() _ = axes[0,1].pie(youth,labels=['正常','患病'],autopct="%.2f%%") axes[0,1].set_title("青年人患病比例") middle = age_dist[age_dist['age_range']=='中年']['target'].value_counts() _ = axes[1,0].pie(middle,labels=['正常','患病'],autopct="%.2f%%") axes[1,0].set_title("中年人患病比例") old = age_dist[age_dist['age_range']=='老年']['target'].value_counts() _ = axes[1,1].pie(old,labels=['正常','患病'],autopct="%.2f%%") axes[1,1].set_title("老年人患病比例") plt.tight_layout() 最终的效果图如下:
原创文章 30获赞 4访问量 1903 关注 私信 展开阅读全文 作者:jspython
分享到:
收藏