基于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、导入数据

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

image.png

2、数据处理

df.head()

image.png

df.describe()

image.png

df.isna().sum()

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))

Figure_1.png

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

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

Figure_2.png

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

sns.pairplot(df, vars=numericals, hue=df.columns[-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])

Figure_4.png

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

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

Figure_5.png

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

for i in df[df.columns[-1]].unique():
    if i == 0:
        display(HTML(
            "<h1>柱状图,条形图,箱形图显示了无心脏病患者的数值分布</h1>"))
    else:
        display(HTML(
            "<h1>柱状图,柱状图,箱形图显示了心脏病患者的数值分布</h1>"))
    temp_df = df[df[df.columns[-1]] == i]

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)

十一、模型

rfc = RandomForestClassifier()
gbc = GradientBoostingClassifier()
etc = ExtraTreesClassifier()
abc = AdaBoostClassifier()
lgr = LogisticRegression()
svc = SVC()
xgb = XGBClassifier()
lgb = LGBMClassifier()

十二、培训和评估

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


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)

Figure_42.png

fig, axes = plt.subplots(nrows=2, ncols=4, figsize=(11, 7))
index = 0

for i in range(2):

Figure_43.png

for i in dt.index:
    print("*"*30)
    print(i)
    print(reports[i])
    print("\n\n")

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

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙别闹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值