news 2026/9/12 15:42:25

Data-Science-For-Beginners 第 4 课:统计与概率核心概念与 Python 实战——从概率分布、置信区间到假设检验与相关性分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Data-Science-For-Beginners 第 4 课:统计与概率核心概念与 Python 实战——从概率分布、置信区间到假设检验与相关性分析

Data-Science-For-Beginners 第 4 课:统计与概率核心概念与 Python 实战——从概率分布、置信区间到假设检验与相关性分析

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

本篇技术指南以开源课程 Data-Science-For-Beginners 第 4 课(1-Introduction/04-stats-and-probability/README.md)为核心,系统讲解数据科学中概率与统计的基础概念,并基于仓库附带的真实数据(棒球运动员数据集 data/SOCR_MLB.tsv)与可运行 Notebook(1-Introduction/04-stats-and-probability/notebook.ipynb)给出完整可复现的 Python 代码。读完本文,你将掌握随机变量与概率分布、均值/方差/标准差、中位数与四分位数、正态分布、置信区间、假设检验(Student t 检验)、大数定律与中心极限定理,以及协方差与相关性的计算与解读,并能独立完成配套的糖尿病数据研究作业(1-Introduction/04-stats-and-probability/assignment.md)。

概率与随机变量

概率(Probability)是介于 0 与 1 之间的数值,用于衡量某个**事件(event)**发生的可能性。在假设所有结果等可能的前提下,它被定义为“导致该事件发生的有利结果数”除以“全部可能结果数”。例如掷一枚骰子,得到偶数的概率为 3/6 = 0.5。

讨论事件时需要使用随机变量(random variable)。例如,掷骰子所得点数这一随机变量,其取值集合为 1 到 6;这组数构成的集合被称为样本空间(sample space)。我们可以谈论随机变量取某个特定值的概率,例如 P(X=3)=1/6。

随机变量分为两类:

  • 离散随机变量(discrete):具有可数的样本空间,即存在可以逐一列举的独立取值,例如骰子的点数。
  • 连续随机变量(continuous):样本空间是实数区间或全体实数,例如公交车的到达时间——它无法被离散地枚举。

概率分布

对于离散随机变量,可以用函数 P(X) 描述每个事件的概率:对样本空间 S 中的每个值 s,P(X=s) 给出 0 到 1 之间的数,且所有事件概率之和为 1。

最著名的离散分布是均匀分布(uniform distribution):样本空间含 N 个元素,每个元素概率均为 1/N。

连续变量的概率分布则更难描述,因为对于任意精确时刻 t,公交车恰好在该时刻到达的概率为 0!

现在你知道了:概率为 0 的事件也会发生,而且经常发生——至少每次公交车到站时都是如此!

我们只能谈论变量落入某个数值区间的概率,例如 P(t₁ ≤ X < t₂)。此时概率分布由概率密度函数(probability density function)p(x) 描述:

连续均匀分布是均匀分布的在连续情形下的对应物,定义在有限区间上:X 落入长度为 l 的区间的概率与 l 成正比,并随区间增大而趋近于 1。另一类重要分布是正态分布(normal distribution),下文会详细展开。

均值、方差与标准差

设随机变量 X 的一组 n 个样本为 x₁, x₂, ..., xₙ,其均值(mean)(即算术平均)为 (x₁+x₂+...+xₙ)/n。当样本量趋于无穷(n→∞)时,得到分布的均值,也称期望(expectation),记为E(x)

可以证明:对于取值 {x₁, x₂, ..., xₙ}、对应概率 p₁, p₂, ..., pₙ 的任意离散分布,期望 E(X)=x₁p₁+x₂p₂+...+xₙpₙ。

衡量数据离散程度时,可以计算方差 σ² = ∑(xᵢ - μ)²/n,其中 μ 为序列均值;σ 称为标准差(standard deviation),σ² 称为方差(variance)

众数、中位数与四分位数

有时均值并不能很好代表数据的“典型值”,例如少数极端离群值会显著影响均值。此时**中位数(median)**是更好的指标——它是一半数据点低于它、另一半数据点高于它的值。

