当前位置: 首页 > news >正文

使用Python以UCI心脏病数据集为例,进行数据简单分析

本文章包含以下内容:

        以UCI心脏病数据集为例,进行数据简单分析:

  1. 求心脏病患者年龄的平均值、中位数和众数,从结果里分析年龄与心脏病的关系;
  2. 胆固醇正常值是0-200mg/dL,区分胆固醇不合格和不合格人员,用百分位数分析年龄和胆固醇的关系(哪个年龄段胆固醇不合格的多,对比两组进行分析)  
  3. 求心脏病患者的胆固醇极差和四分位极差,并分析结果说明的问题
  4. 分析心脏病患者的胆固醇是否满足正太分布?
  5. 用相关系数或卡方计算12个属性和得心脏病的相关性,分析哪些因素对确诊心脏病作用大。

数据集:uci心脏病数据集子集

数据子集下载

数据属性说明:

age: 该朋友的年龄

sex: 该朋友的性别 (1 = 男性, 0 = 女性)

cp: 经历过的胸痛类型(值1:典型心绞痛,值2:非典型性心绞痛,值3:非心绞痛,值4:无症状)

trestbps: 该朋友的静息血压(入院时的毫米汞柱)

chol: 该朋友的胆固醇测量值,单位 :mg/dl

fbs: 人的空腹血糖(> 120 mg/dl,1=真;0=假)

restecg: 静息心电图测量(0=正常,1=患有ST-T波异常,2=根据Estes的标准显示可能或确定的左心室肥大)

thalach: 这朋友达到的最大心率

exang: 运动引起的心绞痛(1=有过;0=没有)

oldpeak: ST抑制,由运动引起的相对于休息引起的(“ ST”与ECG图上的位置有关。)

slope: 最高运动ST段的斜率(值1:上坡,值2:平坦,值3:下坡)

ca: 萤光显色的主要血管数目(0-4)

thal: 一种称为地中海贫血的血液疾病(3=正常;6=固定缺陷;7=可逆缺陷)

target: 心脏病(0=否,1=是)

心脏病数据有一定问题,这里将0看作没有病,其余看作有病。

代码如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data = pd.read_csv("心脏病数据.csv", header=None)  # 读取csv文件,并存入data,不带标签
# 修改列标签
name = ['age', 'sex', 'cp', 'trestbps', 'chol', 'fbs', 'restecg', 'thalach',
        'exang', 'oldpeak', 'slope', 'ca', 'thal', 'target']
data.columns = name
pd.set_option('expand_frame_repr', False)  # 打印输出 dataframe 时不隐藏部分列
print(data)  # 输出一下看看
xinzang = []  # 储存有心脏病人群
danguchun_Up = []  # 储存胆固醇高人群
danguchun_Down = []  # 储存胆固醇低人群
age = []  # 心脏病患者的年龄
dan = []  # 心脏病患者的胆固醇
c = -1  # 心脏病数组标记
for row in data.itertuples():  # 行遍历 data
    if getattr(row, 'target') != 0:  # 如果有心脏病
        c = c + 1  # 标记 +1
        xinzang.append([])
        age.append(row[1])  # 单独获得心脏病患者的年龄,方便统计
        dan.append(row[5])  # 单独获得心脏病患者的胆固醇,方便统计
        for i in row:  # 将该行添加进数组 xinzang 中
            xinzang[c].append(i)
    if getattr(row, 'chol') > 200:  # 如果胆固醇高
        danguchun_Up.append(row[1])  # 单独获得胆固醇高的年龄,方便统计
    else:  # 否则,胆固醇合格
        danguchun_Down.append(row[1])  # 单独获得心胆固醇合格的年龄,方便统计
    # if row[12] == '?' or row[13] == '?':    #去掉有缺省数据,便于计算
    #     data = data.drop(row[0], axis=0)
