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

article/2025/10/11 21:49:46

本文章包含以下内容:

        以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 pltdata = 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():  # 行遍历 dataif getattr(row, 'target') != 0:  # 如果有心脏病c = c + 1  # 标记 +1xinzang.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%的数值,其差异会大大减少。")print("=================================================")
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("平均数为:\t", c)
print("中位数为:\t", np.median(dan))
x = np.bincount(dan)
print("众数为:\t\t", np.argmax(x))  # 只适用于非负数集合
print('SK1为:\t', (c - np.argmax(x)) / d)  # sk1 =  (x-mo)/s
print('SK2为:\t', 3 * (c - np.median(dan)) / d)  # sk2 = 3(x-md)/s
dan = pd.Series(dan)  # 用于使用 pd
print('直接用pd进行偏度计算:', dan.skew())  # 直接用pd进行偏度计算
print('直接用pd进行峰度计算', dan.kurt())  # 直接用pd进行峰度计算
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%的数值,其差异会大大减少。
=================================================
心脏病患者的胆固醇:
平均数为:	 251.4748201438849
中位数为:	 249.0
众数为:		 212
SK1为:	 0.8005682075420549
SK2为:	 0.15057160382420312
直接用pd进行偏度计算: 0.29911265898713263
直接用pd进行峰度计算 0.34124961868724313
中位数为:	 58.0
由图可以看出心脏病患者的胆固醇满足正态分布。
任意两个变量之间的相关系数如下: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 对确诊心脏病作用大进程已结束,退出代码为 0


http://chatgpt.dhexx.cn/article/PFYgHVj0.shtml

相关文章

UCI——心脏病数据集分析报告

文章目录 1 前期准备1.1 安装数据分析可视化第三方工具包1.2 安装辅助工具包1.3 安装机器学习第三方工具包1.4 安装机器学习可解释性第三方工具包 2 对于数据集进行导入、查看及简单分析2.1 代码及注释2.2 简单分析属性的相关系数关系 写在前面:研一的机器学习课程需…

UCI数据集中文介绍:Waveform Database Generator (Version 1) Data Set

