一、冠心病
诊断:心脏病的诊断是根据临床症状和检查结果进行的。检查的类型将根据医生的判断进行选择,包括心电图、心脏计算机断层扫描(CT)、血液检查和运动压力测试。
通过查阅心脏病危险因素的信息,发现了以下因素:高胆固醇、高血压、糖尿病、体重、家族史和吸烟。另一种说法认为,无法改变的主要因素是:年龄增长、男性性别和遗传。地中海贫血,这个数据集中的一个变量,是遗传的。可以改变的主要因素有:吸烟、高胆固醇、高血压、缺乏运动、超重和患有糖尿病。其他因素包括压力、酒精和不良的饮食/营养。
二、代码实现
导入了各种Python库,包括用于数据处理(numpy
, pandas
)、数据可视化(matplotlib
, seaborn
)、机器学习模型(RandomForestClassifier
, DecisionTreeClassifier
)、模型评估(roc_curve
, auc
, classification_report
, confusion_matrix
)、特征重要性分析(eli5
, shap
)以及偏部分依赖图(pdpbox
)等。主要用于数据分析和机器学习模型的构建与评估
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
from sklearn.metrics import roc_curve, auc
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split #for data splitting
import eli5 #for purmutation importance
from eli5.sklearn import PermutationImportance
import shap #for SHAP values
from pdpbox import pdp, info_plots #for partial plots
np.random.seed(123) #设置随机种子,以确保结果的可重现性
pd.options.mode.chained_assignment = None #hide any pandas warnings #隐藏Pandas警告,在数据操作过程中避免产生不必要的提示信息
导入数据
dt = pd.read_csv("C:\Users\pc\PycharmProjects\cornary artery\heart.csv")
数据讲解
age:人的年龄
sex:这个人的性别(1 =男性,0=女性)
cp:所经历的胸痛(值1:典型心绞痛,值2:非典型心绞痛,值3:非心绞痛,值4:无症状)trestbps:患者入院时的静息血压(mm Hg) chol:患者的胆固醇测量值(mg/dl)
fbs:人的空腹血糖(> 120mg /dl, 1 = true;0 = false)
restecg:静息心电图测量(0 =正常,1 =有ST-T波异常,2 =根据Estes标准可能或明确显示左心室肥厚)thalach:人的最大心率达到异常:运动引起的心绞痛(1 =是;0 = no)
oldpeak:运动相对于休息引起的ST降低(ST与心电图图上的位置有关)。斜率:峰值运动ST段的斜率(值1:向上倾斜,值2:平坦,值3:向下倾斜)ca:主要血管的数量(0-3)
thal:一种叫做地中海贫血的血液疾病(3 =正常;6 =固定缺陷;7 =可逆性缺陷)目标:心脏病(0 =否,1 =是)
dt.columns = ['age', 'sex', 'chest_pain_type', 'resting_blood_pressure', 'cholesterol', 'fasting_blood_sugar', 'rest_ecg', 'max_heart_rate_achieved',
'exercise_induced_angina', 'st_depression', 'st_slope', 'num_major_vessels', 'thalassemia', 'target']
下面代码片段主要是针对数据集中的某些列进行了值的转换和替换,使得这些列中的数值更易于理解和分析。通常情况下,这种操作用于将数值型的分类变量转换为对应的文本标签,以便在数据分析和可视化过程中能够更直观地理解数据含义。
dt['sex'][dt['sex'] == 0] = 'female'
dt['sex'][dt['sex'] == 1] = 'male'