为了更深入理解数据分布,可以考察四分位数(quartile)

  • 第一四分位数 Q1:25% 的数据低于它;
  • 第三四分位数 Q3:75% 的数据低于它。

四分位数与中位数之间的关系可以用**箱线图(box plot)**直观呈现:

由 Q1、Q3 可计算四分位距IQR = Q3 − Q1,以及所谓的离群值(outliers)——落在区间 [Q1−1.5·IQR, Q3+1.5·IQR] 之外的值。

对于只包含少量可能取值的有限分布,出现频率最高的值即为众数(mode),常用于颜色这类类别数据。例如当两拨人分别强烈偏好红色与蓝色时,若把颜色编码为数字,均值得出的“平均偏好色”会落在橙绿光谱之间,无法反映任何一组的真实偏好;而众数则要么是其中一种颜色,要么在两组人数相等时同时给出两种颜色(此时称样本为多峰的(multimodal))。

真实世界数据:SOCR MLB 数据集

分析真实数据时,数据本身并不是严格意义上的随机变量——例如一支棒球队中球员的身高、体重与年龄并非随机实验结果,但我们仍可套用同样的数学工具:可以把一组人的体重视为从某个随机变量中抽取的取值序列。下面的序列来自美国职棒大联盟(Major League Baseball)球员的真实体重数据(data/SOCR_MLB.tsv,为便于展示仅列出前 20 个值):

[180.0, 215.0, 210.0, 210.0, 188.0, 176.0, 209.0, 200.0, 231.0, 180.0, 188.0, 180.0, 185.0, 160.0, 180.0, 185.0, 197.0, 189.0, 185.0, 219.0]

提示:完整的可运行示例参见配套 Notebook。其中使用pandas加载数据并完成后续全部分析:

import numpy as np import pandas as pd import random import matplotlib.pyplot as plt df = pd.read_csv("data/SOCR_MLB.tsv", sep='\t', header=None, names=['Name','Team','Role','Weight','Height','Age']) df[['Age','Height','Weight']].mean()

用箱线图可以同时展现均值、中位数与四分位数:

plt.figure(figsize=(10,2)) plt.boxplot(df['Height'].ffill(), orientation='horizontal', showmeans=True) plt.grid(color='gray', linestyle='dotted') plt.tight_layout() plt.show()

由于数据包含不同球员**角色(role)**信息,还可以按角色绘制箱线图,观察参数值随角色的差异(此处考察身高):

df.boxplot(column='Height', by='Role', figsize=(10,8)) plt.xticks(rotation='vertical') plt.tight_layout() plt.show()

这张图提示:平均而言,一垒手(First Baseman)的身高高过二垒手(Second Baseman)。本课后续将学习如何更正式地检验这一假设,并证明数据在统计上显著支持该结论。

处理真实数据时,我们假设所有数据点都是从某个概率分布中抽取的样本。这一假设是应用机器学习、构建可工作的预测模型的前提。

为了观察数据分布形态,可以绘制直方图(histogram):X 轴是若干个体重区间(称为bins),Y 轴表示随机变量样本落入给定区间的次数:

从直方图可以看出,所有取值围绕某个中心值聚集,偏离均值越远的体重越少见,即棒球运动员的体重与均值差异极大的概率很低;而体重的方差则刻画了体重偏离均值的可能程度。

若改用非职棒联盟人群的体重,分布很可能会不同:分布的形状保持不变,但均值和方差会改变。因此,用棒球运动员数据训练的模型,应用于大学生群体时很可能给出错误结果,因为底层分布不同。

正态分布

上述体重分布非常典型,现实世界中的许多测量都遵循同样的分布类型,只是均值和方差不同。这种分布称为正态分布(normal distribution),在统计学中扮演着至关重要的角色。

利用正态分布可以正确生成潜在棒球运动员的随机体重:只要知道平均体重mean和标准差std,就能生成 1000 个体重样本:

