Data Science for Beginners 实战:糖尿病数据小研究——均值、分布、相关性与假设检验全流程解析
2026/9/10 17:54:53 网站建设 项目流程

Data Science for Beginners 实战:糖尿病数据小研究——均值、分布、相关性与假设检验全流程解析

【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners

这篇技术指南围绕 1-Introduction/04-stats-and-probability 课程配套作业「Small Diabetes Study(糖尿病数据小研究)」展开,完整讲解如何用 Python(pandas、matplotlib、SciPy)对一组真实的糖尿病患者数据进行描述性统计、可视化与推断统计:从计算均值/方差、绘制箱线图与直方图,到构建相关矩阵、执行双样本 t 检验。读完本文,你将掌握一套可直接复用的「数据→描述→可视化→相关性→假设检验」五步分析范式,并能在本仓库的 Jupyter Notebook 中逐任务复现全部结果。

任务背景:我们要研究什么

「Small Diabetes Study」是 Data Science for Beginners 项目第 04 课《统计与概率导论》的课后作业,目标是使用概率与统计的方法研究一组小规模的糖尿病患者数据集。该数据集由仓库本地文件 data/diabetes.tsv 提供,共 442 条患者记录、11 个字段,字段含义如下(依据 1-Introduction/04-stats-and-probability/solution/assignment.ipynb 中的说明):

字段含义
AGE年龄
SEX性别编码(取值为 1 与 2 两类)
BMI身体质量指数(Body Mass Index)
BP平均血压
S1 ~ S6六项不同的血液检测指标
Y一年内疾病进展的定量度量(目标变量)

数据文件为制表符(\t)分隔的文本文件,前几行示例(对应作业文档给出的样例):

AGESEXBMIBPS1S2S3S4S5S6Y
059232.1101.015793.238.04.04.859887151
148121.687.0183103.270.03.03.89186975
272230.593.015693.641.04.04.672885141

作业要求完成五个具体任务(详见 1-Introduction/04-stats-and-probability/assignment.md):

  1. 计算所有变量的均值与方差;
  2. 按性别(SEX)绘制 BMI、BP、Y 的箱线图;
  3. 分析 Age、Sex、BMI、Y 变量的分布形态;
  4. 检验各变量与疾病进展(Y)之间的相关性;
  5. 检验「男性与女性的糖尿病进展程度不同」这一假设。

下文将逐一拆解这五项任务,给出可运行的代码与可验证的结果解读。

环境准备与数据加载

作业要求在本仓库的 1-Introduction/04-stats-and-probability/assignment.ipynb 中完成(该 Notebook 已内置任务骨架与数据加载代码,各任务留有待填充的代码单元)。运行环境为 Python 3.8 + conda(Notebook 元数据中声明的 kernel 为 Python 3.8.8),需要 pandas、numpy、matplotlib 与 scipy.stats 等常用科学计算库。

第一步是读取数据。作业 Notebook 中给出的加载方式为:

import pandas as pd import numpy as np df = pd.read_csv("../../data/diabetes.tsv", sep='\t') df.head()

其中../../data/diabetes.tsv是相对于 Notebook 所在目录(1-Introduction/04-stats-and-probability/)的路径,从仓库根目录看即 data/diabetes.tsv。sep='\t'指明文件使用制表符分隔;df.head()用于快速预览前 5 行,验证各列类型与数值是否正常。

提示:本作业中的SEX列存储为数值型(1 与 2),进行分组、绘图、t 检验时可直接以该数值作为分组键,无需额外做标签映射。

任务一:计算所有变量的均值与方差

均值(mean)反映数据的集中趋势,方差(variance)反映数据的离散程度——这是第 04 课「Mean, Variance and Standard Deviation」一节的核心概念。作业要求对全部 11 个变量逐一计算。

最快捷的方式是直接调用 DataFrame 的聚合方法(参考 solution/assignment.ipynb):

df.mean() # 各列均值 df.var() # 各列方差

更专业的做法是合并展示,便于一次性对照:

pd.DataFrame([df.mean(), df.var()], index=['Mean', 'Variance'])

此外,df.describe()能一次性输出 count、mean、std、最小值、四分位数与最大值,相当于对「均值+离散程度+分布区间」做了全景速览:

df.describe()

基于解决方案 Notebook 中的真实输出,关键变量的描述性统计如下(样本量均为 442):

变量均值标准差最小值25% 分位中位数75% 分位最大值
AGE48.5213.111938.25505979
BMI26.384.4218.023.2025.7029.2842.2
BP94.6513.83628493105133
Y152.1377.092587140.5211.5346

各变量的方差(与上述df.var()对应,注意 pandas 默认采用样本方差、即分母为 n-1):