# print(data)  # 输出一下看看
print("统计心脏病患者的年龄,得出:")
print("平均数为:\t", np.mean(age))
print("中位数为:\t", np.median(age))
c = np.bincount(age)
print("众数为:\t\t", np.argmax(c))  # 只适用于非负数集合
print("可得58岁左右是心脏病高发年龄段。")
print("=================================================")
print("统计样本胆固醇状况,得出:")
c = np.percentile(danguchun_Up, 25, interpolation='linear')
d = np.percentile(danguchun_Up, 75, interpolation='linear')
print('胆固醇不合格的人,年龄大多集中在:', c, '~', d, '之间')
c = np.percentile(danguchun_Down, 25, interpolation='linear')
d = np.percentile(danguchun_Down, 75, interpolation='linear')
print('胆固醇合格的人,年龄大多集中在:', c, '~', d, '之间')
print("可得随着年龄的增大,胆固醇不合格的人数也在增加。")
print("=================================================")
print("统计心脏病患者胆固醇状况,得出:")
print("极差为:", max(dan) - min(dan))
c = np.percentile(dan, 25, interpolation='linear')
d = np.percentile(dan, 75, interpolation='linear')
print("四分位极差为:", d - c)
plt.figure(1)
# 绘制箱型图
flierprops = {'marker': 'o', 'markerfacecolor': 'red', 'color': 'black'}
plt.grid(True, linestyle="-.", color="black", linewidth="0.4")
plt.boxplot(dan, notch=False, flierprops=flierprops)
print("可得心脏病患者的胆固醇高低差异较大,但仅仅考虑中间50%的数值,其差异会大大减少。")

plt.figure(2)
# 绘制正态分布曲线
x = np.arange(140, 410, 0.1)  # x轴取值范围
c = np.mean(dan)  # 平均数
d = np.std(dan)  # 标准差
y = np.exp(-((x - c) ** 2) / (2 * d ** 2)) / (d * np.sqrt(2 * np.pi))  # 正态分布曲线
plt.plot(x, y)
# 绘制数据集的正态分布曲线
# 绘制直方图
plt.hist(dan, bins=15, rwidth=0.9, density=True)
print('由图可以看出脏病患者的胆固醇满足正态分布。')
print('任意两个变量之间的相关系数如下:')
print(data.corr())
print('可以看出 oldpeak ,cp  ,exang ,slope 对确诊心脏病作用大')
plt.show()

结果示例:

      age  sex   cp  trestbps   chol  fbs  restecg  thalach  exang  oldpeak  slope   ca thal  target
0    63.0  1.0  1.0     145.0  233.0  1.0      2.0    150.0    0.0      2.3    3.0  0.0  6.0       0
1    67.0  1.0  4.0     160.0  286.0  0.0      2.0    108.0    1.0      1.5    2.0  3.0  3.0       2
2    67.0  1.0  4.0     120.0  229.0  0.0      2.0    129.0    1.0      2.6    2.0  2.0  7.0       1
3    37.0  1.0  3.0     130.0  250.0  0.0      0.0    187.0    0.0      3.5    3.0  0.0  3.0       0
4    41.0  0.0  2.0     130.0  204.0  0.0      2.0    172.0    0.0      1.4    1.0  0.0  3.0       0
..    ...  ...  ...       ...    ...  ...      ...      ...    ...      ...    ...  ...  ...     ...
298  45.0  1.0  1.0     110.0  264.0  0.0      0.0    132.0    0.0      1.2    2.0  0.0  7.0       1
299  68.0  1.0  4.0     144.0  193.0  1.0      0.0    141.0    0.0      3.4    2.0  2.0  7.0       2
300  57.0  1.0  4.0     130.0  131.0  0.0      0.0    115.0    1.0      1.2    2.0  1.0  7.0       3
301  57.0  0.0  2.0     130.0  236.0  0.0      2.0    174.0    0.0      0.0    2.0  1.0  3.0       1
302  38.0  1.0  3.0     138.0  175.0  0.0      0.0    173.0    0.0      0.0    1.0    ?  3.0       0

[303 rows x 14 columns]
统计心脏病患者的年龄,得出:
平均数为:	 56.62589928057554
中位数为:	 58.0
众数为:		 58
可得58岁左右是心脏病高发年龄段。
=================================================
统计样本胆固醇状况,得出:
胆固醇不合格的人,年龄大多集中在: 49.0 ~ 61.0 之间
胆固醇合格的人,年龄大多集中在: 43.25 ~ 59.0 之间
可得随着年龄的增大,胆固醇不合格的人数也在增加。
=================================================
统计心脏病患者胆固醇状况,得出:
极差为: 278.0
四分位极差为: 66.0
可得心脏病患者的胆固醇高低差异较大,但仅仅考虑中间50%的数值,其差异会大大减少。
由图可以看出脏病患者的胆固醇满足正态分布。
任意两个变量之间的相关系数如下:
               age       sex        cp  trestbps      chol       fbs   restecg   thalach     exang   oldpeak     slope    target