samples = np.random.normal(mean, std, 1000)

绘制生成样本的直方图,可以看到与真实数据非常接近的图像;若进一步增大样本数与 bins 数,可以得到更接近理想形态的正态分布图:

均值为 0、标准差为 1 的正态分布

Notebook 中还特别强调了生成模拟数据时选择分布的重要性:由于真实世界的大部分数值服从正态分布,不应使用均匀随机数生成器来生成样本数据。如下代码用均匀分布生成“错误”的体重样本,得到的直方图形态与真实分布明显不同:

wrong_sample = np.random.rand(1000)*2*std+mean-std plt.figure(figsize=(10,6)) plt.hist(wrong_sample) plt.tight_layout() plt.show()

置信区间

当讨论棒球运动员体重时,我们假设存在某个随机变量 W,对应全体棒球运动员体重的理想概率分布(称为总体(population));我们的体重序列则对应全体球员的一个子集,称为样本(sample)。一个有趣的问题是:能否得知 W 的分布参数,即总体的均值与方差?

最直接的做法是计算样本的均值与方差,但随机样本未必能精确代表整个总体,因此需要引入置信区间(confidence interval)

置信区间:基于样本对总体真实均值的估计,该估计以一定概率(即置信水平(level of confidence))是准确的。

设有来自分布的样本 X₁, ..., Xₙ。每次抽取样本都会得到不同的均值 μ,因此 μ 本身可视为随机变量。置信水平为 p 的置信区间是一对值 (Lₚ, Rₚ),满足 P(Lₚ ≤ μ ≤ Rₚ) = p,即测得均值落入该区间的概率等于 p。

置信区间的详细计算超出本课简介范围,其核心思路是:定义样本均值相对总体真实均值的分布,即Student 分布(student distribution)

趣闻:Student 分布得名于数学家 William Sealy Gosset,他以笔名 "Student" 发表论文。他任职于 Guinness 啤酒厂,据一种说法,雇主不希望公众知道他们用统计检验来确定原材料质量。

若要以置信度 p 估计总体均值 μ,需要取 Student 分布的(1-p)/2 分位数A——可从数值表中查得,或用统计软件(Python、R 等)的内置函数计算。μ 的置信区间由 X±A·D/√n 给出,其中 X 是样本均值,D 是标准差。

注意:本课略过了与 Student 分布密切相关的重要概念——自由度(degrees of freedom),深入学习可参考更完整的统计学教材。

Notebook 提供了可直接复用的置信区间计算函数:

import scipy.stats def mean_confidence_interval(data, confidence=0.95): a = 1.0 * np.array(data) n = len(a) m, se = np.mean(a), scipy.stats.sem(a) h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1) return m, h for p in [0.85, 0.9, 0.95]: m, h = mean_confidence_interval(df['Weight'].ffill(), p) print(f"p={p:.2f}, mean = {m:.2f} ± {h:.2f}")

对体重计算得到的置信区间如下:

p体重均值
0.85201.73±0.94
0.90201.73±1.08
0.95201.73±1.28

注意:置信概率越高,置信区间越宽。

假设检验

棒球运动员数据集中存在不同的球员角色,可汇总如下(如何计算这张表参见配套 Notebook,核心代码为df.groupby('Role').agg({ 'Weight' : 'mean', 'Height' : 'mean', 'Age' : 'count'}).rename(columns={ 'Age' : 'Count'})):

角色身高体重人数
Catcher72.723684204.32894776
Designated_Hitter74.222222220.88888918
First_Baseman74.000000213.10909155
Outfielder73.010309199.113402194
Relief_Pitcher74.374603203.517460315
Second_Baseman71.362069184.34482858
Shortstop71.903846182.92307752
Starting_Pitcher74.719457205.163636221
Third_Baseman73.044444200.95555645

可见一垒手的平均身高高于二垒手,因此我们可能想下结论:一垒手比二垒手更高

由于我们并不确知该事实是否成立,这样的陈述被称为假设(hypothesis)

