当前位置: 首页 > news >正文

项目实战:中风数据分析

中风体检数据分析

1.数据导入

首先将所需要的包进行引用

importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltimportseabornassns#设置中文显示plt.rcParams['font.sans-serif']=['SimHei']#设置负号显示plt.rcParams['axes.unicode_minus']=False

然后导入数据

age_abs=pd.read_excel('healthcare-dataset-age_abs.xlsx')print(age_abs.head())stroke=pd.read_excel('healthcare-dataset-stroke.xlsx')print(stroke.head())
编号 年龄 平均血糖 0 9046 67.0 228.69 1 51676 61.0 202.21 2 31112 80.0 105.92 3 60182 49.0 171.23 4 1665 79.0 174.12 编号 性别 高血压 是否结婚 工作类型 居住类型 体重指数 吸烟史 中风 0 9046 男 否 是 私人 城市 36.6 以前吸烟 是 1 51676 女 否 是 私营企业 农村 NaN 从不吸烟 是 2 31112 男 否 是 私人 农村 32.5 从不吸烟 是 3 60182 女 否 是 私人 城市 34.4 抽烟 是 4 1665 女 是 是 私营企业 农村 24.0 从不吸烟 是

healthcare-dataset-age_abs.xlsx表格为患者的年龄和血糖信息,表格healthcare-dataset-stroke.xlsx为患者的基本信息(性别、年龄、体重、身高、血压、心率、是否患有中风等)。

2.查看数据信息(分布)

age_abs[['年龄','平均血糖']].describe().T
countmeanstdmin25%50%75%max
年龄1767.045.85876622.7852220.0828.00049.0064.00082.00
平均血糖1767.0109.35544447.98384855.2277.92593.55118.565271.74

可见年龄的分布范围为[082],年龄分布较为平均,平均年龄为42岁,标准差为12岁。\ 平均血糖的分布范围为[55.22271.74],平均血糖为109.35544

age_abs.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1767 entries, 0 to 1766 Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 编号 1767 non-null int64 1 年龄 1767 non-null float64 2 平均血糖 1767 non-null float64 dtypes: float64(2), int64(1) memory usage: 41.5 KB

可见age_abs表格中没有缺失值,所有数据均为数值型数据。

#查看中风数据的空缺情况stroke.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1767 entries, 0 to 1766 Data columns (total 9 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 编号 1767 non-null int64 1 性别 1767 non-null object 2 高血压 1767 non-null object 3 是否结婚 1767 non-null object 4 工作类型 1767 non-null object 5 居住类型 1767 non-null object 6 体重指数 1672 non-null float64 7 吸烟史 1767 non-null object 8 中风 1767 non-null object dtypes: float64(1), int64(1), object(7) memory usage: 124.4+ KB

3.数据预处理

# 处理空缺值stroke=stroke.dropna()
#合并表格data=pd.merge(age_abs,stroke,on='编号',how='inner')data.head()
编号年龄平均血糖性别高血压是否结婚工作类型居住类型体重指数吸烟史中风
0904667.0228.69私人城市36.6以前吸烟
13111280.0105.92私人农村32.5从不吸烟
26018249.0171.23私人城市34.4抽烟
3166579.0174.12私营企业农村24.0从不吸烟
45666981.0186.21私人城市29.0以前吸烟
data['中风'].value_counts()
否 1463 是 209 Name: 中风, dtype: int64
data=data.loc[data['中风']=='是'].reset_index(drop=True)#只需要中风数据

data表格将进行后续的分析,分析出因素和中风的相关性。

4.数据分析与可视化

4.1 查看年龄和中风的相关性

#首先将连续年龄离散化labels=['青少年','青年','中年','壮年','老年']data['年龄级别']=pd.cut(data['年龄'],bins=[0,20,40,60,80,100],labels=labels)#按照年龄级别进行分组,统计每个组别的中风数量df_age=data.groupby('年龄级别')['中风'].count()#df_age#可视化df_age.plot.pie(autopct='%1.1f%%',labels=labels,startangle=90)plt.title("不同年龄级别中中风数量占比")plt.show()

可见年龄为壮年的中风人数最多,其次是中年和老年,最后是青少年和青年。

4.2 查看其他类别数据和中风的相关性

