项目实战:中风数据分析(3)
中风体检数据分析
1.数据导入
首先将所需要的包进行引用
importpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt#设置中文显示plt.rcParams['font.sans-serif']=['SimHei']#设置负号显示plt.rcParams['axes.unicode_minus']=False然后导入数据
#pip install xlrdage_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| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| 年龄 | 1767.0 | 45.858766 | 22.785222 | 0.08 | 28.000 | 49.00 | 64.000 | 82.00 |
| 平均血糖 | 1767.0 | 109.355444 | 47.983848 | 55.22 | 77.925 | 93.55 | 118.565 | 271.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+ KB3.数据预处理
# 处理空缺值stroke=stroke.dropna()#合并表格data=pd.merge(age_abs,stroke,on='编号',how='inner')data.head()| 编号 | 年龄 | 平均血糖 | 性别 | 高血压 | 是否结婚 | 工作类型 | 居住类型 | 体重指数 | 吸烟史 | 中风 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 9046 | 67.0 | 228.69 | 男 | 否 | 是 | 私人 | 城市 | 36.6 | 以前吸烟 | 是 |
| 1 | 31112 | 80.0 | 105.92 | 男 | 否 | 是 | 私人 | 农村 | 32.5 | 从不吸烟 | 是 |
| 2 | 60182 | 49.0 | 171.23 | 女 | 否 | 是 | 私人 | 城市 | 34.4 | 抽烟 | 是 |
| 3 | 1665 | 79.0 | 174.12 | 女 | 是 | 是 | 私营企业 | 农村 | 24.0 | 从不吸烟 | 是 |
| 4 | 56669 | 81.0 | 186.21 | 男 | 否 | 是 | 私人 | 城市 | 29.0 | 以前吸烟 | 是 |
data['中风'].value_counts()中风 否 1463 是 209 Name: count, dtype: int64data=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()结论分析:中风影响因素分类占比数据分析结论
基于性别、高血压、吸烟史、婚姻状况、居住类型、工作类型六大分类的中风样本占比饼图,从人口特征、生活习惯、社会属性三个维度进行相关性分析,结论如下:
一、人口性别特征:女性中风发病占比更高
在确诊中风人群中,女性占比 57.4%,男性 42.6%,中风样本里女性患者数量显著高于男性。说明在本次统计样本中,女性群体中风患病风险相对更高,性别是中风发病的关联因素之一。
二、基础疾病:无高血压人群仍是中风主体,但高血压患病风险偏高
中风患者里,无高血压占 71.3%,患有高血压仅 28.7%。
从样本基数看,大部分中风病患没有高血压病史;
结合医学常识反向推导:全量人群中高血压患者占比远低于 28.7%,说明高血压人群在自身群体里中风发病概率远高于非高血压人群,高血压是中风重要高危诱因。
三、吸烟行为:有吸烟相关经历(既往 / 现在抽烟)合计近半数中风占比
吸烟史分组:从不吸烟 40.2%、以前吸烟 27.3%、抽烟 18.7%、吸烟情况未知 13.9%。
曾经吸烟 + 当前抽烟人群合计占中风患者 46%,接近中风总人数一半。证明吸烟(含既往吸烟)和中风发病高度相关,烟草暴露是中风重要危险因素,即便已经戒烟,过往吸烟史仍会提升中风患病概率。
四、婚姻状态:已婚群体为中风高发人群
中风患者中已婚占 89.0%,未婚仅 11.0%,已婚人群在中风样本中占据绝对主体。该现象大概率和已婚人群年龄结构、生活作息、慢病积累年限相关,已婚人群平均年龄偏大是中风高发的关键隐性原因。
五、居住地域:城乡中风发病分布基本持平,城市略高
城市居住中风患者 52.2%、农村 47.8%,城乡中风占比差距仅 4.4%,整体分布均衡,城市居民中风占比小幅高于农村。推测城市饮食高油高盐、作息压力、久坐等生活方式,轻微拉高城市中风发病率。
六、工作类型:私人从业者中风占比遥遥领先
工作类型分布:私人工作 60.8%、私营企业 25.4%、政府工作 13.4%、学生仅 0.5%。
自由 / 私人从业者是中风最高发群体,合计私人 + 私营企业占中风患者 86.2%;
学生群体中风占比极低(0.5%),和青少年年龄小、基础慢病少直接相关;
自由职业作息不规律、缺乏体检、饮食作息管控差,是该类人群中风高发的主要诱因。
七、综合总结与健康建议
高危重点防控人群:有高血压病史、有吸烟史(现烟 / 既往吸烟)、从事私人 / 私营工作、中老年已婚女性是中风高危重点筛查对象;
健康干预方向:严控高血压慢病管理、普及控烟戒烟科普,针对自由职业人群推广定期体检、规律作息;
地域分层防控:城市侧重不良生活习惯干预,农村加强高血压等慢病筛查,缩小城乡中风发病差距。
4.3 分析血糖和体重指数
plt.scatter(data['平均血糖'],data['体重指数'],s=0.8)plt.xlabel("平均血糖")plt.ylabel("体重指数")plt.title("平均血糖与体重指数关系")plt.show()
origin_url=output_27_0.png&pos_id=img-7gHvKQ9s-1780415498142)
结论:平均血糖与体重指数(BMI)散点图分析结论
一、相关性整体趋势
从散点分布可以看出:平均血糖与体重指数整体呈现正相关趋势,随着平均血糖(横轴)数值不断升高,体重指数(纵轴)整体同步抬升:
低血糖区间:数据点大量集中在 BMI 20~35 的偏低区间,整体体重指数普遍偏小;
高血糖区间:散点逐步向 BMI 高值区(35 以上、最高接近 56)聚集,血糖越高,出现高 BMI 肥胖人群的概率明显变大。
二、细节分布特征
离散异常值:图表右上角存在个别极端离群点,代表少数患者同时存在血糖严重偏高 + 重度肥胖(BMI 超 50)的情况,属于中风高危人群;
聚集规律:血糖偏低时,BMI 分布紧凑、集中在正常 / 偏胖范围;血糖升高后,BMI 数据离散程度变大,肥胖个体数量显著增多;
无严格线性绑定:二者不是绝对线性关系,同一血糖值下,BMI 跨度很大,说明体重指数只是影响血糖的重要因素,血糖同时还受饮食、遗传、慢病等其他因素影响。
三、医学与业务结论
肥胖(高 BMI)和高血糖高度伴生:肥胖是血糖升高的重要诱因,超重 / 肥胖人群更易出现血糖代谢异常,而高血糖、肥胖均是诱发中风的关键危险因素;
健康干预建议:控制体重、减脂减重可以有效改善血糖水平,对预防中风有重要作用;针对 BMI 超标人群,需要重点筛查血糖指标,提前防控糖尿病、中风并发症。
四、结合前文中风数据联动总结
结合上一节分类变量分析:高 BMI + 高血糖叠加高血压、吸烟等因素时,中风发病风险会进一步叠加升高,这类复合型慢病人群是中风筛查的核心高危群体。
中风体检数据分析综合总结报告
一、项目概况
本项目依托两份体检数据集healthcare-dataset-age_abs.xlsx(年龄、平均血糖)、healthcare-dataset-stroke.xlsx(性别、基础病史、生活、职业、体重指数、中风标签),原始样本共1767 条,其中确诊中风病例 209 例、非中风 1463 例。经过缺失值清洗、多表合并、特征离散化处理后,围绕人口属性、基础慢病、生活习惯、生理指标四大维度开展可视化分析,挖掘各类因素与中风发病的内在关联。
二、数据预处理说明
缺失处理:stroke数据仅体重指数存在 5 条缺失值,采用删除缺失样本方式完成清洗;年龄 - 血糖数据集无缺失、全为数值型数据。
数据合并:以「编号」为关联键,对内连接两份数据源,筛选出中风 =“是” 的 209 份样本作为最终分析数据集。
特征分段:将连续年龄离散划分为青少年 (0~20)、青年 (20~40)、中年 (40~60)、壮年 (60~80)、老年 (80~100) 五个年龄段,便于分组统计。
三、各维度数据分析结果
(一)年龄维度:中老年是中风高发群体
从年龄占比饼图可得:
壮年(60~80 岁)中风占比58.9%,为中风最高发年龄段;
中年(40~60 岁)占比 27.3%、老年(80 岁以上)占 11.0%;
青年 + 青少年合计仅 2.8%,中风风险随年龄增长显著提升。
(二)分类特征(人口 / 慢病 / 生活 / 地域 / 职业)分析
- 性别
中风患者中女性占57.4%、男性 42.6%,样本中女性中风患病占比显著高于男性。 - 高血压病史
中风人群里,患高血压 28.7%、无高血压 71.3%;结合全人群基数来看,高血压人群个体中风发病概率远高于普通人群,高血压是中风关键高危慢病。 - 吸烟史
从不吸烟 40.2%、以前吸烟 27.3%、当前抽烟 18.7%、信息未知 13.9%;有吸烟(含既往吸烟)经历人群合计占中风患者 46%,烟草暴露会大幅提升中风患病风险,既往吸烟也存在长期健康隐患。 - 婚姻状况
已婚患者占89.0%,未婚仅 11.0%,已婚群体年龄普遍偏大、慢性病累积时间更长是高发核心原因。 - 居住类型
城市居住 52.2%、农村 47.8%,城市居民中风占比小幅偏高,推测城市高油高盐饮食、生活压力、久坐等不良生活方式为诱因。 - 工作类型
私人从业者 60.8%、私营企业 25.4%、公职 13.4%、学生仅 0.5%;私人 + 私营从业者合计 86.2%,自由职业作息不规律、体检缺失是中风高发诱因,青少年学生中风发病概率极低。
(三)生理指标:平均血糖与体重指数 (BMI) 相关性
从散点图分布规律:
整体正相关:平均血糖越高,体重指数整体趋向增大;低血糖样本集中在 BMI20~35 正常区间,高血糖样本大量聚集在 BMI>35 肥胖区间;
离散特征:存在少量极端离群点,即超高血糖 + 重度肥胖(BMI>50),该类个体中风风险叠加翻倍;同血糖数值下 BMI 跨度较大,说明血糖还受遗传、饮食等多因素影响;
医学关联:肥胖与高血糖高度伴生,二者协同作用显著提升中风患病概率。
四、综合高危人群画像
✅ ** 中风重点筛查高危人群:**60 岁以上中老年、女性、高血压患者、有吸烟史(现烟 / 既往烟)、私人 / 私营从业者、高血糖合并肥胖人群。
五、健康防控建议
慢病管控:常态化监测高血压、血糖指标,超重 / 肥胖人群科学减脂减重,改善糖脂代谢,从生理指标源头降低中风风险;
控烟科普:面向中老年群体普及戒烟宣教,即使既往吸烟人群也需定期体检筛查脑血管健康;
职业健康管理:针对自由职业、私营就业人群推广年度体检,引导规律作息、均衡饮食;
城乡分层防控:城市重点干预高油高盐饮食、久坐熬夜等不良习惯;农村加强中老年高血压、血糖免费筛查,缩小城乡中风发病差距。
六、项目总结
本次数据分析验证:高龄、女性、高血压、烟草暴露、肥胖高血糖、不规律职业生活是诱发中风的六大核心危险因素,数据分析结论可用于社区健康科普、脑卒中筛查工作的数据支撑,精准定向高危人群进行提前干预,降低中风发病率。