然而这一结论并非显而易见:由前文可知每个均值都有对应的置信区间,因此该差异可能只是统计误差。我们需要更正式的方法来检验假设。先分别计算一垒手与二垒手身高的置信区间:

置信度一垒手二垒手
0.8573.62..74.3871.04..71.69
0.9073.56..74.4470.99..71.73
0.9573.47..74.5370.92..71.81

可以看到在任何置信度下两个区间都不重叠,这支持了“一垒手比二垒手更高”的假设。

更形式化地,我们实际要解决的问题是判断两个概率分布是否相同,或至少参数是否相同。根据分布类型需要选用不同检验:若已知分布为正态,可应用Student t 检验(Student t-test)

在 Student t 检验中,我们计算所谓的t 值(t-value),它综合了方差信息衡量均值之间的差异。可以证明 t 值服从Student 分布,由此可在给定置信水平 p 下得到阈值(可计算或查表);比较 t 值与阈值即可确认或拒绝假设。

Python 中可使用SciPy包,其中包含ttest_ind函数(此外还有大量有用的统计函数)。它直接计算 t 值,并完成置信度 p 值的反向查找,因此只需查看置信度即可得出结论。例如一垒手与二垒手身高的比较:

from scipy.stats import ttest_ind tval, pval = ttest_ind(df.loc[df['Role']=='First_Baseman',['Height']], df.loc[df['Role']=='Second_Baseman',['Height']], equal_var=False) print(f"T-value = {tval[0]:.2f}\nP-value: {pval[0]}")
T-value = 7.65 P-value: 9.137321189738925e-12

本例中 p 值极低,说明存在强证据支持“一垒手更高”这一结论。ttest_ind返回的两个值含义如下:

  • p 值:可视为两个分布均值相同的概率。这里 p 值非常小,表示有强证据表明一垒手更高;
  • t 值:t 检验中使用的归一化均值差,需与给定置信度下的阈值进行比较。

除此之外还存在其他可检验的假设类型,例如:

  • 证明给定样本服从某种分布(本课假设身高服从正态分布,但这需要正式的统计验证);
  • 证明样本均值等于某个预定义值;
  • 比较多个样本的均值(如不同年龄段幸福水平的差异)。

大数定律与中心极限定理

正态分布如此重要的原因之一是中心极限定理(central limit theorem)。设我们有 N 个独立样本 X₁, ..., Xₙ,取自均值为 μ、方差为 σ² 的任意分布。当 N 足够大(即 N→∞)时,均值 ΣᵢXᵢ 将服从正态分布,均值为 μ、方差为 σ²/N。

另一种理解方式是:无论原始分布如何,当你计算任意随机变量值之和的均值时,最终都会得到正态分布。

由中心极限定理还可推出:当 N→∞ 时,样本均值等于 μ 的概率趋于 1。这就是大数定律(law of large numbers)

Notebook 中给出了一个用中心极限定理解释“伪随机数生成”的生动示例:Python 的伪随机生成器默认给出均匀分布,如果想生成正态分布,可以利用中心极限定理——取一组均匀分布样本的均值即可:

def normal_random(sample_size=100): sample = [random.uniform(0,1) for _ in range(sample_size)] return sum(sample)/sample_size sample = [normal_random() for _ in range(100)] plt.figure(figsize=(10,6)) plt.hist(sample) plt.tight_layout() plt.show()

协方差与相关性

数据科学的重要任务之一是发现数据之间的关系。当两个序列在相同时刻表现出相似行为(同时上升/下降,或一升一降)时,我们说它们相关(correlate),即两个序列之间存在某种联系。

相关并不必然意味着因果:有时两个变量共同依赖某个外部原因,或只是巧合地相关。但强数学相关性是两者存在某种关联的良好指示。

数学上,刻画两个随机变量关系的核心概念是协方差(covariance):Cov(X,Y) =E[(X−E(X))(Y−E(Y))]。我们计算两个变量相对各自均值的偏差并取乘积:若两变量同步偏离,乘积恒为正,累加为正协方差;若偏离不同步(一个低于均值而另一个高于均值),乘积恒为负,累加为负协方差;若偏差彼此独立,则累加后大致为零。

