• 【毕业设计】大数据心血管疾病数据分析(医学大数据分析)


    0 前言

    🔥 Hi,大家好,这里是丹成学长的毕设系列文章!

    🔥 对毕设有任何疑问都可以问学长哦!

    这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定要提前准备,避免到后面措手不及,草草了事。

    为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的新项目是

    🚩 基于大数据的心血管疾病分析

    🥇学长这里给一个题目综合评分(每项满分5分)

    • 难度系数:4分
    • 工作量:4分
    • 创新点:3分

    🧿 选题指导, 项目分享:

    https://gitee.com/yaa-dc/BJH/blob/master/gg/cc/README.md

    1 课题背景

    本项目的任务是利用患者的检查结果预测心血管疾病(CVD)的存在与否。

    2 数据处理

    数据集包括年龄、性别、收缩压、舒张压等12个特征的患者数据记录7万份。

    当患者有心血管疾病时,目标类“cardio”等于1,如果患者健康,则为0。

    数据描述

    有三种类型的输入特征:

    • Objective: 客观事实;
    • Examination: 体检检查结果;
    • Subjective: 病人提供的信息

    在这里插入图片描述
    数据信息概览

    import numpy as np
    import pandas as pd
    import seaborn as sns
    from matplotlib import pyplot as plt
    import os
    
    
    df.head()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述
    变量分析

    df.info()
    
    • 1

    在这里插入图片描述
    所有特征都是数字,12个整数和1个小数(权值)。第二列告诉我们数据集有多大,每个字段有多少非空值。
    我们可以使用’ describe() ‘来显示每个属性的样本统计信息,比如’ min ‘、’ max ‘、’ mean ‘、’ std ':

    评论

    df.describe()
    
    • 1

    在这里插入图片描述
    年龄以天为单位,身高以厘米为单位。
    让我们看看数值变量以及它们是如何在目标类中分布的。
    例如,什么年龄患有心血管疾病的人数超过没有心血管疾病的人数?

    3 数据可视化

    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");
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    可以观察到55岁以上的人更容易得心血管疾病的。
    从上面的表格中,我们可以看到ap_hi, ap_lo, weight 和height中有异常值。我们以后再处理。

    让我们看看数据集中的分类变量及其分布:

    df_categorical = df.loc[:,['cholesterol','gluc', 'smoke', 'alco', 'active']]
    sns.countplot(x="variable", hue="value",data= pd.melt(df_categorical));
    
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    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");
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    可以清楚地看到,CVD患者的胆固醇和血糖水平较高。而且一般来说不太活跃,运动少。

    为了计算“1”在性别栏中代表女性还是男性,让我们计算每个性别的身高平均值。我们假设男人平均比女人高。

    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
    
    # 设置matplotlib图
    f, ax = plt.subplots(figsize=(11, 9))
    # 画出热图,并校正长宽比
    sns.heatmap(corr, mask=mask, cmap=cmap, vmax=.3, center=0,annot = True,
                square=True, linewidths=.5, cbar_kws={"shrink": .5});
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    我们可以看到年龄和胆固醇有显著的影响,但与目标阶层的相关性不是很高。

    .
    让我们创建violinplot来显示不同性别的身高分布。

    查看每个性别特征值的身高和体重的平均值可能不足以决定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");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述
    让我们创造一个新的特征-身体质量指数(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);
    
    • 1
    • 2

    在这里插入图片描述
    根据女性的BMI,喝酒的女性比喝酒的男性有更高的心血管疾病风险。

    4 最后

  • 相关阅读:
    异步开发的终极答案—协程
    【AOSP】手把手教你编译和调试AOSP源码
    存储架构颠覆者Optane持久性内存
    Android Studio 开发支付宝小程序
    选择排序,冒泡排序,插入排序,快速排序及其优化
    python基础知识整理 02-字符串、列表、元组
    Spring【 Spring整合MyBatis、SpringAOP(AOP简介 、AOP相关术语、AOP入门)】(五)-全面详解(学习总结---从入门到深化)
    el-table 列背景色渐变
    NFT 交易市场的格局之变:从一家独大到百家争鸣
    基于java小组学习系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  • 原文地址:https://blog.csdn.net/caxiou/article/details/128128143