除了Pandas,Python还有哪些高级数据分析模块:SciPy与Statsmodels应用

桃夭
桃夭
发布时间:2026-11-07| 4人浏览过
原创

深入探讨除了Pandas之外Python进阶数据分析的两大核心工具:SciPy与Statsmodels,提供详细的推断统计与计量建模应用指南。

在Python数据分析流程中,Pandas擅长执行数据清洗、结构整理与聚合计算,但它主要聚焦于描述性分析。当业务问题需要从“样本数据表现如何”进一步深入到“变量差异是否由偶然导致”、“自变量对因变量的具体边际影响是多少”时,分析人员就需要推断统计与计量建模工具。SciPy与Statsmodels正是补足这一能力梯次的核心模块:SciPy提供数值计算与科学统计检验底层支持,Statsmodels则提供完整的计量统计模型与模型诊断输出。

除了Pandas,Python还有哪些高级数据分析模块:SciPy与Statsmodels应用
图 1:Python 数据分析三层架构分工与数据流转关系

工具边界与适用场景对比

在实际选择工具前,清晰识别各模块的边界是避免重构代码的前提。下表列举了三个库在实际数据分析任务中的关键分工:

功能维度 Pandas SciPy (stats) Statsmodels
核心对象 Series, DataFrame NumPy 数组, 连续/离散分布对象 公式接口 (Patsy), 模型拟合结果类
典型问题 “两组用户的次日留存均值是多少?” “两组留存差异是否具备统计显著性?” “控制渠道后,版本更新对留存的净效应多大?”
输出形式 清洗后表格、基本描述数值 检验统计量标量、p 值、自由度 详尽的统计学摘要表、置信区间、诊断残差

SciPy 在推断统计中的应用

SciPy 的子模块 scipy.stats 汇集了大量统计分布和假设检验方法。进行高级数据分析时,最常见的两个需求是:验证业务数据是否符合特定分布假设(如正态分布),以及在 A/B 测试或分组对照中进行均值差异检验。

1. 分布检验(Shapiro-Wilk 检验)

许多参数检验(如学生 t 检验)要求样本来自正态总体。盲目套用检验方法容易导致结论偏差。通过 stats.shapiro 可以快速验证小到中等样本量(N < 5000)的正态性:

import numpy as np
from scipy import stats

# 准备模拟数据:一组符合正态分布,另一组为偏态分布
np.random.seed(42)
normal_data = np.random.normal(loc=50, scale=10, size=100)
skewed_data = np.random.exponential(scale=10, size=100)

# 执行正态性检验
stat_norm, p_norm = stats.shapiro(normal_data)
stat_skew, p_skew = stats.shapiro(skewed_data)

print(f"正态数据检验统计量: {stat_norm:.4f}, p值: {p_norm:.4f}")
print(f"偏态数据检验统计量: {stat_skew:.4f}, p值: {p_skew:.4e}")

示例输出:

正态数据检验统计量: 0.9882, p值: 0.5283
偏态数据检验统计量: 0.8143, p值: 1.0927e-09

判断规则:当显著性水平设定为 0.05 时,第一组数据的 p 值为 0.5283,大于 0.05,无法拒绝原假设,表明样本符合正态分布特征;第二组数据的 p 值远小于 0.05,拒绝原假设,属于非正态数据。

