机器学习项目---预测心脏病(一)

使用机器学习预测心脏病

问题定义

给定有关患者的临床参数,我们能否预测他们是否患有心脏病,
查看您是否可以在心脏数据中找到其他趋势来预测某些心血管事件或找到心脏健康的任何明确迹象

特征

#导入相关的库
mport pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

%matplotlib inline
sns.set_style("whitegrid")
plt.style.use("fivethirtyeight")

加载数据

df = pd.read_csv("./data/heart.csv")
df.head()

在这里插入图片描述
1、age - age in years
2、sex -(1 =男性; 0 =女性)
3、cp - -胸痛类型(0: 典型的心绞痛:与胸痛有关,减少心脏的血液供应1: 非心绞痛:通常为食道痉挛(与心脏无关)2: 非心绞痛:通常为食道痉挛(与心脏无关)3: 无症状:胸痛未显示疾病迹象)
4、trestbps - 静息血压(入院时以毫米汞柱为单位)高于130-140的情况通常令人担忧
5、chol - 血清胆汁,mg / dl
血清= LDL + HDL + 0.2 *甘油三酸酯
200以上值得关注
6、fbs-(空腹血糖> 120 mg / dl)(1 =正确; 0 =错误)
'> 126’mg / dL表示糖尿病
7、restecg --静息心电图结果
0:没什么可注意的
1:ST-T波异常
范围从轻度症状到严重问题
表示心跳不正常
2:可能或确定的左心室肥大
扩大心脏的主泵室
8、丘脑-达到最大心率
9、exang - 运动诱发的心绞痛(1 =是; 0 =否)
10、oldpeak - 运动引起的相对于休息的ST抑郁会在运动不健康的心脏时观察心脏的压力,这会增加压力
11、slope - 最高运动ST段的坡度
0: Upsloping: 锻炼可提高心率(罕见)
1: Flatsloping: 变化很小(典型的健康心脏)
2: Downslopins:心脏不健康的体征
12、ca - 萤光显色的主要血管数目(0-3)
彩色血管意味着医生可以看到血液通过
血液运动越多越好(无凝块)
13、thal - al-lium应力结果
1,3:正常
6: 修复缺陷:曾经是缺陷,但是现在可以了
7: 可逆缺陷:锻炼时没有适当的血液运动
14、target - 是否患有疾病(1 =是,0 =否)(=预测属性)

df.info()

在这里插入图片描述

pd.set_option("display.float","{:.2f}".format)
df.target.value_counts()
df.target.value_counts().plot(kind="bar", color=["salmon", "lightblue"])

在这里插入图片描述

探索性数据分析(EDA)

这里的目标是查找有关数据的更多信息,并成为您正在使用的数据集上的主题导出。
您要解决什么问题?
我们拥有什么样的数据,以及如何处理不同类型的数据?
数据中缺少什么以及如何处理?
异常值在哪里,为什么要关心它们?
您如何添加,更改或删除功能以从数据中获取更多信息?

#Checking for messing values
df.isna().sum()

在这里插入图片描述

categorical_val = []
continous_val = []
for column in df.columns:
    print('==============================')
    print(f"{column} : {df[column].unique()}")
    if len(df[column].unique()) <= 10:
        categorical_val.append(column)
    else:
        continous_val.append(column)

在这里插入图片描述

plt.figure(figsize=(15, 15))

for i, column in enumerate(categorical_val, 1):
    plt.subplot(3, 3, i)
    df[df["target"] == 0][column].hist(bins=35, color='blue', label='Have Heart Disease = NO', alpha=0.6)
    df[df["target"] == 1][column].hist(bins=35, color='red', label='Have Heart Disease = YES', alpha=0.6)
    plt.legend()
    plt.xlabel(column)

在这里插入图片描述

cp {胸痛}:cp等于1、2、3的人比cp等于0的人患心脏病的可能性更高。

restecg {静息心电图结果}:值为1的人(信号非正常心跳,范围从轻度症状到严重问题)更可能患有心脏病。

exang {运动诱发的心绞痛}:值0(否==>运动诱发心绞痛)的人患心脏病的人数多于值1(是==>运动诱发心绞痛)的人。

坡度{最高运动ST段的坡度}:坡度值等于2的人(下坡:心脏不健康的征兆)比坡度值等于0的人更容易患心脏病(坡度:锻炼时心率更高) )或1(平底鞋:变化很小(典型的健康心脏))。

ca {浮雕着色的主要血管数量(0-3)}:血液运动越多越好,因此ca等于0的人更容易患心脏病。

thal {tha应力结果}:thal值等于2(固定缺陷:曾经是缺陷,但现在可以)的人更容易患心脏病。

plt.figure(figsize=(15, 15))

for i, column in enumerate(continous_val, 1):
    plt.subplot(3, 2, i)
    df[df["target"] == 0][column].hist(bins=35, color='blue', label='Have Heart Disease = NO', alpha=0.6)
    df[df["target"] == 1][column].hist(bins=35, color='red', label='Have Heart Disease = YES', alpha=0.6)
    plt.legend()
    plt.xlabel(column)

在这里插入图片描述

trestbps:静息血压(入院时以毫米汞柱为单位)高于130-140的任何数值通常令人担忧

chol {血清胆甾醇,单位mg / dl}:超过200值得关注。

thalach {达到的最大心率}:达到最大心率超过140的人更容易患心脏病。

运动相对于休息引起的oldpeak ST抑郁症在锻炼过程中着眼于心脏压力,不健康的心脏会增加压力

# Create another figure
plt.figure(figsize=(10, 8))

# Scatter with postivie examples
plt.scatter(df.age[df.target==1],
            df.thalach[df.target==1],
            c="salmon")

# Scatter with negative examples
plt.scatter(df.age[df.target==0],
            df.thalach[df.target==0],
            c="lightblue")

# Add some helpful info
plt.title("Heart Disease in function of Age and Max Heart Rate")
plt.xlabel("Age")
plt.ylabel("Max Heart Rate")
plt.legend(["Disease", "No Disease"]);

在这里插入图片描述

# Let's make our correlation matrix a little prettier
corr_matrix = df.corr()
fig, ax = plt.subplots(figsize=(15, 15))
ax = sns.heatmap(corr_matrix,
                 annot=True,
                 linewidths=0.5,
                 fmt=".2f",
                 cmap="YlGnBu");
bottom, top = ax.get_ylim()
ax.set_ylim(bottom + 0.5, top - 0.5)

在这里插入图片描述

df.drop('target', axis=1).corrwith(df.target).plot(kind='bar', grid=True, figsize=(12, 8), 
                                                   title="Correlation with target")

在这里插入图片描述
fbs和chol与目标变量的相关性最低。

所有其他变量与目标变量具有显着的相关性。

categorical_val.remove('target')
dataset = pd.get_dummies(df, columns = categorical_val)
dataset.head()

在这里插入图片描述
在这里插入图片描述

from sklearn.preprocessing import StandardScaler

s_sc = StandardScaler()
col_to_scale = ['age', 'trestbps', 'chol', 'thalach', 'oldpeak']
dataset[col_to_scale] = s_sc.fit_transform(dataset[col_to_scale])
dataset.head()

在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页