python数据分析案例,心脏病预测
python数据分析案例,⼼脏病预测
⼼脏病是⼀类⽐较常见的循环系统疾病。它作为全球第⼀⼤杀⼿,是我们不得不提前防御的疾病。我从kaggle上下载了⼀份⼼脏病数据集,利⽤python出⼀些规律,看下哪些特征对于确诊⼼脏病影响⽐较⼤,从⽽提醒我们注意平时的⽣活规律。
导⼊数据集
import pandas as pd
data = pd.read_csv('heart.csv')
如何做数据分析
data.head()
我们可以看到以下数据:
下⾯对字段进⾏介绍:
age: 该朋友的年龄
sex: 该朋友的性别 (1 = 男性, 0 = ⼥性)
cp: 经历过的胸痛类型(值1:典型⼼绞痛,值2:⾮典型性⼼绞痛,值3:⾮⼼绞痛,值0:⽆症状)
trestbps: 该朋友的静息⾎压(⼊院时的毫⽶汞柱)
chol: 该朋友的胆固醇测量值,单位 :mg/dl
fbs: ⼈的空腹⾎糖(> 120 mg/dl,1=真;0=假)
restecg: 静息⼼电图测量(0=正常,1=患有ST-T波异常,2=根据Estes的标准显⽰可能或确定的左⼼室肥⼤)
thalach: 这朋友达到的最⼤⼼率
exang: 运动引起的⼼绞痛(1=有过;0=没有)
oldpeak: ST抑制,由运动引起的相对于休息引起的
slope: 最⾼运动ST段的斜率(值0:上坡,值1:平坦,值2:下坡)
ca: 萤光显⾊的主要⾎管数⽬(0-4)
thal: ⼀种称为地中海贫⾎的⾎液疾病(1=正常;2=固定缺陷;3=可逆缺陷)
target: ⼼脏病(0=否,1=是)
这份数据集⾥⾯记录的都是⽣理的特征及指标,我们可以根据这些特征,来反向关注⽣活习惯。⽐如胆固醇,蛋黄、猪肝都是引起胆固醇过⾼的⾷物。
下⾯就是数据预处理步骤了
⾸先对数据进⾏⼀个描述
data.info()
通过描述我们发现数据并没有缺失,因此我们不需要做缺失值处理。每个字段有303个数据。
对数据进⾏⼀个统计描述:
data.describe()
观察上⾯的数据,我们可以看到平均年龄在54岁左右,最⼩的29岁,最⼤的77岁;性别的均值为0.683168,通过这个均值可以发现男性的数据是多于⼥性的。
数据分析
我们对患病、未患病,男性、⼥性占⽐进⾏了⼀个分析:
countNoDisease = len(data[data.target == 0])
countHaveDisease = len(data[data.target == 1])
countfemale = len(data[data.sex == 0])
countmale = len(data[data.sex == 1])
print(f'没患病⼈数:{countNoDisease }',end=' ,')
print("没有得⼼脏病⽐率: {:.2f}%".format((countNoDisease / (len(data.target))*100)))
print(f'有患病⼈数:{countHaveDisease }',end=' ,')
print("患有⼼脏病⽐率: {:.2f}%".format((countHaveDisease / (len(data.target))*100)))
print(f'⼥性⼈数:{countfemale }',end=' ,')
print("⼥性⽐例: {:.2f}%".format((countfemale / (len(data.sex))*100)))
print(f'男性⼈数:{countmale }',end=' ,')
print("男性⽐例: {:.2f}%".format((countmale / (len(data.sex))*100)))
得出患⼼脏病的⼈数为138,未患⼼脏病⼈数为165,⼥性⼈数为96,男性⼈数为207,为了看得更加直观,我画了两个饼图,使⽤的是matplotlib+seaborn。
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#创建⼀个画布
fig = plt.figure(figsize=(6,6))
a = [138, 165]
b = [207, 96]
label1 = ['没患病⼈数','患病⼈数']
label2 = ['男性','⼥性']
#间隔
explode=(0,0.1)
#颜⾊
colors = ['#6c5ce7','#81ecec']
plt.pie(a,labels=label1, explode=explode ,colors=colors, autopct='%1.1f%%',shadow=False,startangle=150)
plt.show()
fig = plt.figure(figsize=(6,6))
plt.pie(b,labels=label2,explode=explode ,colors=colors, autopct='%1.1f%%',shadow=False,startangle=150) plt.show()
⼼脏病数据各字段的相关性
plt.figure(figsize = (12,10))
sns.(), annot =True)
plt.show()
从上⾯的图形中我们可以发现,slope与oldpeak呈⾼度负相关(0.58)。这意味着如果坡度值增加,旧峰值将减少,反之亦然。Target与cp(胸痛)呈正相关最⾼,为0.43,其次是thalach(⼼率),为0.42,然
后是slope(最⾼运动ST段的斜率),为0.35.
查看各个字段的数据分布情况
data.hist(figsize=(20,16))
plt.show()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。