2. 两独立样本假设检验(Welch's t-test 与 Mann-Whitney U)

判断两组样本均值差异时,必须根据两组数据的方差齐性和分布状态选用合适算法。如果两组数据满足正态性但方差不齐,应采用 Welch's t-test(设置 equal_var=False);若数据严重偏态,则应退回到非参数检验 mannwhitneyu。

除了Pandas,Python还有哪些高级数据分析模块:SciPy与Statsmodels应用
图 2:两样本均值显著性检验的操作推导决策流程
# 模拟对照组 (A) 与 实验组 (B)
group_a = np.random.normal(loc=12.0, scale=2.5, size=80)
group_b = np.random.normal(loc=13.2, scale=3.1, size=75)

# 方差齐性检验 (Levene 检验)
levene_stat, levene_p = stats.levene(group_a, group_b)

# 执行双样本 t 检验 (默认推荐使用 Welch's t 检验,防止方差不齐造成第一类错误膨胀)
t_stat, p_val = stats.ttest_ind(group_a, group_b, equal_var=(levene_p > 0.05))

print(f"方差齐性 p 值: {levene_p:.4f}")
print(f"均值检验统计量: {t_stat:.4f}, p 值: {p_val:.4f}")

示例输出:

方差齐性 p 值: 0.1135
均值检验统计量: -2.6341, p 值: 0.0093
注意事项:在大样本业务场景中,由于样本量极大,轻微的数值差异也会产生极小的 p 值。此时不能仅看显著性,还必须结合效应量(如 Cohen's d)评估差异是否具备实际商业价值。

Statsmodels 在计量建模与回归诊断中的应用

SciPy 的 stats 模块解决了单变量或双变量的检验问题,但如果需要分析多个因素对目标指标的综合影响,Statsmodels 是首选。它支持基于类 R 语言语法(Patsy 公式)定义模型,并提供统计推断所需的系数标准误、t 值、F 检验以及多重共线性等全套诊断指标。

1. 普通最小二乘法(OLS 回归)与完整诊断

下面演示如何使用 statsmodels.formula.api 建立多元线性回归,并对结果摘要中的核心参数进行判读。

import pandas as pd
import statsmodels.formula.api as smf

# 构造具有线性关系的业务模拟数据
np.random.seed(101)
n = 120
ad_spend = np.random.uniform(10, 100, n)
discount = np.random.uniform(0.05, 0.30, n)
# 销售额 = 50 + 2.5 * 广告费用 + 80 * 折扣力度 + 噪声
sales = 50 + 2.5 * ad_spend + 80 * discount + np.random.normal(0, 15, n)

df = pd.DataFrame({
    'sales': sales,
    'ad_spend': ad_spend,
    'discount': discount
})

# 拟合 OLS 模型
model = smf.ols(formula='sales ~ ad_spend + discount', data=df).fit()
print(model.summary())

关键摘要指标解读表:

诊断指标 观察目标 标准参考值与含义
R-squared / Adj. R-squared 拟合优度 通常在 0 到 1 之间,越接近 1 说明模型解释的自变量方差比例越大。多变量时优先关注调整后 R²。
P>|t| (变量 p 值) 自变量显著性 如果小于 0.05,说明在控制其他变量后,该特征与因变量存在统计学上的线性相关关系。
Durbin-Watson 残差自相关性 数值接近 2.0 表明残差不存在一阶自相关;远低于 1.5 说明存在正自相关,时间序列分析中需格外警惕。
Prob (F-statistic) 整体模型有效性 若小于显著性水平(如 0.01),拒绝“所有自变量系数均为0”的联合假设。
除了Pandas,Python还有哪些高级数据分析模块:SciPy与Statsmodels应用
图 3:Statsmodels 回归输出结构与核心审计关注点

2. 多重共线性诊断(方差膨胀因子 VIF)

在多元回归中,如果特征之间存在较强的线性相关,会导致系数估计的方差增大、符号反常。此时可以借助 statsmodels.stats.outliers_influence 计算方差膨胀因子(VIF):

from statsmodels.stats.outliers_influence import variance_inflation_factor

# 提取设计矩阵(包含常数项)
X = model.model.exog
feature_names = model.model.exog_names

vif_data = pd.DataFrame()
vif_data["Feature"] = feature_names
vif_data["VIF"] = [variance_inflation_factor(X, i) for i in range(X.shape[1])]
print(vif_data)

判断原则:一般而言,VIF 大于 10(严格场景下大于 5)提示存在严重多重共线性,需要考虑剔除变量、主成分降维或更换为岭回归。

模块选型与落地路径

将上述模块组合使用,可以形成一套闭环的数据分析与建模流程:先用 Pandas 完成数据抽取、清洗与基本描述,然后利用 SciPy 进行统计学前提检验与组间差异确认,最后借助 Statsmodels 构建包含多变量控制的推断模型与因果解释。

除了Pandas,Python还有哪些高级数据分析模块:SciPy与Statsmodels应用
图 4:全流程高级数据分析作业管道

总结

在数据分析从“汇总报表”向“深度归因”进阶的过程中:

  • Pandas 是操作台,负责把杂乱的数据整理成标准二维表。
  • SciPy 是检验尺,负责以最小的代码成本完成分布判断、单因素与双因素的假设检验。
  • Statsmodels 是分析仪,负责控制混杂因素、输出详尽的统计推断报告与残差诊断。

掌握 SciPy 与 Statsmodels 的协同使用,能够让分析师在处理实际业务时,从单纯的“看图说话”过渡到“具备统计学严谨性的因果论证与参数量化”。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。