一、选题的背景
随着社会经济的发展,国民生活方式发生了深刻的变化,尤其是人口老龄化及城镇化进程的加速,中国心血管病危险因素流行趋势呈明显上升态势,导致了心血管病的发病人数持续增加,今后10年心血管病患病人数仍将快速增长。目前,心血管病死亡占城乡居民总死亡原因的首位,农村为44.8%,城市为41.9%。心血管病的疾病负担日渐加重,已成为重大的公共卫生问题。要想预防心血管疾病,就必须了解有哪些因素会加重心血管疾病的发生。我们可以通过心血管疾病数据集进行数据分析,更加直观了解心血管疾病的诱因,以便于预防。
二、大数据分析设计方案
1.本数据集的数据内容与数据特征分析
本案例数据基于患者的生理指标(性别、年龄、体重、身高等)、医疗检测指标(血压、血糖、胆固醇水平等)和患者提供的主观信息(吸烟、饮酒、运动等)共计12个特征,对患病情况进行分析。数据共计70000条,其中心血管疾病患者人数为34979,未患病人数为35021。
字段名称 | 字段类型 | 字段说明 |
id | 整形 | ID |
age | 整形 | 年龄(天) |
gender | 整形 | 性别,1 - 女性, 2 - 男性 |
height | 整形 | 身高 |
weight | 浮点型 | 体重 |
ap_hi | 整形 | 收缩压 |
ap_lo |
整形 | 舒张压 |
cholesterol | 整形 | 胆固醇,1:正常; 2:高于正常; 3:远高于正常 |
gluc | 整形 | 葡萄糖,1:正常; 2:高于正常; 3:远高于正常 |
smoke | 整形 | 病人是否吸烟 |
alco | 整形 | 酒精摄入量 |
active | 整形 | 体育活动 |
cardio | 整形 | 有无心血管疾病,0:无;1:有 |
2.数据分析的课程设计方案概述
(1)先对数据集的数据进行所需要的处理,并计算数据集中各种数据与心血管疾病的相关性。
(2)对数据集每一种数据与’cardio'的关系进行python可视化处理,判断其是否为影响心血管疾病患病几率的因素。
三、数据分析步骤
1.数据源
本次课程设计的数据集来源于数据科学科研和教学一体化平台。
附上网址:http://idatascience.cn/
2.数据清洗
导入数据集
1 import numpy as np 2 import pandas as pd 3 import scipy.stats as stats 4 import matplotlib.pyplot as plt 5 import seaborn
6 xxg_df=pd.read_csv('D:/a/bin/xxgjbsjj.csv')
7 xxg_df
显示结果
删除无效列‘id’
1 xxg_df.drop('id',axis=1,inplace=True) 2 xxg_df.head()
显示结果
重复值处理
1 xxg_df=xxg_df.drop_duplicates() 2 xxg_df.head()
显示结果
3.大数据分析过程
使用describe()方法查看数据表中的各数值字段的统计信息
1 xxg_df.describe()
显示结果
将年龄的单位转化成年并添加一行体重与身高的比值
1 xxg_df["bmi"] = (xxg_df["weight"] / (xxg_df["height"] / 100)**2).round(1) 2 xxg_df['age']=xxg_df['age']/365 3 xxg_df.head()
显示结果
计算数据集中各种数据与心血管疾病的相关性
1 xxg_df["age_per_alco"] = xxg_df["smoke"]/xxg_df["alco"] 2 xxg_df["years_per_cardio"] =xxg_df["age"]/xxg_df["gender"] 3 corr_matrix = xxg_df.corr() 4 corr_matrix["cholesterol"].sort_values(ascending=False)
显示结果
由结果我们可以看出胆固醇、血压(ap_hi和ap_low)和年龄与心血管疾病有着密切的关系。葡萄糖和胆固醇之间也有很强的关系。
用饼图和柱状图分别统计'gender','cardio'等七列数据中各项在其中的占比
1 import matplotlib.pyplot as plt 2 import seaborn as sns 3 def chart(df, col, labels): 4 data = df[col].value_counts().to_numpy() 5 def value(val): 6 a = np.round(val / 100 * data.sum(), 0) 7 return str('%0.0f' % a) + '\n(' + ('%0.2f' % val) + '%)' 8 plt.pie(data, labels = labels, autopct=value) 9 plt.legend(title=col) 10 plt.show() 11 12 plt.figure( figsize=(25,25)) 13 plt.subplot(7,2,1) 14 sns.countplot(xxg_df['gender']) 15 plt.subplot(7,2,2) 16 chart(xxg_df, 'gender', ['Female', 'Male']) 17 18 19 plt.figure( figsize=(25,25)) 20 plt.subplot(7,2,3) 21 sns.countplot(xxg_df['cardio']) 22 plt.subplot(7,2,4) 23 chart(xxg_df, 'cardio', ['No', 'Yes']) 24 25 plt.figure( figsize=(25,25)) 26 plt.subplot(7,2,5) 27 sns.countplot(xxg_df['cholesterol']) 28 plt.subplot(7,2,6) 29 chart(xxg_df, 'cholesterol', ['Normal', 'Above normal', 'Well above normal']) 30 31 plt.figure( figsize=(25,25)) 32 plt.subplot(7,2,7) 33 sns.countplot(xxg_df['gluc']) 34 plt.subplot(7,2,8) 35 chart(xxg_df, 'gluc', ['Normal', 'Above normal', 'Well above normal']) 36 37 plt.figure( figsize=(25,25)) 38 plt.subplot(7,2,9) 39 sns.countplot(xxg_df['smoke']) 40 plt.subplot(7,2,10) 41 chart(xxg_df, 'smoke', ['No', 'Yes']) 42 43 plt.figure( figsize=(25,25)) 44 plt.subplot(7,2,11) 45 sns.countplot(xxg_df['alco']) 46 plt.subplot(7,2,12) 47 chart(xxg_df, 'alco', ['No', 'Yes']) 48 49 plt.figure( figsize=(25,25)) 50 plt.subplot(7,2,13) 51 sns.countplot(xxg_df['active']) 52 plt.subplot(7,2,14) 53 chart(xxg_df, 'active', ['No', 'Yes'])
显示结果
用柱状图来观察性别是否会影响心血管疾病的患病几率
1 import seaborn as sns 2 import matplotlib.pyplot as plt 3 fig,axes=plt.subplots(1,2) 4 plt.figure( figsize=(30,25)) 5 sns.countplot(x=xxg_df['gender'],hue=xxg_df['cardio'],ax=axes[0]) 6 plt.figure( figsize=(30,25)) 7 sns.countplot(y=xxg_df['gender'],hue=xxg_df['cardio'],ax=axes[1])
显示结果
从图中我们可以看出虽然男性的患病人数要略高于没有患病人数,而女性的情况则相反。但是相差不是很明显,所以可以看出性别并不是影响心血管疾病患病几率的因素。
用柱状图和回归图来观察人体中胆固醇的含量是否会影响心血管疾病的患病几率
1 import seaborn as sns 2 import matplotlib.pyplot as plt 3 fig,axes=plt.subplots(1,2) 4 plt.figure( figsize=(30,25)) 5 sns.countplot(x=xxg_df['cholesterol'],hue=xxg_df['cardio'],ax=axes[0]) 6 plt.figure( figsize=(30,25)) 7 sns.regplot(x='cholesterol',y='cardio',data=xxg_df,ax=axes[1])
显示结果
从这两幅图中我们可以看出随着人体胆固醇的含量的增高,心血管疾病的患病几率也随之增高。
用柱状图和回归图来观察人体中葡萄糖的含量是否会影响心血管疾病的患病几率
1 import seaborn as sns 2 import matplotlib.pyplot as plt 3 fig,axes=plt.subplots(1,2) 4 plt.figure( figsize=(30,25)) 5 sns.countplot(x=xxg_df['gluc'],hue=xxg_df['cardio'],ax=axes[0]) 6 plt.figure( figsize=(30,25)) 7 sns.regplot(x='gluc',y='cardio',data=xxg_df,ax=axes[1])
显示结果
从这两幅图中我们可以看出随着人体葡萄糖的含量的增高,心血管疾病的患病几率也随之增高。
用柱状图来观察吸烟是否会增加心血管疾病的患病几率
1 import seaborn as sns 2 import matplotlib.pyplot as plt 3 fig,axes=plt.subplots(1,2) 4 plt.figure( figsize=(30,25)) 5 sns.countplot(x=xxg_df['smoke'],hue=xxg_df['cardio'],ax=axes[0]) 6 plt.figure( figsize=(30,25)) 7 sns.countplot(y=xxg_df['smoke'],hue=xxg_df['cardio'],ax=axes[1])
显示结果
从图中我们可以看出吸烟对心血管疾病的患病几率的影响极小。
用柱状图来观察喝酒是否会增加心血管疾病的患病几率
1 import seaborn as sns 2 import matplotlib.pyplot as plt 3 fig,axes=plt.subplots(1,2) 4 plt.figure( figsize=(30,25)) 5 sns.countplot(x=xxg_df['alco'],hue=xxg_df['cardio'],ax=axes[0]) 6 plt.figure( figsize=(30,25)) 7 sns.countplot(y=xxg_df['alco'],hue=xxg_df['cardio'],ax=axes[1])
显示结果
从图中我们可以看出喝酒并不会增加心血管疾病的患病几率。
用柱状图和回归图来观察运动对加心血管疾病的患病几率的影响
1 import seaborn as sns 2 import matplotlib.pyplot as plt 3 fig,axes=plt.subplots(1,2) 4 plt.figure( figsize=(30,25)) 5 sns.countplot(x=xxg_df['active'],hue=xxg_df['cardio'],ax=axes[0]) 6 plt.figure( figsize=(30,25)) 7 sns.regplot(x='active',y='cardio',data=xxg_df,ax=axes[1])
显示结果
从图中我们可以看出经常的运动可以在一定程度上降低心血管疾病的患病几率。
年龄与心血管疾病的关系
1 import seaborn as sns 2 import matplotlib.pyplot as plt 3 plt.figure( figsize=(30,25), dpi=80) 4 plt.subplot(3,2,1) 5 sns.distplot(xxg_df['age']) 6 plt.subplot(3,2,2) 7 sns.kdeplot(xxg_df['cardio'],color='r') 8 9 plt.figure( figsize=(30,25), dpi=80) 10 plt.subplot(3,2,3) 11 sns.regplot(x='age',y='cardio',data=xxg_df) 12 plt.subplot(3,2,4) 13 sns.regplot(x='age',y='cardio',data=xxg_df,color='r',marker='*') 14 15 plt.figure( figsize=(30,25), dpi=80) 16 plt.subplot(3,2,5) 17 sns.boxplot(x='cardio',y='age',data=xxg_df) 18 plt.subplot(3,2,6) 19 sns.violinplot(x=xxg_df['cardio'],y=xxg_df['age'])
结果显示
从回归图中我们可以看出随着年龄增加患心血管疾病的几率也会增大,从盒图和小提琴图可以看出患病的人年龄集中50-60之间。
血压与心血管疾病的关系
1 #收缩压与心血管疾病患病几率关系图 2 import seaborn as sns 3 import matplotlib.pyplot as plt 4 plt.figure( figsize=(30,25), dpi=80) 5 plt.subplot(3,2,1) 6 sns.distplot(xxg_df['ap_hi']) 7 plt.subplot(3,2,2) 8 sns.kdeplot(xxg_df['cardio'],color='r') 9 10 plt.figure( figsize=(30,25), dpi=80) 11 plt.subplot(3,2,3) 12 sns.regplot(x='ap_hi',y='cardio',data=xxg_df) 13 plt.subplot(3,2,4) 14 sns.regplot(x='ap_hi',y='cardio',data=xxg_df,color='r',marker='*') 15 16 plt.figure( figsize=(30,25), dpi=80) 17 plt.subplot(3,2,5) 18 sns.boxplot(x='cardio',y='ap_hi',data=xxg_df) 19 plt.subplot(3,2,6) 20 21 #舒张压与心血管疾病患病几率关系图 22 import seaborn as sns 23 import matplotlib.pyplot as plt 24 plt.figure( figsize=(30,25), dpi=80) 25 plt.subplot(3,2,1) 26 sns.distplot(xxg_df['ap_lo']) 27 plt.subplot(3,2,2) 28 sns.kdeplot(xxg_df['cardio'],color='r') 29 30 plt.figure( figsize=(30,25), dpi=80) 31 plt.subplot(3,2,3) 32 sns.regplot(x='ap_lo',y='cardio',data=xxg_df) 33 plt.subplot(3,2,4) 34 sns.regplot(x='ap_lo',y='cardio',data=xxg_df,color='r',marker='*') 35 36 plt.figure( figsize=(30,25), dpi=80) 37 plt.subplot(3,2,5) 38 sns.boxplot(x='cardio',y='ap_lo',data=xxg_df) 39 plt.subplot(3,2,6) 40 sns.violinplot(x=xxg_df['cardio'],y=xxg_df['ap_lo'])
显示结果
收缩压与心血管疾病患病几率关系图
舒张压与心血管疾病患病几率关系图
从图中我们可看出患心血管疾病的人血压偏高。
身高和体重与心血管疾病的关系
1 #身高与心血管疾病患病几率关系图 2 import seaborn as sns 3 import matplotlib.pyplot as plt 4 plt.figure( figsize=(30,25), dpi=80) 5 plt.subplot(3,2,1) 6 sns.distplot(xxg_df['height']) 7 plt.subplot(3,2,2) 8 sns.kdeplot(xxg_df['cardio'],color='r') 9 10 plt.figure( figsize=(30,25), dpi=80) 11 plt.subplot(3,2,3) 12 sns.regplot(x='height',y='cardio',data=xxg_df) 13 plt.subplot(3,2,4) 14 sns.regplot(x='height',y='cardio',data=xxg_df,color='r',marker='*') 15 16 plt.figure( figsize=(30,25), dpi=80) 17 plt.subplot(3,2,5) 18 sns.boxplot(x='cardio',y='height',data=xxg_df) 19 plt.subplot(3,2,6) 20 21 #体重与心血管疾病患病几率关系图 22 import seaborn as sns 23 import matplotlib.pyplot as plt 24 plt.figure( figsize=(30,25), dpi=80) 25 plt.subplot(3,2,1) 26 sns.distplot(xxg_df['weight']) 27 plt.subplot(3,2,2) 28 sns.kdeplot(xxg_df['cardio'],color='r') 29 30 plt.figure( figsize=(30,25), dpi=80) 31 plt.subplot(3,2,3) 32 sns.regplot(x='weight',y='cardio',data=xxg_df) 33 plt.subplot(3,2,4) 34 sns.regplot(x='weight',y='cardio',data=xxg_df,color='r',marker='*') 35 36 plt.figure( figsize=(30,25), dpi=80) 37 plt.subplot(3,2,5) 38 sns.boxplot(x='cardio',y='weight',data=xxg_df) 39 plt.subplot(3,2,6) 40 sns.violinplot(x=xxg_df['cardio'],y=xxg_df['weight'])
显示结果
身高与心血管疾病患病几率关系图
体重与心血管疾病的关系图
从图中我们可以看出身高越高和体重越重的人患心血管疾病的几率越小,反之则会增加。及越胖的人越容易患心血管疾病。
因为人的胖瘦不能但看身高或体重,应该看身高和体重的比值。
1 #体重和身高的比值与心血管疾病患病几率关系图 2 import seaborn as sns 3 import matplotlib.pyplot as plt 4 plt.figure( figsize=(30,25), dpi=80) 5 plt.subplot(3,2,1) 6 sns.distplot(xxg_df['bmi']) 7 plt.subplot(3,2,2) 8 sns.kdeplot(xxg_df['cardio'],color='r') 9 10 plt.figure( figsize=(30,25), dpi=80) 11 plt.subplot(3,2,3) 12 sns.regplot(x='bmi',y='cardio',data=xxg_df) 13 plt.subplot(3,2,4) 14 sns.regplot(x='bmi',y='cardio',data=xxg_df,color='r',marker='*') 15 16 plt.figure( figsize=(30,25), dpi=80) 17 plt.subplot(3,2,5) 18 sns.boxplot(x='cardio',y='bmi',data=xxg_df) 19 plt.subplot(3,2,6)
显示结果
从此图中我们能更明显的看出越胖的人越容易患心血管疾病。
将年龄,血压,身高和体重综合起来看
1 import seaborn 2 seaborn.pairplot(xxg_df[xxg_df.gender == 1], vars = ['age', 'height', 'weight', 'ap_hi', 'ap_lo'], hue = 'cardio') 3 plt.show() 4 seaborn.pairplot(xxg_df[xxg_df.gender == 2], vars = ['age', 'height', 'weight', 'ap_hi', 'ap_lo'], hue = 'cardio') 5 plt.show()
显示结果
从这些图中我们能更清晰认识心血管疾病在老年人群,肥胖人群,和高血压人群中更容易占比较大。
4.附上完整代码
1 import numpy as np 2 import pandas as pd 3 import scipy.stats as stats 4 import matplotlib.pyplot as plt 5 import seaborn 6 #导入数据集 7 xxg_df=pd.read_csv('D:/a/bin/xxgjbsjj.csv') 8 xxg_df 9 # 删除无效列‘id’ 10 xxg_df.drop('id',axis=1,inplace=True) 11 xxg_df.head() 12 # 重复值处理 13 xxg_df=xxg_df.drop_duplicates() 14 xxg_df.head() 15 #使用describe()方法查看数据表中的各数值字段的统计信息 16 xxg_df.describe() 17 # 将年龄的单位转化成年并添加一行体重与身高的比值 18 xxg_df['age']=xxg_df['age']/365 19 xxg_df["bmi"] = (xxg_df["weight"] / (xxg_df["height"] / 100)**2).round(1) 20 xxg_df.head() 21 # 计算数据集中各种数据与心血管疾病的相关性 22 xxg_df["age_per_alco"] = xxg_df["smoke"]/xxg_df["alco"] 23 xxg_df["years_per_cardio"] =xxg_df["age"]/xxg_df["gender"] 24 corr_matrix = xxg_df.corr() 25 corr_matrix["cholesterol"].sort_values(ascending=False) 26 # 用饼图和柱状图分别统计'gender','cardio'等七列数据中各项在其中的占比 27 import matplotlib.pyplot as plt 28 import seaborn as sns 29 def chart(df, col, labels): 30 data = df[col].value_counts().to_numpy() 31 def value(val): 32 33 a = np.round(val / 100 * data.sum(), 0) 34 return str('%0.0f' % a) + '\n(' + ('%0.2f' % val) + '%)' 35 plt.pie(data, labels = labels, autopct=value) 36 plt.legend(title=col) 37 plt.show() 38 39 plt.figure( figsize=(25,25)) 40 plt.subplot(7,2,1) 41 sns.countplot(xxg_df['gender']) 42 plt.subplot(7,2,2) 43 chart(xxg_df, 'gender', ['Female', 'Male']) 44 45 plt.figure( figsize=(25,25)) 46 plt.subplot(7,2,3) 47 sns.countplot(xxg_df['cardio']) 48 plt.subplot(7,2,4) 49 chart(xxg_df, 'cardio', ['No', 'Yes']) 50 51 plt.figure( figsize=(25,25)) 52 plt.subplot(7,2,5) 53 sns.countplot(xxg_df['cholesterol']) 54 plt.subplot(7,2,6) 55 chart(xxg_df, 'cholesterol', ['Normal', 'Above normal', 'Well above normal']) 56 57 plt.figure( figsize=(25,25)) 58 plt.subplot(7,2,7) 59 sns.countplot(xxg_df['gluc']) 60 plt.subplot(7,2,8) 61 chart(xxg_df, 'gluc', ['Normal', 'Above normal', 'Well above normal']) 62 63 plt.figure( figsize=(25,25)) 64 plt.subplot(7,2,9) 65 sns.countplot(xxg_df['smoke']) 66 plt.subplot(7,2,10) 67 chart(xxg_df, 'smoke', ['No', 'Yes']) 68 69 plt.figure( figsize=(25,25)) 70 plt.subplot(7,2,11) 71 sns.countplot(xxg_df['alco']) 72 plt.subplot(7,2,12) 73 chart(xxg_df, 'alco', ['No', 'Yes']) 74 75 plt.figure( figsize=(25,25)) 76 plt.subplot(7,2,13) 77 sns.countplot(xxg_df['active']) 78 plt.subplot(7,2,14) 79 chart(xxg_df, 'active', ['No', 'Yes']) 80 # 用柱状图来观察性别是否会影响心血管疾病的患病几率 81 import seaborn as sns 82 import matplotlib.pyplot as plt 83 fig,axes=plt.subplots(1,2) 84 plt.figure( figsize=(30,25)) 85 sns.countplot(x=xxg_df['gender'],hue=xxg_df['cardio'],ax=axes[0]) 86 plt.figure( figsize=(30,25)) 87 sns.countplot(y=xxg_df['gender'],hue=xxg_df['cardio'],ax=axes[1]) 88 # 用柱状图和回归图来观察人体中胆固醇的含量是否会影响心血管疾病的患病几率 89 import seaborn as sns 90 import matplotlib.pyplot as plt 91 fig,axes=plt.subplots(1,2) 92 plt.figure( figsize=(30,25)) 93 sns.countplot(x=xxg_df['cholesterol'],hue=xxg_df['cardio'],ax=axes[0]) 94 plt.figure( figsize=(30,25)) 95 sns.regplot(x='cholesterol',y='cardio',data=xxg_df,ax=axes[1]) 96 # 用柱状图和回归图来观察人体中葡萄糖的含量是否会影响心血管疾病的患病几率 97 import seaborn as sns 98 import matplotlib.pyplot as plt 99 fig,axes=plt.subplots(1,2) 100 plt.figure( figsize=(30,25)) 101 sns.countplot(x=xxg_df['gluc'],hue=xxg_df['cardio'],ax=axes[0]) 102 plt.figure( figsize=(30,25)) 103 sns.regplot(x='gluc',y='cardio',data=xxg_df,ax=axes[1]) 104 #用柱状图来观察吸烟是否会增加心血管疾病的患病几率 105 import seaborn as sns 106 import matplotlib.pyplot as plt 107 fig,axes=plt.subplots(1,2) 108 plt.figure( figsize=(30,25)) 109 sns.countplot(x=xxg_df['smoke'],hue=xxg_df['cardio'],ax=axes[0]) 110 plt.figure( figsize=(30,25)) 111 sns.countplot(y=xxg_df['smoke'],hue=xxg_df['cardio'],ax=axes[1]) 112 #用柱状图来观察喝酒是否会增加心血管疾病的患病几率 113 import seaborn as sns 114 import matplotlib.pyplot as plt 115 fig,axes=plt.subplots(1,2) 116 plt.figure( figsize=(30,25)) 117 sns.countplot(x=xxg_df['alco'],hue=xxg_df['cardio'],ax=axes[0]) 118 plt.figure( figsize=(30,25)) 119 sns.countplot(y=xxg_df['alco'],hue=xxg_df['cardio'],ax=axes[1]) 120 #用柱状图和回归图来观察运动对加心血管疾病的患病几率的影响 121 import seaborn as sns 122 import matplotlib.pyplot as plt 123 fig,axes=plt.subplots(1,2) 124 plt.figure( figsize=(30,25)) 125 sns.countplot(x=xxg_df['active'],hue=xxg_df['cardio'],ax=axes[0]) 126 plt.figure( figsize=(30,25)) 127 sns.regplot(x='active',y='cardio',data=xxg_df,ax=axes[1]) 128 #年龄与心血管疾病的关系 129 import seaborn as sns 130 import matplotlib.pyplot as plt 131 plt.figure( figsize=(30,25), dpi=80) 132 plt.subplot(3,2,1) 133 sns.distplot(xxg_df['age']) 134 plt.subplot(3,2,2) 135 sns.kdeplot(xxg_df['cardio'],color='r') 136 137 plt.figure( figsize=(30,25), dpi=80) 138 plt.subplot(3,2,3) 139 sns.regplot(x='age',y='cardio',data=xxg_df) 140 plt.subplot(3,2,4) 141 sns.regplot(x='age',y='cardio',data=xxg_df,color='r',marker='*') 142 143 plt.figure( figsize=(30,25), dpi=80) 144 plt.subplot(3,2,5) 145 sns.boxplot(x='cardio',y='age',data=xxg_df) 146 plt.subplot(3,2,6) 147 sns.violinplot(x=xxg_df['cardio'],y=xxg_df['age']) 148 #收缩压与心血管疾病患病几率关系图 149 import seaborn as sns 150 import matplotlib.pyplot as plt 151 plt.figure( figsize=(30,25), dpi=80) 152 plt.subplot(3,2,1) 153 sns.distplot(xxg_df['ap_hi']) 154 plt.subplot(3,2,2) 155 sns.kdeplot(xxg_df['cardio'],color='r') 156 157 plt.figure( figsize=(30,25), dpi=80) 158 plt.subplot(3,2,3) 159 sns.regplot(x='ap_hi',y='cardio',data=xxg_df) 160 plt.subplot(3,2,4) 161 sns.regplot(x='ap_hi',y='cardio',data=xxg_df,color='r',marker='*') 162 163 plt.figure( figsize=(30,25), dpi=80) 164 plt.subplot(3,2,5) 165 sns.boxplot(x='cardio',y='ap_hi',data=xxg_df) 166 plt.subplot(3,2,6) 167 sns.violinplot(x=xxg_df['cardio'],y=xxg_df['ap_hi']) 168 #舒张压与心血管疾病患病几率关系图 169 import seaborn as sns 170 import matplotlib.pyplot as plt 171 plt.figure( figsize=(30,25), dpi=80) 172 plt.subplot(3,2,1) 173 sns.distplot(xxg_df['ap_lo']) 174 plt.subplot(3,2,2) 175 sns.kdeplot(xxg_df['cardio'],color='r') 176 177 plt.figure( figsize=(30,25), dpi=80) 178 plt.subplot(3,2,3) 179 sns.regplot(x='ap_lo',y='cardio',data=xxg_df) 180 plt.subplot(3,2,4) 181 sns.regplot(x='ap_lo',y='cardio',data=xxg_df,color='r',marker='*') 182 183 plt.figure( figsize=(30,25), dpi=80) 184 plt.subplot(3,2,5) 185 sns.boxplot(x='cardio',y='ap_lo',data=xxg_df) 186 plt.subplot(3,2,6) 187 sns.violinplot(x=xxg_df['cardio'],y=xxg_df['ap_lo']) 188 #身高与心血管疾病患病几率关系图 189 import seaborn as sns 190 import matplotlib.pyplot as plt 191 plt.figure( figsize=(30,25), dpi=80) 192 plt.subplot(3,2,1) 193 sns.distplot(xxg_df['height']) 194 plt.subplot(3,2,2) 195 sns.kdeplot(xxg_df['cardio'],color='r') 196 197 plt.figure( figsize=(30,25), dpi=80) 198 plt.subplot(3,2,3) 199 sns.regplot(x='height',y='cardio',data=xxg_df) 200 plt.subplot(3,2,4) 201 sns.regplot(x='height',y='cardio',data=xxg_df,color='r',marker='*') 202 203 plt.figure( figsize=(30,25), dpi=80) 204 plt.subplot(3,2,5) 205 sns.boxplot(x='cardio',y='height',data=xxg_df) 206 plt.subplot(3,2,6) 207 sns.violinplot(x=xxg_df['cardio'],y=xxg_df['height']) 208 #体重与心血管疾病患病几率关系图 209 import seaborn as sns 210 import matplotlib.pyplot as plt 211 plt.figure( figsize=(30,25), dpi=80) 212 plt.subplot(3,2,1) 213 sns.distplot(xxg_df['weight']) 214 plt.subplot(3,2,2) 215 sns.kdeplot(xxg_df['cardio'],color='r') 216 217 plt.figure( figsize=(30,25), dpi=80) 218 plt.subplot(3,2,3) 219 sns.regplot(x='weight',y='cardio',data=xxg_df) 220 plt.subplot(3,2,4) 221 sns.regplot(x='weight',y='cardio',data=xxg_df,color='r',marker='*') 222 223 plt.figure( figsize=(30,25), dpi=80) 224 plt.subplot(3,2,5) 225 sns.boxplot(x='cardio',y='weight',data=xxg_df) 226 plt.subplot(3,2,6) 227 sns.violinplot(x=xxg_df['cardio'],y=xxg_df['weight']) 228 #体重和身高的比值与心血管疾病患病几率关系图 229 import seaborn as sns 230 import matplotlib.pyplot as plt 231 plt.figure( figsize=(30,25), dpi=80) 232 plt.subplot(3,2,1) 233 sns.distplot(xxg_df['bmi']) 234 plt.subplot(3,2,2) 235 sns.kdeplot(xxg_df['cardio'],color='r') 236 237 plt.figure( figsize=(30,25), dpi=80) 238 plt.subplot(3,2,3) 239 sns.regplot(x='bmi',y='cardio',data=xxg_df) 240 plt.subplot(3,2,4) 241 sns.regplot(x='bmi',y='cardio',data=xxg_df,color='r',marker='*') 242 243 plt.figure( figsize=(30,25), dpi=80) 244 plt.subplot(3,2,5) 245 sns.boxplot(x='cardio',y='bmi',data=xxg_df) 246 plt.subplot(3,2,6) 247 sns.violinplot(x=xxg_df['cardio'],y=xxg_df['bmi']) 248 #年龄,血压,身高和体重综合起来看 249 import seaborn 250 seaborn.pairplot(xxg_df[xxg_df.gender == 1], vars = ['age', 'height', 'weight', 'ap_hi', 'ap_lo'], hue = 'cardio') 251 plt.show() 252 seaborn.pairplot(xxg_df[xxg_df.gender == 2], vars = ['age', 'height', 'weight', 'ap_hi', 'ap_lo'], hue = 'cardio') 253 plt.show()
四、总结
1.通过对数据的分析和挖掘,达到了我们预期的目标,可以看出肥胖是影响心血管疾病患病几率的重要因素,虽然人体胆固醇和血糖含量高也是影响心血管疾病患病几率的因素,但是这些都是肥胖体现。所以要想免于心血管疾病的折磨,就要管住嘴,控制好自己的体重。在这建议经常去运动,首先运动是控制体重的良好方法,其次在数据分析的过程中我们也可以看出运动能在一定程度上降低心血管疾病患病几率。特别是老年人更应该注重锻炼,应为在数据分析的过程中我们可以看出老年人患心血管疾病的几率偏大。同时我们要注意虽然在在数据分析的过程中我们的吸烟和喝酒并不会增加心血管疾病患病几率,但是过量的吸烟和饮酒还是会其它方面影响我们的身心健康,所以我们应当控制自己吸烟饮酒的量,当然最好是不去吸烟和喝酒。
2.在完成此设计时,我熟练的掌握了可视化中各种图的运用和分析。对数据分析的算法的运用较少,若能运用机器学习的方法建立knn模型或其它模型来处理数据将能得到更好的效果。