协方差的绝对值并不能直接说明相关强度,因为它受实际数值量级影响。为归一化,可将协方差除以两个变量的标准差,得到相关系数(correlation)。相关系数始终落在 [-1, 1] 区间:1 表示强正相关,-1 表示强负相关,0 表示无相关(变量独立)。

示例:计算上述数据集中棒球运动员体重与身高的相关性:

print(np.corrcoef(weights, heights))

结果得到如下相关矩阵(correlation matrix)

array([[1. , 0.52959196], [0.52959196, 1. ]])

相关矩阵 C 可对任意数量的输入序列 S₁, ..., Sₙ 计算:元素 Cᵢⱼ 是 Sᵢ 与 Sⱼ 的相关系数,对角线元素恒为 1(即 Sᵢ 与自身的相关)。

本例中 0.53 表明体重与身高存在一定相关性。我们还可以绘制一个变量对另一个变量的散点图来直观观察关系:

Notebook 还通过一个“邪恶棒球公司”的玩具示例深入演示协方差与相关:假设公司按身高给球员发薪水(底薪 1000 美元加 0~100 美元浮动奖金),计算薪水与身高的相关矩阵;接着向公式中引入sin等非线性成分,甚至叠加随机噪声,观察相关系数如何变化——这直观地展示了相关性与线性关系、噪声之间的关系。此外,Notebook 还示范了缺失值(nan)会导致np.corrcoef无法计算(返回nan),需要先用ffill()/fillna()等数据预处理手段清洗数据,这体现了数据准备与清洗的重要性。

小结

本节学习的核心内容包括:

  • 数据的基本统计属性:均值、方差、众数与四分位数;
  • 随机变量的不同分布,包括正态分布;
  • 如何发现不同属性之间的相关性;
  • 如何运用数学与统计工具证明假设;
  • 如何基于样本数据计算随机变量的置信区间。

虽然以上远非概率与统计的全部主题,但足以帮助读者顺利进入后续课程。若要深入理论,可进一步研读 NYU Carlos Fernandez-Granda 的《Probability and Statistics for Data Science》讲义、Peter 与 Andrew Bruce 的《Practical Statistics for Data Scientists》以及 James D. Miller 的《Statistics for Data Science》等经典教材。

动手挑战与作业

挑战:使用 Notebook 中的示例代码检验以下假设(利用ttest_ind与置信区间方法):

  1. 一垒手比二垒手年龄更大;
  2. 一垒手比三垒手更高;
  3. 游击手(Shortstop)比二垒手更高。

作业:小型糖尿病研究(详见 1-Introduction/04-stats-and-probability/assignment.md,可运行模板见 1-Introduction/04-stats-and-probability/assignment.ipynb,参考解答见 1-Introduction/04-stats-and-probability/solution/assignment.ipynb)

使用仓库中的糖尿病数据集 data/diabetes.tsv(共 442 条记录,字段包括 AGE、SEX、BMI、BP、血液测量值 S1~S6,以及一年内疾病进展的定性指标 Y),完成以下任务:

  1. 计算所有变量的均值与方差(可用df.describe()pd.DataFrame([df.mean(), df.var()], index=['Mean','Variance']));
  2. 分别按性别(SEX=1/2)绘制 BMI、BP 与 Y 的箱线图(df.boxplot(column=col, by='SEX'));
  3. 判断 Age、Sex、BMI 与 Y 各变量的分布形态(绘制直方图观察:Age 近似正态,Sex 为均匀/二值分布,BMI 与 Y 形态需结合图形判断);
  4. 检验各变量与疾病进展指标 Y 之间的相关性(提示:相关矩阵df.corr()能给出最有用的信息。参考答案显示 BMI 与 Y 的相关系数约 0.586,S5 与 Y 约 0.566,均为较强的相关);
  5. 检验“男性与女性的糖尿病进展程度不同”这一假设(使用ttest_ind分别对 SEX=1 与 SEX=2 的 Y 列做 Welch t 检验)。参考答案中 T-value = -0.90、P-value ≈ 0.367:p 值远高于常见的 0.05 显著性水平,说明没有足够证据表明性别影响糖尿病进展。