看论文用到了该数据集,没找到中文描述,且官网上描述非常简洁。所以查阅了原版书,将该数据集的介绍整理如下。 实验数据集:波形数据集(下载网址:UCI Machine Learning Repository: Waveform Database Generator (Versi…

机器学习——Azure机器学习模型在线搭建实验原理+详细操作步骤+分析(以UCI数据库的数据为例)

Azure机器学习模型搭建实验 本文数据及文档地址:https://github.com/w1449550206/Azure-machine-learning-model-building-experiment.git 文章目录 Azure机器学习模型搭建实验机器学习工作流程总结登录方法Azure平台简介Azure机器学习实验详细操作步骤 Azure机器…

卜若的代码笔记-机器学习基础-UCI数据库简介与Iris数据集分析

1.机器学习和深度学习有些许差别 深度学习属于机器学习的子类,更加瞄准于CNN,RNN等网络,本课程主要针对于机器学习的扫盲 1.1 UCI官网 如果你是一个正在研究机器学习的菜鸟,或者感兴趣的guys,那么,你一定…

UCI数据库

UCI数据库是加州大学欧文分校(University of CaliforniaIrvine)提出的用于机器学习的数据库,这个数据库目前共有335个数据集,其数目还在不断增加,UCI数据集是一个常用的标准测试数据集。 UCI数据可以使用Matlab的dlmread(或textr…

UCI数据集详解及其数据处理(附148个数据集及处理代码)

摘要:本文对机器学习中的UCI数据集进行介绍,带你从UCI数据集官网出发一步步深入认识数据集,并就下载的原始数据详细讲解了不同类型的数据集整理如何通过程序进行整理。为了方便使用,博文中附上了包括数据集整理及数据预处理在内的…

【20211208】【Python】UCI数据集的简单介绍和使用Python保存UCI数据集为.mat文件

一、UCI 数据集介绍 进行机器学习学习过程中,会使用到 UCI 公开数据集,UCI 数据集网址:UCI Machine Learning Repository。 点击进入之后,页面显示如下: 以 iris 数据集为例,点击进入: 该页面展…

UCI数据集整理(附论文常用数据集)

摘要:UCI数据集作为标准测试数据集经常出现在许多机器学习的论文中,为了更方便使用这些数据集有必要对其进行整理,这里整理了论文中经常出现的数据集,并详细介绍如何使用MATLAB将数据集文件整理成自己需要的格式以及如何使用数据集…

【Android系统源码修改】修改系统默认定位方式

gps 移动网络位置信息 gps 修改为 gps,network 或者 network 或者 是否支持gps \frameworks\base\services\core\java\com\android\server\location\GpsLocationProvider.java ro.wisky.gpssupport 此值设为 false 时不支持,则系统中一些有关 gps 的设置将会被屏蔽…

android 修改 dpi_设计规范 | Android系统

一、基础概念 1.1 屏幕尺寸 屏幕尺寸指的是手机屏幕的物理尺寸,一般用屏幕对角线长度表示,以英寸(inch)为单位。如,小米M4尺寸为5英寸。 1.2 屏幕密度 由于Android属于开源系统,任何用户、开发者、运营商都可以对Android进行专属定制,因此导致国内安卓手机尺寸众多,然而设…

android注入 定位,[原创]修改源码实现全局(无需root)注入躲开注入检测

看这篇文章需要的技能 1.会编译android源码(如果你不愿意编译源码,还有另外一种办法,下面我会提供) 2.会使用substrate或者xposed 以上2个网上资料很多我就不啰嗦了 一、市面上目前的hook和注入工具 市面上目前的hook有substrate,xposed,或者一些开源的自己实现的hook和注入…

python修改app定位_APP自动化中三大定位工具

我们在做APP自动化的时候,定位是很重要的,就像做webUI自动化一样,但是个人觉得app定位比web要复杂点,毕竟app定位表达式写了之后并没有工具验证改表达式是唯一的,所以导致工作量很大 今天主要总结下我们做app自动化需要…

android位置模拟源码,android 模拟定位app 源码

【实例简介】需要在android手机的 开发者模式中 开启 【允许模拟位置】即可,开启允许模拟位置的方法详见: https://jingyan.baidu.com/article/870c6fc306f1f4b03ee4be7f.html 【实例截图】 【核心代码】 package com.xd.mockposition; import android.app.Activity; import …

android 修改imei源码,Android 修改imei、gps等信息分析

之前有朋友希望能修改Android的gps信息,也就是说让其他应用获取gps信息时,取到修改后的信息。一开始听上去感觉挺不靠谱的,后来网上查了下资料,发现还是有人搞定的,主要都是通过古河发布的注入代码,将自己的…

怎么修改android内存,安卓内存修改器怎么用?

安卓内存修改器怎么用?内存搜索是手游修改器普遍都具有的一项功能,也是目前最主流的游戏修改方式,安全、快速、效果显著,并且不会轻易被官方封号,GG助手除了拥有大内高手不断升级制作的插件外,也集成了一个标配的内存修改器。下面学习啦小编给大家分享下具体的方法,希望…

Android模拟地图gps定位

目录 1.判断权限2.开始定位(GPS位置)3.关闭位置4.实现效果 公司OA经常忘了打卡,想起来就到家了,这就很烦… 参考Android官方文档,学习使addTestProvider,setTestProviderLocation,实现简单指定经纬度GPS位置,要是忘了打卡,可不能用这个… 运行环境 设备:小米K30s 系统:Android1…

怎样修改安卓位置服务器,修改安卓定位服务器地址

修改安卓定位服务器地址 内容精选 换一换 安卓模拟器(Android Virtual Device),简称AVD,可以模拟安卓设备并将其运行在服务器上。利用AVD,您可以对安卓应用进行原型设计、开发和测试,而无需使用真实的手机。AVD具备运行安卓应用、adb连接、上网、屏幕、GPS定位、电池、及VN…

安卓修改gps定位模拟百度地图移动

背景: 开发一个骑行app,页面是百度导航,演示需要模拟人骑行,位置不断移动。 位置模拟 核心是这个: for (String provider : mockProviders) {Location mockLocation null;if (location null) {mockLocation new…

第二十期 在Android中修改GPS定位数据的完整方案《手机就是开发板》

https://blog.csdn.net/aggresss/article/details/54323034 现在很多的应用都是基于位置服务的,而且把位置服务作为重要的参考标准,其实这是很不安全的,位置信息的数据未经过任何加密,而且是从我们的手机中发送出去的,…

Android-Framework-GPS定位原理和修改

一、 Android定位功能原理概述 1.1 Android三种定位提供方式。 Android 应用层获取定位可以通过三种定位提供方式:gps,network,passive。 gps –>(GPS,AGPS): GPS位置提供者的名称。该提供商…