age       1.000000 -0.097542  0.104139  0.284946  0.208950  0.118530  0.148868 -0.393806  0.091661  0.203805  0.161770  0.222853
sex      -0.097542  1.000000  0.010084 -0.064456 -0.199915  0.047862  0.021647 -0.048663  0.146201  0.102173  0.037533  0.224469
cp        0.104139  0.010084  1.000000 -0.036077  0.072319 -0.039975  0.067505 -0.334422  0.384060  0.202277  0.152050  0.407075
trestbps  0.284946 -0.064456 -0.036077  1.000000  0.130120  0.175340  0.146560 -0.045351  0.064762  0.189171  0.117382  0.157754
chol      0.208950 -0.199915  0.072319  0.130120  1.000000  0.009841  0.171043 -0.003432  0.061310  0.046564 -0.004062  0.070909
fbs       0.118530  0.047862 -0.039975  0.175340  0.009841  1.000000  0.069564 -0.007854  0.025665  0.005747  0.059894  0.059186
restecg   0.148868  0.021647  0.067505  0.146560  0.171043  0.069564  1.000000 -0.083389  0.084867  0.114133  0.133946  0.183696
thalach  -0.393806 -0.048663 -0.334422 -0.045351 -0.003432 -0.007854 -0.083389  1.000000 -0.378103 -0.343085 -0.385601 -0.415040
exang     0.091661  0.146201  0.384060  0.064762  0.061310  0.025665  0.084867 -0.378103  1.000000  0.288223  0.257748  0.397057
oldpeak   0.203805  0.102173  0.202277  0.189171  0.046564  0.005747  0.114133 -0.343085  0.288223  1.000000  0.577537  0.504092
slope     0.161770  0.037533  0.152050  0.117382 -0.004062  0.059894  0.133946 -0.385601  0.257748  0.577537  1.000000  0.377957
target    0.222853  0.224469  0.407075  0.157754  0.070909  0.059186  0.183696 -0.415040  0.397057  0.504092  0.377957  1.000000
可以看出 oldpeak ,cp  ,exang ,slope 对确诊心脏病作用大

 

相关文章:

  • URL编码解码详解
  • win10+ubuntu双系统下载ubuntu方法(卸载系统不完整会进入grub)
  • Spring事务传播机制
  • 实现深度理解函数指针
  • C/C++常用预编译指令介绍
  • 杰理强制升级工具4.0使用和原理解析
  • Vue3介绍和安装
  • Linux命令--权限(chmod、chown)--使用/实例
  • flink-sql所有语法详解
  • 【图像分割】基于matlab萤火虫算法图像聚类分割【含Matlab源码 2106期】
  • SQL 入门之第一讲——MySQL 8.0.29安装教程(windows 64位)
  • 用Python进行数学建模(一)
  • 力扣:669. 修剪二叉搜索树,今日份快乐
  • java毕业设计KTV点歌系统mybatis+源码+调试部署+系统+数据库+lw
  • [python] 基于diagrams库绘制系统架构图
  • 【剑指offer】让抽象问题具体化
  • 07.Android之多媒体问题
  • android 一些 utils
  • codis proxy处理流程
  • github从入门到放弃(1)
  • iOS 颜色设置看我就够了
  • Iterator 和 for...of 循环
  • JavaScript 基础知识 - 入门篇(一)
  • Java精华积累:初学者都应该搞懂的问题
  • k个最大的数及变种小结
  • Laravel 实践之路: 数据库迁移与数据填充
  • spring boot下thymeleaf全局静态变量配置
  • SSH 免密登录
  • XML已死 ?
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 关于List、List?、ListObject的区别
  • 聊聊flink的BlobWriter
  • 前端路由实现-history
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • MPAndroidChart 教程:Y轴 YAxis
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​iOS实时查看App运行日志
  • ​什么是bug?bug的源头在哪里?
  • #Z2294. 打印树的直径
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (pojstep1.1.2)2654(直叙式模拟)
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (一)基于IDEA的JAVA基础10
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET基础篇——反射的奥妙
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • /run/containerd/containerd.sock connect: connection refused
  • @EventListener注解使用说明
  • [AIGC] Spring Interceptor 拦截器详解
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [C++] 如何使用Visual Studio 2022 + QT6创建桌面应用
  • [CSS] 点击事件触发的动画