变量方差
AGE171.85
SEX0.25
BMI19.52
BP191.30
S11197.72
S2924.96
S3167.29
S41.67
S50.27
S6132.17
Y5943.33

从数值可以直观读出两个信息:Y 的方差(5943)远大于其他变量,说明患者间疾病进展程度的个体差异非常大;而 S5、S4 这类量纲较小的血液指标方差很低,其波动尺度与其他指标不在一个量级——这提醒我们在做后续相关性分析时,不要直接比较协方差,而要使用归一化后的相关系数(见任务四)。

任务二:按性别绘制 BMI、BP、Y 的箱线图

箱线图(box plot)用中位数、上下四分位数与须线直观呈现数据分布,还能标出离群点(outlier)。本任务要求按性别分组,观察三个关键变量在两组间是否存在肉眼可见的差异。

pandas 的DataFrame.boxplot支持按分组列拆分绘制,代码非常简洁(参考解决方案):

for col in ['BMI', 'BP', 'Y']: df.boxplot(column=col, by='SEX') plt.show()

BMIBPY三个列分别循环调用,by='SEX'会把每个变量按性别 1 / 性别 2 各画一个箱体,便于横向对比两组的中位数、四分位区间与离群点。

读图要点(结合第 04 课 README 中关于箱线图与四分位距的讲解):

  • 箱体上下边界对应 Q1 与 Q3,箱体中的横线是中位数;
  • 箱体上下的须线延伸到 1.5×IQR(IQR = Q3 − Q1)范围内的最远数据点,超出范围的点即为离群点;
  • 比较两组箱体的位置与重叠程度,可以初步判断该变量是否与性别相关。

在实际观察中,BMI 与 BP 两组箱体大致重叠,而 Y 的箱体位置、形状存在一定差异——这为任务五的正式假设检验提供了可视化直觉:「看起来有差异」并不等于「统计上显著」,还需要用假设检验给出定量结论。

任务三:分析 Age、Sex、BMI、Y 的分布

本任务关注四个变量的分布形态,最直观的工具是直方图(histogram)。直方图把取值区间(bins)作为横轴、区间内的样本计数作为纵轴,用于判断分布是正态、均匀、偏态还是多峰(对应第 04 课「Probability Distribution」与「Normal Distribution」两节的内容)。

解决方案中通过循环对每个变量绘制直方图:

for col in ['AGE', 'SEX', 'BMI', 'Y']: df[col].hist() plt.show()

结合直方图形状,解决方案给出的结论如下:

  • AGE(年龄):呈近似正态分布,中间高、两端低,峰值集中在 40~60 岁区间,与df.describe()中「均值 48.5 ≈ 中位数 50」的特征一致;
  • SEX(性别):只取 1 和 2 两个值,是典型的均匀/离散分布(两类的计数大致相当);
  • BMI、Y:直方图形态介于两者之间,仅凭直方图较难断言其服从何种分布,需要更严格的正态性检验才能下结论。

这一步的训练价值在于:观察分布形态是后续所有统计推断的前提。比如任务五的 t 检验对分布形态有一定假设要求,先通过直方图建立对数据的感性认识,能帮助分析者判断统计方法是否适用。

任务四:检验各变量与疾病进展(Y)的相关性

相关性分析用于回答「哪些指标与疾病进展 Y 关系更紧密」。任务提示给出了关键建议:相关矩阵(correlation matrix)能提供关于变量依赖关系最有用的信息

pandas 一行即可输出全部变量两两之间的 Pearson 相关系数矩阵:

df.corr()

矩阵是对称的,对角线恒为 1(变量与自身的相关性),第 i 行第 j 列的值表示第 i 个变量与第 j 个变量的相关系数,取值范围在 [−1, 1]:1 为强正相关,−1 为强负相关,0 为无线性相关。

关键结论:各变量与 Y 的相关系数(取自解决方案输出):

变量与 Y 的相关系数
AGE0.188
SEX0.043
BMI0.586
BP0.441
S10.212
S20.174
S3−0.395
S40.430
S50.566
S60.382

解决方案给出的解读是:与疾病进展 Y 相关性最强的是 BMI(0.586)和 S5(0.566,代表血糖相关的血液指标),这在医学意义上相当合理。此外 BP(0.441)、S4(0.430)也表现出中等强度的正相关,而 S3 与 Y 呈中等负相关(−0.395)。

相关矩阵还能揭示自变量之间的共线性:例如 S1 与 S2 的相关系数高达 0.897,S3 与 S4 为 −0.738——血液指标之间高度相关。这在后续构建预测模型时是需要警惕的多重共线性信号(本课程后续「真实世界数据」等章节会进一步探讨这类问题)。

