中风体检数据分析1.数据导入首先将所需要的包进行引用importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltimportseabornassns#设置中文显示plt.rcParams[font.sans-serif][SimHei]#设置负号显示plt.rcParams[axes.unicode_minus]False然后导入数据age_abspd.read_excel(healthcare-dataset-age_abs.xlsx)print(age_abs.head())strokepd.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().Tcountmeanstdmin25%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.35544age_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.数据预处理# 处理空缺值strokestroke.dropna()#合并表格datapd.merge(age_abs,stroke,on编号,howinner)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: int64datadata.loc[data[中风]是].reset_index(dropTrue)#只需要中风数据data表格将进行后续的分析分析出因素和中风的相关性。4.数据分析与可视化4.1 查看年龄和中风的相关性#首先将连续年龄离散化labels[青少年,青年,中年,壮年,老年]data[年龄级别]pd.cut(data[年龄],bins[0,20,40,60,80,100],labelslabels)#按照年龄级别进行分组,统计每个组别的中风数量df_agedata.groupby(年龄级别)[中风].count()#df_age#可视化df_age.plot.pie(autopct%1.1f%%,labelslabels,startangle90)plt.title(不同年龄级别中中风数量占比)plt.show()可见年龄为壮年的中风人数最多其次是中年和老年最后是青少年和青年。4.2 查看其他类别数据和中风的相关性#按照类别进行分组,统计每个组别的中风数量df_sexdata.groupby(性别).size()df_HBPdata.groupby(高血压).size()df_smokedata.groupby(吸烟史).size()df_marrigedata.groupby(是否结婚).size()df_livetypedata.groupby(居住类型).size()df_worketypedata.groupby(工作类型).size()#可视化figplt.figure(figsize(12,12),dpi200)#创建画布设置大小和分辨率plt.subplot(321)#创建子图3行2列第1个子图df_sex.plot.pie(autopct%1.1f%%,startangle90)plt.title(不同性别中中风数量占比)plt.subplot(322)df_HBP.plot.pie(autopct%1.1f%%,startangle90)plt.title(高血压中风数量占比)plt.subplot(323)df_smoke.plot.pie(autopct%1.1f%%,startangle90)plt.title(是否吸烟中风数量占比)plt.subplot(324)df_marrige.plot.pie(autopct%1.1f%%,startangle90)plt.title(是否结婚中风数量占比)plt.subplot(325)df_livetype.plot.pie(autopct%1.1f%%,startangle90)plt.title(居住类型中风数量占比)plt.subplot(326)df_worketype.plot.pie(autopct%1.1f%%,startangle90)plt.title(工作类型中风数量占比)plt.tight_layout()#调整子图间距plt.show()![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6a59bfe5987346eb8aabe4ba6d775cc2.png#pic_center)结论分析4.3 分析血糖和体重指数plt.scatter(data[平均血糖],data[体重指数],s0.8)plt.xlabel(平均血糖)plt.ylabel(体重指数)plt.title(平均血糖与体重指数关系)plt.show()结论?# 1. 计算年龄、平均血糖、体重指数与中风的相关系数# 先将中风转为数值型data[中风_数值]data[中风].map({是:1,否:0})corr_agedata[年龄].corr(data[中风_数值])corr_glucosedata[平均血糖].corr(data[中风_数值])corr_bmidata[体重指数].corr(data[中风_数值])print(f年龄与中风的相关系数{corr_age:.2f})print(f平均血糖与中风的相关系数{corr_glucose:.2f})print(f体重指数与中风的相关系数{corr_bmi:.2f})年龄与中风的相关系数nan 平均血糖与中风的相关系数nan 体重指数与中风的相关系数nan# 2. 对比中风与非中风人群的平均血糖、BMIstroke_comparepd.DataFrame({中风:[是,否],平均年龄:[data[data[中风]是][年龄].mean(),data[data[中风]否][年龄].mean()],平均血糖:[data[data[中风]是][平均血糖].mean(),data[data[中风]否][平均血糖].mean()],平均BMI:[data[data[中风]是][体重指数].mean(),data[data[中风]否][体重指数].mean()]})print(stroke_compare)# 可视化对比fig,axesplt.subplots(1,3,figsize(15,5))sns.barplot(x中风,y平均年龄,datastroke_compare,axaxes[0])axes[0].set_title(中风与非中风人群平均年龄对比)sns.barplot(x中风,y平均血糖,datastroke_compare,axaxes[1])axes[1].set_title(中风与非中风人群平均血糖对比)sns.barplot(x中风,y平均BMI,datastroke_compare,axaxes[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[正常,偏高,糖尿病])# 统计不同血压和血糖水平下的中风人数crosspd.crosstab([data[高血压],data[血糖水平]],data[中风])print(cross)# 可视化交叉热力图cross_pctcross.div(cross.sum(axis1),axis0)sns.heatmap(cross_pct,annotTrue,fmt.1%,cmapReds)plt.title(高血压与血糖水平的中风占比热力图)plt.show()中风 是 高血压 血糖水平 否 正常 69 偏高 24 糖尿病 56 是 正常 24 偏高 5 糖尿病 31三、最终项目结论核心发现1年龄是中风的首要风险因素中风风险随年龄增长显著升高60-80 岁是最高发年龄段40 岁以上人群需重点预防。2代谢指标存在协同效应平均血糖与体重指数呈中等正相关二者叠加会增加中风风险。3生活方式与职业存在关联私人 / 私营企业工作者、已婚人群的中风病例占比更高提示压力、作息等因素的潜在影响。建设性建议1重点人群干预对 40 岁以上、尤其是 60-80 岁的人群应定期进行脑血管、血糖、血脂筛查做到早发现、早干预。2代谢综合管理针对高血糖人群建议同时控制体重通过饮食调整和规律运动降低血糖和 BMI 水平减少中风风险。3职业与生活方式指导针对私人 / 私营企业工作者建议关注工作压力管理避免长期熬夜、久坐保持健康的生活习惯。4戒烟与健康宣教即使是 “以前吸烟” 的人群仍需持续关注血管健康定期体检降低中风复发风险。