#按照类别进行分组,统计每个组别的中风数量df_sex=data.groupby('性别').size()df_HBP=data.groupby('高血压').size()df_smoke=data.groupby('吸烟史').size()df_marrige=data.groupby('是否结婚').size()df_livetype=data.groupby('居住类型').size()df_worketype=data.groupby('工作类型').size()#可视化fig=plt.figure(figsize=(12,12),dpi=200)#创建画布,设置大小和分辨率plt.subplot(321)#创建子图,3行2列,第1个子图df_sex.plot.pie(autopct='%1.1f%%',startangle=90)plt.title("不同性别中中风数量占比")plt.subplot(322)df_HBP.plot.pie(autopct='%1.1f%%',startangle=90)plt.title("高血压中风数量占比")plt.subplot(323)df_smoke.plot.pie(autopct='%1.1f%%',startangle=90)plt.title("是否吸烟中风数量占比")plt.subplot(324)df_marrige.plot.pie(autopct='%1.1f%%',startangle=90)plt.title("是否结婚中风数量占比")plt.subplot(325)df_livetype.plot.pie(autopct='%1.1f%%',startangle=90)plt.title("居住类型中风数量占比")plt.subplot(326)df_worketype.plot.pie(autopct='%1.1f%%',startangle=90)plt.title("工作类型中风数量占比")plt.tight_layout()#调整子图间距plt.show()

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6a59bfe5987346eb8aabe4ba6d775cc2.png#pic_center)

结论分析:?

4.3 分析血糖和体重指数

plt.scatter(data['平均血糖'],data['体重指数'],s=0.8)plt.xlabel("平均血糖")plt.ylabel("体重指数")plt.title("平均血糖与体重指数关系")plt.show()

结论?

# 1. 计算年龄、平均血糖、体重指数与中风的相关系数# 先将"中风"转为数值型data['中风_数值']=data['中风'].map({'是':1,'否':0})corr_age=data['年龄'].corr(data['中风_数值'])corr_glucose=data['平均血糖'].corr(data['中风_数值'])corr_bmi=data['体重指数'].corr(data['中风_数值'])print(f"年龄与中风的相关系数:{corr_age:.2f}")print(f"平均血糖与中风的相关系数:{corr_glucose:.2f}")print(f"体重指数与中风的相关系数:{corr_bmi:.2f}")
年龄与中风的相关系数:nan 平均血糖与中风的相关系数:nan 体重指数与中风的相关系数:nan
# 2. 对比中风与非中风人群的平均血糖、BMIstroke_compare=pd.DataFrame({'中风':['是','否'],'平均年龄':[data[data['中风']=='是']['年龄'].mean(),data[data['中风']=='否']['年龄'].mean()],'平均血糖':[data[data['中风']=='是']['平均血糖'].mean(),data[data['中风']=='否']['平均血糖'].mean()],'平均BMI':[data[data['中风']=='是']['体重指数'].mean(),data[data['中风']=='否']['体重指数'].mean()]})print(stroke_compare)# 可视化对比fig,axes=plt.subplots(1,3,figsize=(15,5))sns.barplot(x='中风',y='平均年龄',data=stroke_compare,ax=axes[0])axes[0].set_title('中风与非中风人群平均年龄对比')sns.barplot(x='中风',y='平均血糖',data=stroke_compare,ax=axes[1])axes[1].set_title('中风与非中风人群平均血糖对比')sns.barplot(x='中风',y='平均BMI',data=stroke_compare,ax=axes[2])axes[2].set_title('中风与非中风人群平均BMI对比')plt.tight_layout()plt.show()
中风 平均年龄 平均血糖 平均BMI 0 是 67.712919 134.571388 30.471292 1 否 NaN NaN NaN

# 3. 高血压与平均血糖的交叉分析# 将血糖分箱data['血糖水平']=pd.cut(data['平均血糖'],bins=[0,100,126,300],labels=['正常','偏高','糖尿病'])# 统计不同血压和血糖水平下的中风人数cross=pd.crosstab([data['高血压'],data['血糖水平']],data['中风'])print(cross)# 可视化交叉热力图cross_pct=cross.div(cross.sum(axis=1),axis=0)sns.heatmap(cross_pct,annot=True,fmt='.1%',cmap='Reds')plt.title('高血压与血糖水平的中风占比热力图')plt.show()
中风 是 高血压 血糖水平 否 正常 69 偏高 24 糖尿病 56 是 正常 24 偏高 5 糖尿病 31

