Python 数据统计完全指南:从入门到实战(2026 最新实用版)
Python 是当今数据统计与分析的首选语言,主要依赖以下核心库:
- NumPy:数值计算基础
- Pandas:数据清洗、结构化处理、描述统计
- SciPy:高级统计函数、假设检验
- Statsmodels:经典统计建模(回归、时间序列、ANOVA 等)
- Seaborn / Matplotlib / Plotly:统计可视化
本文从零基础到生产级实战,覆盖描述统计 → 推断统计 → 建模 → 实战项目全链路。
1. 快速上手:环境与核心库安装(2026 推荐)
# 推荐使用 conda(最稳)或 pip
conda create -n stats python=3.11
conda activate stats
conda install pandas numpy scipy statsmodels matplotlib seaborn plotly
# 或 pip
pip install pandas numpy scipy statsmodels matplotlib seaborn plotly
2. 描述统计(Descriptive Statistics)——理解数据“长什么样”
核心指标一览表
| 类别 | 指标 | Python 实现方式 | 含义与适用场景 |
|---|---|---|---|
| 中心位置 | 均值 mean | df['col'].mean() / np.mean(arr) | 算术平均,受极端值影响大 |
| 中位数 median | df['col'].median() | 排序后中间值,抗极端值 | |
| 众数 mode | df['col'].mode() / scipy.stats.mode() | 出现频率最高值(适合分类数据) | |
| 离散程度 | 标准差 std | df['col'].std() | 数据波动大小(样本标准差 ddof=1) |
| 方差 var | df['col'].var() | 标准差的平方 | |
| 四分位距 IQR | df['col'].quantile(0.75) - df['col'].quantile(0.25) | 中间 50% 数据范围,异常值检测常用 | |
| 分布形状 | 偏度 skew | df['col'].skew() / scipy.stats.skew() | >0 右偏,<0 左偏,=0 对称 |
| 峰度 kurtosis | df['col'].kurt() | >0 更尖,<0 更平(注意 Fisher 或 Pearson 定义) | |
| 整体概览 | describe() | df.describe() / df.describe(include='all') | 一键输出数值/分类变量的统计摘要 |
实战小例子(Titanic 数据集)
import seaborn as sns
import pandas as pd
df = sns.load_dataset('titanic')
print(df.describe(include='all')) # 全字段概览
print(df['age'].median()) # 中位数更鲁棒
print("偏度:", df['fare'].skew()) # 票价明显右偏
print("峰度:", df['fare'].kurt()) # 极端高峰
可视化描述统计(强烈推荐)
import seaborn as sns
import matplotlib.pyplot as plt
# 单变量
sns.histplot(df['age'], kde=True) # 直方 + 核密度
plt.show()
sns.boxplot(x='class', y='age', data=df) # 箱线图看分布 & 异常值
plt.show()
# 相关性热力图
sns.heatmap(df.corr(numeric_only=True), annot=True, cmap='coolwarm')
plt.show()
3. 推断统计(Inferential Statistics)——从样本推总体
核心概念与 Python 实现对照
| 任务 | 统计方法 | Python 主要实现 | 适用场景 & 注意事项 |
|---|---|---|---|
| 单样本均值检验 | 单样本 t 检验 | scipy.stats.ttest_1samp(data, popmean=0) | H0: μ = μ₀ |
| 两独立样本均值比较 | 独立样本 t 检验 | scipy.stats.ttest_ind(group1, group2) | 假设方差相等(或用 Welch ttest) |
| 配对样本均值比较 | 配对 t 检验 | scipy.stats.ttest_rel(before, after) | 前后测量(如药物前后) |
| 多组均值比较 | 单因素 ANOVA | scipy.stats.f_oneway(g1,g2,g3) 或 statsmodels | 事后检验需 Tukey HSD |
| 方差齐性检验 | Levene / Bartlett | scipy.stats.levene(*groups) | ANOVA 前置检验 |
| 相关性检验 | Pearson / Spearman | scipy.stats.pearsonr() / spearmanr() | 线性 / 单调关系 |
| 独立性检验 | 卡方检验 | scipy.stats.chi2_contingency(table) | 分类变量间是否独立 |
| 正态性检验 | Shapiro-Wilk / KS | scipy.stats.shapiro(data) | 小样本首选 Shapiro,大样本用 KS 或 Anderson |
| 置信区间 | t 分布 / bootstrap | statsmodels.stats.api._tconfint_generic 或手动 | bootstrap 更现代、无分布假设 |
经典实战:判断男女票价是否有显著差异
male_fare = df[df['sex']=='male']['fare'].dropna()
female_fare = df[df['sex']=='female']['fare'].dropna()
from scipy import stats
t_stat, p_value = stats.ttest_ind(male_fare, female_fare, equal_var=False) # Welch
print(f"t = {t_stat:.3f}, p = {p_value:.4f}")
# p < 0.05 → 拒绝原假设,男女票价有显著差异
4. 统计建模(Statsmodels 核心实战)
Statsmodels 是 Python 中最接近 R 的统计建模工具。
线性回归(OLS)完整流程
import statsmodels.api as sm
import statsmodels.formula.api as smf
# 公式法(最推荐)
model = smf.ols('fare ~ age + sex + pclass + C(embarked)', data=df).fit()
print(model.summary()) # 一键输出:系数、p值、R²、F检验、诊断图等
# 手动加常数项(当不用公式时)
X = sm.add_constant(df[['age', 'pclass']])
y = df['fare']
model2 = sm.OLS(y, X).fit()
print(model2.summary())
# 诊断图(非常重要!)
sm.graphics.plot_regress_exog(model, 'age')
plt.show()
其他常见模型速查
- 逻辑回归:
smf.logit('survived ~ age + sex + pclass', data=df).fit() - 时间序列 ARIMA:
sm.tsa.arima.ARIMA(data, order=(1,1,1)).fit() - 广义线性模型 GLM:
smf.glm('... ~ ...', family=sm.families.Poisson()).fit()
5. 综合实战项目推荐(简易到进阶)
| 难度 | 项目名称 | 核心技术栈 | 学习价值 & 简要步骤 |
|---|---|---|---|
| ★★ | 泰坦尼克生存率影响因素分析 | Pandas + Seaborn + t检验 + 逻辑回归 | 数据清洗 → 描述统计 → 假设检验 → 建模解释 |
| ★★★ | 房价多因素回归分析与诊断 | Statsmodels OLS + 残差诊断 + VIF 多重共线性 | 变量选择、变换、异常值处理、模型比较 |
| ★★★ | A/B 测试分析平台(模拟或真实数据) | t检验 / Mann-Whitney / Bootstrap CI | 效应量 Cohen’d、功效分析 power |
| ★★★★ | 电商用户复购行为预测与 RFM 分析 | RFM + KMeans + 逻辑回归 / XGBoost | 商业指标 + 统计检验 + 机器学习对比 |
| ★★★★ | 股票/加密货币波动率建模与 GARCH | Statsmodels GARCH + 时间序列分解 | ACF/PACF、ARCH效应检验、预测 |
一句话总结学习路径(2026 版)
- 先熟练 Pandas describe() + Seaborn 画图(1 周)
- 掌握 SciPy 所有常见假设检验(2 周)
- 用 Statsmodels 跑 10 个回归模型 + 读懂 summary(2 周)
- 完成 1–2 个完整项目,从数据导入到结论报告(持续迭代)
如果你现在有一个具体数据集(比如 Kaggle 的某个 csv),或者想专注某个方向(金融统计、生物统计、A/B 测试、时间序列),可以告诉我,我直接给你定制代码 + 解释 + 论文/报告写法的完整方案。
统计的本质不是 p 值大小,而是用数据讲一个可信的故事。祝你学得顺、毕设/面试一把过!