一、選題的背景
隨着社會經濟的發展,國民生活方式發生了深刻的變化,尤其是人口老齡化及城鎮化進程的加速,中國心血管病危險因素流行趨勢呈明顯上升態勢,導致了心血管病的發病人數持續增加,今后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模型或其它模型來處理數據將能得到更好的效果。