三、最终项目结论

  1. 核心发现

(1)年龄是中风的首要风险因素:中风风险随年龄增长显著升高,60-80 岁是最高发年龄段,40 岁以上人群需重点预防。
(2)代谢指标存在协同效应:平均血糖与体重指数呈中等正相关,二者叠加会增加中风风险。
(3)生活方式与职业存在关联:私人 / 私营企业工作者、已婚人群的中风病例占比更高,提示压力、作息等因素的潜在影响。

  1. 建设性建议

(1)重点人群干预:对 40 岁以上、尤其是 60-80 岁的人群,应定期进行脑血管、血糖、血脂筛查,做到早发现、早干预。
(2)代谢综合管理:针对高血糖人群,建议同时控制体重,通过饮食调整和规律运动,降低血糖和 BMI 水平,减少中风风险。
(3)职业与生活方式指导:针对私人 / 私营企业工作者,建议关注工作压力管理,避免长期熬夜、久坐,保持健康的生活习惯。
(4)戒烟与健康宣教:即使是 “以前吸烟” 的人群,仍需持续关注血管健康,定期体检,降低中风复发风险。

http://www.gsyq.cn/news/1429166.html

相关文章:

  • 洛阳市中央空调维修师傅推荐|全城各区金牌师傅,靠谱选欧米到家 - 欧米到家
  • 【紧急更新】2024春招已启用新一代AI简历筛查引擎:你的ChatGPT求职信正在被自动降权(附3分钟急救校验清单)
  • 如何用Scarab为《空洞骑士》打造智能模组管理生态:3大核心机制深度解析
  • 基于ESP32与Firebase的智能安防系统:从硬件到云端的物联网实战
  • 5.30 合肥黄金回收,今日大盘附近正常报价 - 资讯纵览
  • 2026年C++最热实测(二)——C++26那些“不起眼”却救命的新特性
  • 【紧急预警】传统知识库系统将在18个月内集体失效:AI原生知识管理迁移倒计时启动(含兼容性评估工具包)
  • 基于ESP32与LVGL的嵌入式GUI开发:圣诞雪花球交互项目全解析
  • TypeScript高级特性:提升代码质量
  • Gemini数据分析报告生成逻辑首度公开:基于217份企业级报告的逆向工程分析(限期内部资料)
  • Ovito 3.6.0基础版也能搞定:手把手教你用CNA和W-S法可视化辐照损伤中的晶界与点缺陷
  • 3分钟掌握Sketch批量重命名:告别混乱图层管理的终极指南
  • 【限时解密】:某Top3律所内部使用的Claude文档推理增强框架(含OCR对齐校验模块源码片段)
  • Anthropic深夜炸场,最强旗舰 Claude Opus 4.8 发布,代码与Agent能力全面进化!
  • 销售团队为什么需要 CRM 与合同、回款、审批联动
  • Finalshell连接报错‘Connection refused’?可能是你虚拟机SSH配置的这处细节没改
  • Arduino步进电机与RGB LED协同控制:打造智能旋转发光花
  • AI工具版权雷区地图(含GitHub Copilot、Runway、Jasper等12款主流工具实测结论):你的公司正在踩中哪一条?
  • 2026年AI智能写作排行榜:实战应用指南与顶级工具推荐
  • 事件相机与合成数据技术解析与应用
  • SAP MM采购订单实操:K成本中心消耗品采购,从ME21N到MIGO的完整流程与FI凭证解析
  • HashMap相关面试题
  • Vue——别再自己写枚举了!RuoYi-Vue3字典管理全局缓存,让代码量减少90%
  • 终极压缩包密码找回指南:如何用ArchivePasswordTestTool轻松破解加密文件
  • 2026年 风机/上风风机/上风通风机/边墙风机厂家推荐榜:技术实力与通风性能深度盘点 - 品牌企业推荐师(官方)
  • 如何在Windows上轻松搞定PDF处理:Poppler终极指南
  • 现在不评估Gemini替代方案,Q4可能面临API配额冻结风险:2024下半年Google Cloud政策突变预警
  • 如何用Universal Pokemon Randomizer ZX为宝可梦游戏注入无限新鲜感?
  • Apache Airflow:彻底解决复杂工作流调度难题的数据管道自动化平台
  • GEO公司集中在哪里?