• 基于Python实现心脏病数据可视化DEA+预测【500010103.1】


    一、数据说明

    该心脏病数据集是通过组合 5 个已经独立可用但以前未合并的流行心脏病数据集来策划的。在这个数据集中,5 个心脏数据集结合了 11 个共同特征,使其成为迄今为止可用于研究目的的最大心脏病数据集。
    该数据集由 1190 个实例和 11 个特征组成。这些数据集被收集并组合在一个地方,以帮助推进与CAD相关的机器学习和数据挖掘算法的研究,并希望最终推进临床诊断和早期治疗。

    二、导入包

    import numpy as np # 线性代数
    import pandas as pd # 数据处理, CSV file I/O (e.g. pd.read_csv)
    
    import warnings
    warnings.filterwarnings("ignore")
    
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    from sklearn.preprocessing import MinMaxScaler
    from sklearn.model_selection import train_test_split
    
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.ensemble import GradientBoostingClassifier
    from sklearn.ensemble import ExtraTreesClassifier
    from sklearn.ensemble import AdaBoostClassifier
    from sklearn.linear_model import LogisticRegression
    from sklearn.svm import SVC
    from xgboost import XGBClassifier
    from lightgbm import LGBMClassifier
    
    from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
    
    from IPython.core.display import display, HTML
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    三、数据集基本信息

    1、导入数据

    df = pd.read_csv("./data/heart_statlog_cleveland_hungary_final.csv")
    df.shape
    
    • 1
    • 2

    image.png

    2、数据处理

    df.head()
    
    • 1

    image.png

    df.describe()
    
    • 1

    image.png

    df.isna().sum()
    
    • 1

    image.png

    四 、类别统计

    categoricals = ["sex", "chest pain type", "fasting blood sugar", "resting ecg", "exercise angina", "ST slope", "target"]
    fig, axes = plt.subplots(nrows=1, ncols=7, figsize=(12, 5))
    
    • 1
    • 2

    Figure_1.png

    五、分类参数对心脏病诊断的影响

    fig, axes = plt.subplots(nrows=2, ncols=3, figsize=(12, 7))
    index = 0
    
    • 1
    • 2

    Figure_2.png

    六、配对图显示诊断标记的患者之间的数值数据分布

    sns.pairplot(df, vars=numericals, hue=df.columns[-1])
    
    • 1

    Figure_3.png

    七、显示心脏病患者和非心脏病患者数值均值的条形图

    fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(10, 7))
    for i, j in enumerate(numericals):
        plots(df, df.columns[-1], j, axes[i])
    
    • 1
    • 2
    • 3

    Figure_4.png

    八、显示心脏病患者和非心脏病患者的数值分布和异常值的箱线图

    fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(10, 7))
    for i, j in enumerate(numericals):
    
    • 1
    • 2

    Figure_5.png

    九、Kdeplots、条形图、箱线图显示无心脏病患者的数值分布

    for i in df[df.columns[-1]].unique():
        if i == 0:
            display(HTML(
                "

    柱状图,条形图,箱形图显示了无心脏病患者的数值分布

    "
    )) else: display(HTML( "

    柱状图,柱状图,箱形图显示了心脏病患者的数值分布

    "
    )) temp_df = df[df[df.columns[-1]] == i]
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1、Kdeplot显示性别、胸痛类型、空腹血糖、静息心电图、运动性心绞痛、峰值运动ST段的斜率组患者的数值密度

    Figure_6.png
    Figure_7.pngFigure_8.pngFigure_9.pngFigure_10.pngFigure_11.png

    2、显示性别、胸痛类型、空腹血糖、静息心电图、运动性心绞痛、峰值运动ST段的斜率群体患者的数值平均值的条形图

    Figure_12.pngFigure_13.pngFigure_14.pngFigure_15.pngFigure_16.pngFigure_17.png

    3、箱形图显示了数值异常值和性别、胸痛类型、空腹血糖、静息心电图、运动性心绞痛、峰值运动ST段的斜率的患者之间的数据分布

    Figure_18.pngFigure_19.pngFigure_20.pngFigure_21.pngFigure_22.pngFigure_23.png

    4、kdeploy显示了性别、胸痛类型、空腹血糖、静息心电图、运动性心绞痛、峰值运动ST段的斜率的群体患者的数字密度

    Figure_24.pngFigure_25.pngFigure_26.pngFigure_27.pngFigure_28.pngFigure_29.png

    5、显示性别、胸痛类型、空腹血糖、静息心电图、运动性心绞痛、峰值运动ST段的斜率的群体患者的数值平均值的条形图

    Figure_30.pngFigure_31.pngFigure_32.pngFigure_33.pngFigure_34.pngFigure_35.png

    6、箱形图显示了数值异常值和不同性别、胸痛类型、空腹血糖、静息心电图、运动性心绞痛、峰值运动ST段的斜率的患者之间的数据分布

    Figure_36.pngFigure_37.pngFigure_38.pngFigure_39.pngFigure_40.pngFigure_41.png

    十、缩放值并拆分为训练和测试批次

    x = df.iloc[:, :-1].values
    y = df.iloc[:, -1].values
    
    scaler = MinMaxScaler()
    x = scaler.fit_transform(x)
    
    x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=42, test_size=0.2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    十一、模型

    rfc = RandomForestClassifier()
    gbc = GradientBoostingClassifier()
    etc = ExtraTreesClassifier()
    abc = AdaBoostClassifier()
    lgr = LogisticRegression()
    svc = SVC()
    xgb = XGBClassifier()
    lgb = LGBMClassifier()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    十二、培训和评估

    scores, reports, matrices = [], dict(), dict()
    
    for i, j in zip(models, names):
        score, report, matrix = training(i, j)
        scores += [score]
        reports[j] = report
        matrices[j] = matrix
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    image.png

    dt = pd.DataFrame({"score": scores}, index=names)
    fig, axes = plt.subplots()
    dt = dt.sort_values("score", ascending=False)
    dt["score"] = round(dt["score"], 2)
    sns.barplot(x=dt.index, y=dt.iloc[:, 0], ax=axes)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Figure_42.png

    fig, axes = plt.subplots(nrows=2, ncols=4, figsize=(11, 7))
    index = 0
    
    for i in range(2):
    
    • 1
    • 2
    • 3
    • 4

    Figure_43.png

    for i in dt.index:
        print("*"*30)
        print(i)
        print(reports[i])
        print("\n\n")
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image.png
    image.png
    image.png
    image.pngimage.pngimage.pngimage.pngimage.png

  • 相关阅读:
    在自定义数据集上微调Alpaca和LLaMA
    商城有一个抽奖活动,作为用户购买三件商品才能抽奖一次,怎么分析测试点
    《Premiere Pro 2022视频制作案例实战》简介
    【AWS SMB】关于AWS 中小型企业 (SMB) 能力介绍及注意事项
    基因组学课件整理
    你被MySQL 中的反斜杠 \\坑过吗?
    EasyExcel:简单读取本地文件
    get_post (攻防世界)(简单php)
    JWT登录验证
    云计算安全的新挑战:零信任架构的应用
  • 原文地址:https://blog.csdn.net/s1t16/article/details/138193943