
Data Science for Beginners 统计与概率入门从随机变量到假设检验的 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 课程第 04 课捷克语翻译版为核心骨架系统讲解概率、随机变量、概率分布、均值/方差/中位数等基础统计量并以真实的美国职棒大联盟MLB球员数据集为实战案例手把手演示如何用 NumPy、Pandas、SciPy 计算置信区间、执行 Student t 检验、验证中心极限定理并分析变量相关性。读完本文你将掌握数据科学入门阶段最核心的统计工具与可复现的 Python 代码。概率与随机变量数据科学的出发点概率Probability是介于 0 与 1 之间的数用来衡量某个事件Event发生的可能性。在所有结果等可能的前提下概率定义为导致该事件的有利结果数 ÷ 结果总数。例如掷一枚骰子得到偶数2、4、6的概率为 3/6 0.5。讨论事件时我们会使用随机变量Random Variable。例如表示掷骰子所得点数的随机变量取值为 1 到 6这个取值集合被称为样本空间Sample Space。我们可以讨论随机变量取某个特定值的概率例如 P(X3)1/6。随机变量分两类离散随机变量Discrete样本空间可数存在能一一列举的独立取值。骰子点数就是典型例子。连续随机变量Continuous样本空间是实数区间或整个实数集 ℝ。公交车的到达时间是一个经典例子——它可能落在任意一个时间点上。概率分布描述随机变量的行为对于离散随机变量可以借助函数 P(X) 描述每个事件的概率对样本空间S中的每个值s函数返回 0 到 1 之间的数且所有事件 P(Xs) 之和为 1。最著名的离散分布是均匀分布Uniform Distribution样本空间含 N 个元素每个元素概率均为 1/N。描述连续变量的概率分布则更复杂。考虑公交车到达时间事实上公交车恰好在某一精确时刻t到达的概率等于 0现在你知道了概率为 0 的事件确实会发生而且经常发生至少每次公交车到站都是如此对于连续变量我们只能讨论变量落在某个区间内的概率例如 P(t₁≤Xt₂)。此时概率分布由概率密度函数Probability Density Functionp(x) 描述P(t₁≤Xt₂) ∫(t₁→t₂) p(x)dx均匀分布的连续版本叫连续均匀分布定义在有限区间上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ₙ。要衡量数值的散布程度可以计算方差Varianceσ² Σ(xᵢ-μ)²/n其中 μ 是序列均值。σ 被称为标准差Standard Deviationσ² 被称为方差。在配套教学 notebook中作者先用 Python 内置random模块从 0 到 10 均匀抽样 30 个值再计算均值与方差import numpy as np import pandas as pd import random import matplotlib.pyplot as plt sample [ random.randint(0,10) for _ in range(30) ] print(fSample: {sample}) print(fMean {np.mean(sample)}) print(fVariance {np.var(sample)})之后 notebook 加载真实的 MLB 球员数据并依次计算身高Height的均值、方差与标准差df pd.read_csv(../../data/SOCR_MLB.tsv, sep\t, headerNone, names[Name,Team,Role,Weight,Height,Age]) mean df[Height].mean() var df[Height].var() std df[Height].std() print(fMean {mean}\nVariance {var}\nStandard Deviation {std})原始数据以制表符分隔存放在仓库的 data/SOCR_MLB.tsv 中共 1034 行记录包含姓名、球队、场上位置Role、体重Weight、身高Height与年龄Age六个字段。众数、中位数与四分位数抵抗异常值的典型值有时均值并不能很好代表数据的典型值。当数据中存在完全偏离区间的极端值时均值会被严重影响。这时中位数Median是更好的指标一半数据点低于它另一半高于它。为了更好理解数据分布可以引入四分位数Quartiles第一四分位数 Q125% 的数据低于它第三四分位数 Q375% 的数据低于它。中位数与四分位数之间的关系可以用箱线图Box Plot直观呈现在此基础上还可以计算四分位距IQRQ3-Q1以及所谓的离群值Outliers——落在区间 [Q1-1.5×IQR, Q31.5×IQR] 之外的值。对于只含少量可能取值的有限分布出现频率最高的值就是好的典型值称为众数Mode。它常用于颜色这类类别型数据。假设有两组人一组强烈偏好红色、另一组偏好蓝色若把颜色编码成数字均值得出的最受欢迎颜色会落在橙绿之间无法反映任何一组的真实偏好而众数会直接给出红或蓝若投票人数相等则同时给出两者此时称样本为多模态Multimodal。真实世界数据MLB 球员体重与身高的统计分析真实生活数据分析中数据往往并非严格意义上的随机变量——我们并非在做结果未知的实验。例如一支棒球队队员的身高、体重、年龄这些数字并不完全随机但我们仍可套用同样的数学概念把一串体重值看成从某个随机变量中抽取的值序列。下面是取自 MLB 的真实球员体重序列仅展示前 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。本课还包含若干挑战任务可通过在该 notebook 中添加代码完成。如果还不熟悉 Python 数据处理不必担心课程稍后会专门讲解。用箱线图可以直观展示数据的均值、中位数与四分位数由于数据包含不同球员位置Role的信息还可以按位置绘制箱线图从而观察参数取值在不同角色间的差异。这次以身高为例这张图提示一垒手First Baseman的平均身高高于二垒手Second Baseman。在本课稍后我们会学习如何更正式地检验这一假设以及如何证明数据在统计上显著地支持该结论。处理真实世界数据时我们假定所有数据点都是从某个概率分布中抽取的样本。这个假设使我们能够应用机器学习技术、构建可用的预测模型。为观察数据分布形态可以绘制直方图HistogramX 轴是若干体重区间称为binY 轴是随机变量样本落入对应区间的次数从直方图可以看出所有值都集中在某个平均体重附近离该体重越远出现该体重值的频率越低。也就是说棒球运动员体重大幅偏离平均值的可能性很低体重方差衡量的是体重偏离均值的可能程度。如果取的是非棒球联盟人群的体重分布很可能不同。但分布的形状会保持一致变化的只是均值和方差。因此用棒球运动员训练出的模型套用到大学生身上时很可能给出错误结果——因为底层分布不同。正态分布真实世界的钟形曲线上面观察到的体重分布非常典型现实世界中许多测量值遵循同一种分布形态只是均值和方差不同。这种分布被称为正态分布Normal Distribution在统计学中扮演着极其重要的角色。利用正态分布生成潜在棒球运动员的随机体重是正确的方式。只要知道平均体重mean和标准差std就能生成 1000 个体重样本samples np.random.normal(mean,std,1000)如果绘制生成样本的直方图会得到与上面非常相似的图形。增加样本数和 bin 数后可以得到更接近理想形态的正态分布图均值0、标准差1 的标准正态分布配套 notebook 中还特别演示了为什么不能用均匀分布生成体重数据wrong_sample np.random.rand(1000)*2*stdmean-std得到的直方图与真实体重分布形态完全不同——这提醒我们现实世界大多数测量值服从正态分布而不是均匀分布。置信区间用样本估计总体均值讨论棒球运动员体重时我们假设存在某个随机变量 W对应全体棒球运动员体重的理想概率分布即总体 Population。我们的体重序列对应全体球员的一个子集称为样本Sample。一个有趣的问题是能否知道 W 分布的参数即总体的均值与方差最简单的答案就是直接计算样本的均值与方差。但随机样本未必能精确代表整个总体因此讨论置信区间Confidence Interval是有意义的。置信区间基于样本对总体真实均值给出的估计该估计以一定概率置信水平准确。假设从分布中抽取样本 X₁, ..., Xₙ。每次抽样得到的均值 μ 都不同因此 μ 可被视为一个随机变量。置信水平为 p 的置信区间是一对值 (Lₚ, Rₚ)满足P(Lₚ≤μ≤Rₚ) p即测得均值落入该区间的概率等于 p。详细计算置信区间的方法超出入门范围简要来说我们定义样本均值相对总体真实均值的分布称为Student 分布t 分布。趣闻Student 分布以数学家 William Sealy Gosset 命名他以笔名 Student 发表论文。他曾在健力士啤酒厂工作据说雇主不希望公众知道他们用统计检验来判断原材料品质。若要以置信度 p 估计总体均值 μ需要取 Student 分布的(1-p)/2分位数 A——可以从数值表中查得也可用统计软件如 Python、R内置函数计算。此时 μ 的区间为 X±A×D/√n其中 X 是样本均值D 是标准差。注此处略去了与 Student 分布密切相关的重要概念自由度Degrees of Freedom想深入理解可参阅更完整的统计学书籍。配套 notebook 给出了权重与身高的置信区间计算示例。核心代码如下来自教学 notebookimport scipy.stats def mean_confidence_interval(data, confidence0.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) # t 分布临界值 return m, h for p in [0.85, 0.9, 0.95]: m, h mean_confidence_interval(df[Weight].ffill(),p) print(fp{p:.2f}, mean {m:.2f} ± {h:.2f})以体重为例不同置信水平对应的区间如下p体重均值0.85201.73±0.940.90201.73±1.080.95201.73±1.28注意置信概率越高置信区间越宽。假设检验用 t 检验证明一垒手更高MLB 球员数据集中包含多种场上位置可以汇总如下如何计算该表参见教学 notebook其核心是df.groupby(Role).agg({...})位置身高体重人数Catcher72.723684204.32894776Designated_Hitter74.222222220.88888918First_Baseman74.000000213.10909155Outfielder73.010309199.113402194Relief_Pitcher74.374603203.517460315Second_Baseman71.362069184.34482858Shortstop71.903846182.92307752Starting_Pitcher74.719457205.163636221Third_Baseman73.044444200.95555645可以注意到一垒手的平均身高高于二垒手因此我们可能得出结论一垒手比二垒手高。这个陈述被称为假设Hypothesis因为我们并不知道该事实是否真的成立。然而能否下此结论并不总是显而易见。由上文可知每个均值都关联一个置信区间因此这个差异可能只是统计误差。我们需要更正式的方法来检验假设。先分别计算一垒手与二垒手身高的置信区间置信水平一垒手二垒手0.8573.62..74.3871.04..71.690.9073.56..74.4470.99..71.730.9573.47..74.5370.92..71.81可以看到在任何置信水平下两个区间都不重叠。这支持了一垒手比二垒手高的假设。更形式化地说我们真正要解决的问题是判断两个概率分布是否相同或至少参数相同。根据分布类型需选用不同检验若已知分布为正态可用[Student t 检验]。在 Student t 检验中计算t 值t-value它衡量考虑方差后的均值差。已证明 t 值服从Student 分布据此可得到给定置信水平p的阈值可计算或查数值表然后比较 t 值与阈值以接受或拒绝假设。在 Python 中可以使用SciPy包它包含ttest_ind函数此外还有大量有用的统计函数。该函数为我们计算 t 值并反向查表给出置信度对应的 p 值因此只需观察 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_varFalse) print(fT-value {tval[0]:.2f}\nP-value: {pval[0]})T-value 7.65 P-value: 9.137321189738925e-12ttest_ind返回的两个值含义如下见 notebook 说明p 值可视为两个分布均值相同的概率。本例中 p 值极低意味着有强证据支持一垒手更高t 值是 t 检验中归一化均值差的中间量需与给定置信水平下的阈值比较。在我们的情形中 p 值非常低说明存在强证据支持一垒手更高。此外还可能想检验其他类型的假设例如证明给定样本服从某个分布本课假设身高服从正态分布但这需要正式的统计验证证明样本均值等于某个预先定义的值比较多个样本的均值例如不同年龄段人群的幸福水平差异。大数定律与中心极限定理正态分布为何无处不在正态分布如此重要的原因之一是中心极限定理Central Limit Theorem。假设我们从任意一个均值为 μ、方差为 σ² 的分布中独立抽取 N 个大样本 X₁, ..., Xₙ那么当 N 足够大即 N→∞时均值 ΣᵢXᵢ 服从正态分布均值为 μ方差为 σ²/N。中心极限定理的另一种解读是无论原分布是什么当你计算任意随机变量取值之和的均值时最终都会得到正态分布。由中心极限定理还可推出当 N→∞ 时样本均值等于 μ 的概率趋近于 1这就是大数定律Law of Large Numbers。配套 notebook 用一个漂亮的实验验证了中心极限定理Python 的伪随机生成器本应给出均匀分布但我们只需取一组均匀生成样本的均值就能造出一个正态分布生成器def normal_random(sample_size100): 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()从直方图可以直观看到100 个均匀样本均值构成的分布已经呈现钟形——这就是中心极限定理的威力。协方差与相关性发现变量之间的关系数据科学的一项重要工作就是发现数据间的联系。当两个序列在同一时刻表现出相似行为时同时上升/下降或一个上升另一个下降我们说它们相关Correlate。换言之两个序列之间似乎存在某种关系。相关并不必然意味着两个序列之间存在因果关系有时两个变量都依赖某个外部原因或者相关性纯属巧合。但强数学相关性是两个变量以某种方式关联的良好指示。数学上衡量两个随机变量关系的主要概念是协方差CovarianceCov(X,Y) E[(X-E(X))(Y-E(Y))]。我们计算两个变量相对各自均值的偏差再求这些偏差的乘积若两个变量同向偏离乘积恒为正累加得到正协方差若反向偏离一个低于均值而另一个高于均值乘积恒为负累加得到负协方差若偏差相互独立累加后大致为零。协方差的绝对值并不能告诉我们相关性的强弱因为它取决于实际数值的量级。为将其归一化可以把协方差除以两个变量的标准差得到相关系数Correlation。相关系数始终落在 [-1,1]1 表示强正相关-1 表示强负相关0 表示完全不相关变量独立。示例计算上述数据集中棒球运动员体重与身高的相关性print(np.corrcoef(weights,heights))结果得到一个相关矩阵Correlation Matrixarray([[1. , 0.52959196], [0.52959196, 1. ]])相关矩阵 C 可对任意数量的输入序列 S₁, ..., Sₙ 计算Cᵢⱼ 是 Sᵢ 与 Sⱼ 的相关系数对角元素恒为 1即 Sᵢ 的自相关。本例中 0.53 表明人的体重与身高存在一定相关性。也可以用散点图直观观察两者的关系更多协方差与相关性示例见教学 notebook。notebook 中还有一个有趣的邪恶棒球公司玩具示例假设公司按身高支付球员薪水底薪 1000 美元加 0~100 美元的身高奖金计算np.cov(heights, salaries)与np.corrcoef(heights, salaries)得到相关系数为 1完全线性关系随后把公式改成包含np.sin的非线性函数并混入随机噪声相关系数随之下降——直观展示了相关性与线性关系的联系。此外直接对含缺失值nan的序列调用np.corrcoef(df[Height].ffill(), df[Weight])会得到nan这凸显了数据清洗Data Preparation的重要性没有干净的数据我们什么也算不出来。小结与进阶作业本节我们学习了数据的基本统计性质如均值、方差、众数与四分位数随机变量的不同分布包括正态分布如何寻找不同特征之间的相关性如何用严谨的数学与统计工具验证假设如何基于数据样本计算随机变量的置信区间。这当然远非概率与统计领域的全部主题但足以让你在本课程中有一个良好开端。课程还提供了配套作业——小糖尿病研究Malá studie o cukrovce。作业使用 data/diabetes.tsv 中的 442 条糖尿病患者记录字段包括 AGE、SEX、BMI、BP、S1~S6 六项血液指标以及 Y——一年内病情进展的量化度量要求在作业 notebook中完成计算所有变量的均值与方差按性别绘制 BMI、BP 与 Y 的箱线图分析 AGE、SEX、BMI、Y 的分布形态检验各变量与病情进展Y之间的相关性提示相关矩阵能给出哪些变量相互依赖的最有效信息检验男女糖尿病进展程度不同的假设。参考作业解答可以看到完整的解题思路用df.describe()与df.var()计算统计量df.corr()得到的相关矩阵显示与 Y 相关性最强的是 BMI0.586和 S50.566血糖指标结论符合医学直觉最后用ttest_ind检验男女 Y 值差异得到 T-value -0.90、P-value ≈ 0.367p 值远大于常规显著性水平说明没有足够证据支持男女糖尿病进展存在差异。评分标准强调优秀完成需要所有任务完整、有图形佐证且结论解释充分而仅完成均值/方差计算与基础绘图则只能算需改进。【免费下载链接】Data-Science-For-Beginners10 Weeks, 20 Lessons, Data Science for All!项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考