评分标准:所有任务完整完成、有图表说明与合理解释为“优秀”;仅完成大部分任务、缺少解释为“合格”;仅完成均值/方差等基础计算与基本绘图、未从数据中得出结论为“待改进”。

延伸阅读与仓库导航

  • 课程原文档(英文版):1-Introduction/04-stats-and-probability/README.md
  • 德文翻译版(本文所依托文档):translations/de/1-Introduction/04-stats-and-probability/README.md
  • 配套完整示例 Notebook:1-Introduction/04-stats-and-probability/notebook.ipynb
  • 本课手绘知识图谱(Sketchnote):sketchnotes/04-Statistics-Probability.png
  • 数据文件:data/SOCR_MLB.tsv、data/diabetes.tsv

建议读者在 Jupyter 环境中按 Notebook 顺序逐单元格运行,并完成上述挑战与作业,以真正掌握“用统计思维与 Python 工具分析真实数据”的完整流程。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 15:40:49

多尺度有限元MsFEM:粗网格高精度求解周期性介质物理

简介&#xff1a;本资源是一套面向计算数学与工程仿真领域的Matlab实践代码包&#xff0c;专为需要高效求解周期性介质多尺度问题的科研人员、高校研究生及毕业设计学生设计。针对传统有限元法在精细网格下计算成本高、内存占用大的痛点&#xff0c;该方案实现了吴晓辉论文中提…

作者头像 李华
网站建设 2026/9/12 15:38:09

Loki Operator 发布流程全解:从 bundle 生成到 OperatorHub 上架

Loki Operator 发布流程全解&#xff1a;从 bundle 生成到 OperatorHub 上架 【免费下载链接】loki Like Prometheus, but for logs. 项目地址: https://gitcode.com/GitHub_Trending/lok/loki 本指南系统讲解 Grafana Loki Operator&#xff08;位于 operator/ 目录&am…

作者头像 李华
网站建设 2026/9/12 15:37:37

pytest 快速上手全指南:5 分钟跑通你的第一个 Python 测试框架

pytest 快速上手全指南&#xff1a;5 分钟跑通你的第一个 Python 测试框架 【免费下载链接】pytest The pytest framework makes it easy to write small tests, yet scales to support complex functional testing 项目地址: https://gitcode.com/GitHub_Trending/py/pytest…

作者头像 李华
网站建设 2026/9/12 15:36:48

Arria GX高速收发器物理层配置原理与实战调试指南

1. 项目概述&#xff1a;为什么Arria GX高速收发器配置值得花时间深挖Arria GX系列FPGA——特别是EP1AGX60DF1152C6和EP1AGX90DF1152C6这两款经典型号——在2008至2015年间是工业级高速串行通信的主力平台。它不像Stratix系列那样面向超高端市场&#xff0c;也不像Cyclone系列那…

作者头像 李华
网站建设 2026/9/12 15:36:20

C++哈希表的实现思路剖析讲解

前言 哈希又称散列&#xff0c;是一种组织数据的方式。从译名来看&#xff0c;有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建立一个哈希映射关系&#xff0c;查找时通过这个哈希函数计算出Key存储的位置&#xff0c;进行快速查找。 1.直接定址法 当关键字的…

作者头像 李华
网站建设 2026/9/12 15:36:09

uni-app微信小程序商城源码:分销拼团拍卖一体化实现

简介&#xff1a;这是一套面向微信生态电商开发者的「智信分销拼团拍卖商城」小程序全栈源码&#xff0c;适用于希望快速搭建多模式营销平台的中小企业、个体商户及小程序开发者。资源完整覆盖分销&#xff08;多级佣金体系&#xff09;、拼团&#xff08;社交裂变成团逻辑&…

作者头像 李华