# 1 前言
?? 基于大數(shù)據(jù)的心血管疾病分析
??學(xué)長(zhǎng)這里給一個(gè)題目綜合評(píng)分(每項(xiàng)滿分5分)
- 難度系數(shù):3分
- 工作量:3分
- 創(chuàng)新點(diǎn):4分
選題指導(dǎo),項(xiàng)目分享:文章來源:http://www.zghlxwxcb.cn/news/detail-496038.html
https://gitee.com/yaa-dc/warehouse-1/blob/master/python/README.md文章來源地址http://www.zghlxwxcb.cn/news/detail-496038.html
1 課題背景
本項(xiàng)目的任務(wù)是利用患者的檢查結(jié)果預(yù)測(cè)心血管疾病(CVD)的存在與否。
2 數(shù)據(jù)處理
數(shù)據(jù)集包括年齡、性別、收縮壓、舒張壓等12個(gè)特征的患者數(shù)據(jù)記錄7萬(wàn)份。
當(dāng)患者有心血管疾病時(shí),目標(biāo)類“cardio”等于1,如果患者健康,則為0。
數(shù)據(jù)描述
有三種類型的輸入特征:
- Objective: 客觀事實(shí);
- Examination: 體檢檢查結(jié)果;
- Subjective: 病人提供的信息
數(shù)據(jù)信息概覽
import numpy as np
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
import os
df.head()
變量分析
df.info()
所有特征都是數(shù)字,12個(gè)整數(shù)和1個(gè)小數(shù)(權(quán)值)。第二列告訴我們數(shù)據(jù)集有多大,每個(gè)字段有多少非空值。
我們可以使用’ describe() ‘來顯示每個(gè)屬性的樣本統(tǒng)計(jì)信息,比如’ min ‘、’ max ‘、’ mean ‘、’ std ':
評(píng)論
df.describe()
年齡以天為單位,身高以厘米為單位。
讓我們看看數(shù)值變量以及它們是如何在目標(biāo)類中分布的。
例如,什么年齡患有心血管疾病的人數(shù)超過沒有心血管疾病的人數(shù)?
3 數(shù)據(jù)可視化
from matplotlib import rcParams
rcParams['figure.figsize'] = 11, 8
df['years'] = (df['age'] / 365).round().astype('int')
sns.countplot(x='years', hue='cardio', data = df, palette="Set2");
可以觀察到55歲以上的人更容易得心血管疾病的。
從上面的表格中,我們可以看到ap_hi, ap_lo, weight 和height中有異常值。我們以后再處理。
讓我們看看數(shù)據(jù)集中的分類變量及其分布:
df_categorical = df.loc[:,['cholesterol','gluc', 'smoke', 'alco', 'active']]
sns.countplot(x="variable", hue="value",data= pd.melt(df_categorical));
df_long = pd.melt(df, id_vars=['cardio'], value_vars=['cholesterol','gluc', 'smoke', 'alco', 'active'])
sns.catplot(x="variable", hue="value", col="cardio",
data=df_long, kind="count");
可以清楚地看到,CVD患者的膽固醇和血糖水平較高。而且一般來說不太活躍,運(yùn)動(dòng)少。
為了計(jì)算“1”在性別欄中代表女性還是男性,讓我們計(jì)算每個(gè)性別的身高平均值。我們假設(shè)男人平均比女人高。
corr = df.corr()
cmap = sns.diverging_palette(220, 10, as_cmap=True)
mask = np.zeros_like(corr, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True
# 設(shè)置matplotlib圖
f, ax = plt.subplots(figsize=(11, 9))
# 畫出熱圖,并校正長(zhǎng)寬比
sns.heatmap(corr, mask=mask, cmap=cmap, vmax=.3, center=0,annot = True,
square=True, linewidths=.5, cbar_kws={"shrink": .5});
我們可以看到年齡和膽固醇有顯著的影響,但與目標(biāo)階層的相關(guān)性不是很高。
.
讓我們創(chuàng)建violinplot來顯示不同性別的身高分布。
查看每個(gè)性別特征值的身高和體重的平均值可能不足以決定1是男性還是女性。
import warnings
warnings.filterwarnings("ignore")
df_melt = pd.melt(frame=df, value_vars=['height'], id_vars=['gender'])
plt.figure(figsize=(12, 10))
ax = sns.violinplot(
x='variable',
y='value',
hue='gender',
split=True,
data=df_melt,
scale='count',
scale_hue=False,
palette="Set2");
讓我們創(chuàng)造一個(gè)新的特征-身體質(zhì)量指數(shù)(BMI):
比較健康人的平均BMI和病人的平均BMI。正常的BMI值在18.5到25之間。
df['BMI'] = df['weight']/((df['height']/100)**2)
sns.catplot(x="gender", y="BMI", hue="alco", col="cardio", data=df, color = "yellow",kind="box", height=10, aspect=.7);
根據(jù)女性的BMI,喝酒的女性比喝酒的男性有更高的心血管疾病風(fēng)險(xiǎn)。
選題指導(dǎo),項(xiàng)目分享:
https://gitee.com/yaa-dc/warehouse-1/blob/master/python/README.md
到了這里,關(guān)于python畢業(yè)設(shè)計(jì) 醫(yī)學(xué)大數(shù)據(jù)分析 - 心血管疾病分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!