机器学习项目---预测心脏病(一)
使用机器学习预测心脏病
问题定义
基于患者的临床参数数据,我们能否预测患者是否会患上心脏病?
通过分析心脏数据中的其他趋势或模式,请问我们能否识别出某些心血管事件的风险因素以及明确的心脏健康指标?
特征
#导入相关的库
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、年龄(以年为单位)
2、性别(1代表男性;0代表女性)
3、 chest pain type (胸痛类型:
0: 典型的心绞痛:与胸痛有关且与心脏血液供应减少有关
1: 非心绞痛:通常表现为食道痉挛(与心脏无关)
2: 非心绞痛:通常表现为食道痉挛(与心脏无关)
3: 不典型胸痛:无相关疾病症状表现
]
4、静息血压(入院测量值以毫米汞柱为单位)若超过130-140 mmHg,则常被视为异常
5、血清胆固醇值:
血清胆固醇= LDL + HDL + 甘油三酯的20%
当血清胆固醇水平超过200 mg/dl时则需特别关注
6、fasting blood sugar test:
fasting blood sugar > 126 mg/dL的结果表明血糖异常
7、restecg结果:
结果解读如下:
数值为:
- 无显著异常
- ST-T波不规则变化范围从轻度症状到严重问题
表示存在心脏节律问题
数值为: - 可能或确定性左室肥大
表现为扩大主泵室心肌体积
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)结果显示,在存在异常心跳(如非正常的电活动)的人群中(涵盖从轻微症状到严重心脏问题的不同情况),其患心脏病的风险显著增加。
exang {运动诱发的心绞痛}定义为:那些不发生运动诱发心绞痛(即否== >运动诱发心绞痛)的个体患心脏病的风险显著高于发生此症状(即是== >运动诱发心绞痛)的个体。
在运动中观察到的最高运动ST段的坡度显示,在进行高陡度运动时(如速度达到2),心脏功能出现异常的表现;而在低陡度运动中(如速度为0或1),身体会表现出较为正常的生理反应。这种差异表明,在剧烈运动时心率上升是导致心脏病风险增高的主要因素;而相对平缓的运动则能够维持较为健康的状况。
浮雕着色的关键血管数量(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()
代码解读