为了让相关性更直观,解决方案还绘制了 Y 与 BMI、S5、BP 的散点图:

fig, ax = plt.subplots(1, 3, figsize=(10, 5)) for i, n in enumerate(['BMI', 'S5', 'BP']): ax[i].scatter(df['Y'], df[n]) ax[i].set_title(n) plt.show()

散点图中 Y 与 BMI、S5 呈现明显的正向带状趋势,与相关矩阵的数值相互印证。

需要强调的是(对应第 04 课「Covariance and Correlation」一节的提醒):相关不等于因果。两个变量强相关可能源于共同的外部因素,也可能纯属偶然;数学上的强相关只是「两者存在某种联系」的良好信号,不能据此断言 Y 由某变量引起。

任务五:假设检验——男女的糖尿病进展是否存在差异

最后一个任务是正式的推断统计:检验「糖尿病进展程度(Y)在男性和女性之间存在差异」这一假设。这与第 04 课 README 中「第一垒手比第二垒手更高」的例子是同一套路——先提出假设,再用统计检验给出量化证据。

当两组数据近似服从正态分布时,可以使用Student t 检验(两独立样本 t 检验)比较两组的均值。Python 中通过 SciPy 的ttest_ind实现,它同时返回 t 值和 p 值(p 值用于判断结果是否具有统计显著性):

from scipy.stats import ttest_ind tval, pval = ttest_ind( df.loc[df['SEX'] == 1, ['Y']], df.loc[df['SEX'] == 2, ['Y']], equal_var=False # 使用 Welch t 检验,不假设两组方差相等 ) print(f"T-value = {tval[0]:.2f}\nP-value: {pval[0]}")

该代码把数据按SEX拆成两组,比较两组的 Y 均值是否显著不同。参数equal_var=False表示采用 Welch 修正版 t 检验,对两组方差不等的情况更稳健。

解决方案的实际输出为:

T-value = -0.90 P-value: 0.3674449793083975

结论解读:p 值为 0.367,远高于常用的显著性阈值 0.05。p 值接近 0(通常低于 0.05)才意味着对假设有较高置信度;当前结果说明没有强有力的证据表明性别会影响糖尿病的进展程度——尽管任务二的箱线图里两组 Y 似乎有些差异,但统计检验告诉我们,这个差异很可能只是抽样波动。

这与 README 中棒球运动员身高的例子形成鲜明对比:那里 t 检验的 p 值小到9.14e-12,从而有力支持「第一垒手更高」的假设。对比两个案例,正是理解 p 值含义的最佳练习。

评分标准与完成度自检

作业文档提供了三级评分量表(Rubric),是判断完成质量的标准:

优秀(Exemplary)合格(Adequate)需改进(Needs Improvement)
所有要求任务均已完成,结果有图形化展示并配有解释大部分任务完成,但缺少对图形或计算结果的解释与结论仅完成均值/方差计算和简单绘图等基础任务,未从数据中得出任何结论

对照该量表自查三个要点:

  1. 完整性:五个任务是否全部完成(尤其是任务四的相关矩阵与任务五的 t 检验);
  2. 可视化:箱线图、直方图、散点图是否齐备;
  3. 解释力:是否对每个图形和数值结果写出了结论——这正是从「合格」跨入「优秀」的关键。

总结与进一步探索

通过这五项任务,我们完整走了一遍数据分析的经典流程:

  1. 描述:用mean()/var()/describe()掌握每个变量的集中趋势与离散程度;
  2. 可视化:用箱线图对比分组差异,用直方图观察分布形态;
  3. 相关分析:用df.corr()建立相关矩阵,锁定与目标变量 Y 关系最强的 BMI 与 S5;
  4. 假设检验:用scipy.stats.ttest_ind完成两样本 t 检验,并依据 p 值给出「无显著证据表明性别影响进展」的结论。

想要动手实践,可以:

  • 打开带任务骨架的 1-Introduction/04-stats-and-probability/assignment.ipynb 自行完成五个任务;
  • 参考带完整输出与结论的 1-Introduction/04-stats-and-probability/solution/assignment.ipynb 对照检查;
  • 系统学习本课全部统计概念(概率分布、均值/方差、四分位与箱线图、正态分布、置信区间、假设检验、协方差与相关),可阅读课程主文档 1-Introduction/04-stats-and-probability/README.md。

进阶挑战:把任务四中发现的强相关变量(BMI、S5、BP)作为候选特征,尝试建立简单的线性回归模型预测 Y,并观察删除共线变量(如 S1/S2)后模型稳定性的变化——这将为后续「真实世界数据」与机器学习章节打下基础。

【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询