首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 50个常用统计分析方法

Python 50个常用统计分析方法

作者头像
用户11081884
发布2026-07-20 17:29:34
发布2026-07-20 17:29:34
940
举报

本文将介绍50个使用Python进行数据统计分析的实用方法,涵盖从基础描述性统计到高级统计度量的各种操作。每个方法都配有说明、使用场景和代码示例,帮助在实际数据分析工作中快速应用。

1. 计算平均值

说明:算术平均数,衡量数据中心位置

场景:快速了解整体水平

代码语言:javascript
复制
import numpy as np
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
mean = np.mean(data)
print(mean)
代码语言:javascript
复制
5.5

2. 计算中位数

说明:排序后位于中间的值

场景:存在极端值或偏态分布时,比均值更稳健

代码语言:javascript
复制
median = np.median(data)
print(median)
代码语言:javascript
复制
5.5

3. 计算众数

说明:出现频率最高的值

场景:识别最典型或最频繁的类别/数值

代码语言:javascript
复制
from scipy import stats
mode = stats.mode(data, keepdims=False)
print(mode.mode, mode.count)
代码语言:javascript
复制
1 1

4. 计算方差

说明:数据偏离均值的程度

场景:衡量总体波动大小

代码语言:javascript
复制
variance = np.var(data, ddof=0)
print(variance)
代码语言:javascript
复制
8.25

5. 计算标准差

说明:方差的平方根,与原始数据同量纲

场景:评估风险、波动或离散度

代码语言:javascript
复制
std_dev = np.std(data, ddof=0)
print(std_dev)
代码语言:javascript
复制
2.8722813232690143

6. 计算四分位数

说明:将数据等分为四部分的三个切点

场景:快速刻画分布形态、检测离群

代码语言:javascript
复制
q1, q3 = np.percentile(data, [25, 75])
print(q1, q3)
代码语言:javascript
复制
3.25 7.75

7. 计算极差

说明:最大值 – 最小值

场景:一眼看出数据跨度

代码语言:javascript
复制
range_val = np.ptp(data)
print(range_val)
代码语言:javascript
复制
9

8. 计算任意百分位数

说明:自定义分位点

场景:精细化刻画分布,如 90% 阈值

代码语言:javascript
复制
p90 = np.percentile(data, 90)
print(p90)
代码语言:javascript
复制
9.1

9. 计算偏度

说明:度量分布不对称性

场景:判断数据是否倾斜,指导后续变换

代码语言:javascript
复制
skew = stats.skew(data)
print(skew)
代码语言:javascript
复制
0.0

10. 计算峰度

说明:度量分布尾部厚重程度

场景:识别尖峰或厚尾风险

代码语言:javascript
复制
kurt = stats.kurtosis(data)
print(kurt)
代码语言:javascript
复制
-1.2242424242424244

11. 计算相关系数

说明:两变量线性相关强度 (-1~1)

场景:探索特征间关系

代码语言:javascript
复制
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
corr = np.corrcoef(x, y)[0, 1]
print(corr)
代码语言:javascript
复制
1.0

12. 计算协方差

说明:两变量联合波动程度

场景:多元风险分析、PCA 前奏

代码语言:javascript
复制
cov = np.cov(x, y)[0, 1]
print(cov)
代码语言:javascript
复制
5.0

13. 计算累积和

说明:序列逐项累加

场景:累计增长、盈亏曲线

代码语言:javascript
复制
cumsum = np.cumsum(data)
print(cumsum)
代码语言:javascript
复制
[ 1  3  6 10 15 21 28 36 45 55]

14. 计算累积积

说明:序列逐项累乘

场景:复利、累积收益率

代码语言:javascript
复制
cumprod = np.cumprod(data)
print(cumprod)
代码语言:javascript
复制
[      1       2       6      24     120     720    5040   40320  362880 3628800]

15. 计算累积最大值

说明:到当前位置的历史最高值

场景:跟踪峰值、回撤计算

代码语言:javascript
复制
cummax = np.maximum.accumulate(data)
print(cummax)
代码语言:javascript
复制
[ 1  2  3  4  5  6  7  8  9 10]

16. 计算累积最小值

说明:到当前位置的历史最低值

场景:跟踪谷底、最大亏损

代码语言:javascript
复制
cummin = np.minimum.accumulate(data)
print(cummin)
代码语言:javascript
复制
[1 1 1 1 1 1 1 1 1 1]

17. 简单移动平均

说明:滑动窗口内均值

场景:平滑噪声、趋势识别

代码语言:javascript
复制
def moving_average(arr, w=3):
    return np.convolve(arr, np.ones(w)/w, mode='valid')

print(moving_average(data))
代码语言:javascript
复制
[ 2.  3.  4.  5.  6.  7.  8.  9.]

18. 指数加权移动平均 (EWMA)

说明:越近期权重越大

场景:对近期变化更敏感的趋势线

代码语言:javascript
复制
import pandas as pd
ewma = pd.Series(data).ewm(alpha=0.3, adjust=False).mean()
print(ewma.values)
代码语言:javascript
复制
[1.         1.3        1.81       2.367      2.9569     3.56983
 4.298881   5.1092167  6.07645169 7.15351618]

19. 计算 Z-Score

说明:标准化为均值 0、方差 1

场景:异常检测、特征缩放

代码语言:javascript
复制
z = (np.array(data) -np.mean(data)) /np.std(data)
print(z)
代码语言:javascript
复制
[-1.5666989 -1.21854359 -0.87038828 -0.52223297 -0.17407766  0.17407766
  0.52223297  0.87038828  1.21854359  1.5666989 ]

20. Min-Max 归一化

说明:压缩到 [0,1] 区间

场景:神经网络、KNN 等距离算法前处理

代码语言:javascript
复制
scaled = (np.array(data) -np.min(data)) / (np.max(data) -np.min(data))
print(scaled)
代码语言:javascript
复制
[0.  0.11111111 0.22222222 0.33333333 0.44444444 0.55555556
 0.66666667 0.77777778 0.88888889 1.        ]

21. 计算经验 CDF

说明:P(X ≤ x) 的样本估计

场景:分位数检验、概率图

代码语言:javascript
复制
sorted_data = np.sort(data)
ecdf = np.arange(1, len(data)+1) /len(data)
print(ecdf)
代码语言:javascript
复制
[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]

22. 估计概率密度 (PDF)

说明:直方图密度估计

场景:绘制分布曲线、形态检查

代码语言:javascript
复制
hist, bins = np.histogram(data, bins=5, density=True)
print("hist:", hist)
print("bins:", bins)
代码语言:javascript
复制
hist: [0.02222222 0.04444444 0.04444444 0.04444444 0.02222222]
bins: [ 1.  2.8 4.6 6.4 8.2 10. ]

23. 中位数绝对偏差 (MAD)

说明:稳健离差度量

场景:异常值较多时替代标准差

代码语言:javascript
复制
mad = np.median(np.abs(np.array(data) -np.median(data)))
print(mad)
代码语言:javascript
复制
2.5

24. 计算信息熵

说明:度量随机变量不确定性

场景:特征选择、决策树、信息增益

代码语言:javascript
复制
from collections import Counter
importmath

defentropy(arr):
    counts = Counter(arr)
    probs = [c/len(arr) forcincounts.values()]
    return-sum(p*math.log2(p) forpinprobs)

print(entropy(data))
代码语言:javascript
复制
3.321928094887362

25. 计算自相关性 (滞后 1)

说明:序列与自身平移后的相关

场景:时间序列建模、残差诊断

代码语言:javascript
复制
acf_1 = np.corrcoef(data[:-1], data[1:])[0, 1]
print(acf_1)
代码语言:javascript
复制
0.9999999999999998

26. 对数变换

说明:压缩大值,降低右偏

场景:收入、房价等右偏特征

代码语言:javascript
复制
log_data = np.log1p(data)
print(log_data)
代码语言:javascript
复制
[0.69314718 1.09861229 1.38629436 1.60943791 1.79175947 1.94591015
 2.07944154 2.19722458 2.30258509 2.39789527]

27. Box-Cox 变换

说明:幂变换族,逼近正态

场景:回归/假设检验需正态前提

代码语言:javascript
复制
bc_data, _ = stats.boxcox(np.array(data) +1)  # 需正值
print(bc_data)
代码语言:javascript
复制
[1.38629436 2.19722458 2.77258872 3.21887582 3.58351894 3.8918203
 4.15888308 4.39444915 4.60517019 4.79579055]

28. 独立样本 t 检验

说明:比较两组均值差异显著性

场景:A/B 测试、实验评估

代码语言:javascript
复制
a = [1, 2, 3, 4, 5]
b = [2, 3, 4, 5, 6]
t_stat, p = stats.ttest_ind(a, b)
print(t_stat, p)
代码语言:javascript
复制
-1.0 0.355361050569611

29. 卡方拟合优度检验

说明:观察频数 vs 期望频数

场景:类别分布检验、AB 人群均衡检查

代码语言:javascript
复制
obs = [30, 50, 20]
exp = [33, 33, 34]
chi2, p = stats.chisquare(obs, f_exp=exp)
print(chi2, p)
代码语言:javascript
复制
9.696969696969697 0.007848011003890048

30. 单因素 ANOVA

说明:多组均值比较

场景:超过两组的实验效果评估

代码语言:javascript
复制
f_val, p = stats.f_oneway([1, 2, 3], [4, 5, 6], [7, 8, 9])
print(f_val, p)
代码语言:javascript
复制
18.0 0.002508940265826718

31. 线性回归

说明:拟合直线 y = kx + b

场景:预测、关系量化

代码语言:javascript
复制
x = [1, 2, 3, 4, 5]
y = [2, 4, 5, 4, 5]
k, b, _, _, _ = stats.linregress(x, y)
print(k, b)
代码语言:javascript
复制
0.7 2.6

32. 多项式回归

说明:扩展线性模型,拟合曲线

场景:非线性关系建模

代码语言:javascript
复制
coeffs = np.polyfit(x, y, deg=2)
print(np.poly1d(coeffs))
代码语言:javascript
复制
          2
-0.2 x + 1.3 x + 0.9

33. 季节性分解

说明:拆成趋势、季节、残差

场景:销售预测、经济指标分析

代码语言:javascript
复制
from statsmodels.tsa.seasonal import seasonal_decompose
ts = pd.Series(data, index=pd.date_range('2023-01', periods=len(data), freq='M'))
decomp = seasonal_decompose(ts, model='additive', period=3)
print(decomp.trend.dropna().values)
代码语言:javascript
复制
[2.33333333 3.33333333 4.33333333 5.33333333 6.33333333 7.33333333
 8.33333333]

34. 自相关函数 (ACF)

说明:多期滞后相关

场景:ARIMA 定阶、周期识别

代码语言:javascript
复制
from statsmodels.tsa.stattools import acf
acf_vals = acf(data, nlags=3)
print(acf_vals)
代码语言:javascript
复制
[1.  0.7 0.41212121 0.17575758]

35. Wilcoxon 符号秩检验

说明:配对样本非参数检验

场景:不满足正态假设的前后比较

代码语言:javascript
复制
before = [1, 2, 3]
after  = [1.1, 2.1, 2.9]
w, p = stats.wilcoxon(before, after)
print(w, p)
代码语言:javascript
复制
0.0 1.0

36. Mann-Whitney U 检验

说明:两独立样本非参数检验

场景:非正态、秩次比较

代码语言:javascript
复制
u, p = stats.mannwhitneyu([1, 2, 3], [4, 5, 6], alternative='two-sided')
print(u, p)
代码语言:javascript
复制
0.0 0.2

37. IQR 异常值检测

说明:基于箱线图规则

场景:通用、快速离群筛查

代码语言:javascript
复制
arr = [1, 2, 3, 4, 100]
q1, q3 = np.percentile(arr, [25, 75])
iqr = q3-q1
lower, upper = q1-1.5*iqr, q3+1.5*iqr
outliers = np.array(arr)[(arr<lower) | (arr>upper)]
print(outliers)
代码语言:javascript
复制
[100]

38. Z-Score 异常值检测

说明:超过 N 倍标准差视为异常

场景:近似正态分布数据

代码语言:javascript
复制
z = np.abs(stats.zscore(arr))
print(arr[z>2])
代码语言:javascript
复制
[100]

39. 简单随机抽样

说明:无放回等概率抽取

场景:训练/测试划分

代码语言:javascript
复制
sample = np.random.choice(data, size=3, replace=False)
print(sample)
代码语言:javascript
复制
[3 8 5]

40. 分层抽样

说明:保持类别比例抽样

场景:不均衡数据建模、交叉验证

代码语言:javascript
复制
from sklearn.model_selection import train_test_split
X = np.arange(10)
y = [0]*5+ [1]*5
X_train, _, y_train, _ = train_test_split(X, y, stratify=y, test_size=0.5, random_state=42)
print(y_train)   # 类别保持 1:1
代码语言:javascript
复制
[0, 1, 1, 0, 1]

41. 分组均值

说明:按类别求平均

场景:多组 KPI 比较

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame({'group': ['A', 'A', 'B'], 'value': [10, 20, 30]})
print(df.groupby('group')['value'].mean())
代码语言:javascript
复制
A    15
B    30

42. 分组标准差

说明:按类别衡量波动

场景:组内稳定性评估

代码语言:javascript
复制
print(df.groupby('group')['value'].std())
代码语言:javascript
复制
A    7.071068
B         NaN
dtype: float64

43. 均值插补缺失值

说明:用列均值填补 NaN

场景:缺失比例低、随机缺失

代码语言:javascript
复制
s = pd.Series([1, 2, np.nan, 4])
s_filled = s.fillna(s.mean())
print(s_filled.values)
代码语言:javascript
复制
[1. 2. 2.33333333 4. ]

44. 中位数插补缺失值

说明:用中位数填补,抗异常

场景:存在极端值

代码语言:javascript
复制
s_filled = s.fillna(s.median())
print(s_filled.values)
代码语言:javascript
复制
[1. 2. 2. 4. ]

45. 移动中位数平滑

说明:滑动窗口中位数

场景:去噪、保留突变

代码语言:javascript
复制
def moving_median(series, win=3):
    returnpd.Series(series).rolling(win, center=True).median()

print(moving_median([1, 5, 3, 4, 6]).dropna().values)
代码语言:javascript
复制
[3. 4. 4.]

46. Savitzky-Golay 滤波

说明:多项式平滑同时保边

场景:光谱、股价平滑

代码语言:javascript
复制
from scipy.signal import savgol_filter
smooth = savgol_filter([1, 2, 3, 4, 5, 6, 7], 5, 2)
print(smooth)
代码语言:javascript
复制
[0.88571429 1.94285714 3.         4.         5.         6.05714286
 7.11428571]

47. 独热编码

说明:类别转二进制向量

场景:机器学习输入

代码语言:javascript
复制
encoded = pd.get_dummies(['cat', 'dog', 'cat'])
print(encoded.values)
代码语言:javascript
复制
[[1 0]
 [0 1]
 [1 0]]

48. 分箱离散化

说明:连续值分段

场景:决策树、WOE 编码

代码语言:javascript
复制
bins = pd.cut(data, bins=3, labels=['low', 'mid', 'high'])
print(bins.codes)
代码语言:javascript
复制
[0 0 0 0 1 1 1 2 2 2]

49. 计算 R²

说明:回归解释力指标

场景:模型评估

代码语言:javascript
复制
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
r2 = 1-np.sum((np.array(y_true) -y_pred)**2) /np.sum((np.array(y_true) -np.mean(y_true))**2)
print(r2)
代码语言:javascript
复制
0.9486081370449679

50. 混淆矩阵

说明:分类模型性能表

场景:评估精准率、召回率

代码语言:javascript
复制
from sklearn.metrics import confusion_matrix
y_true = ['cat', 'dog', 'cat', 'dog']
y_pred = ['cat', 'cat', 'dog', 'dog']
cm = confusion_matrix(y_true, y_pred, labels=['cat', 'dog'])
print(cm)
代码语言:javascript
复制
[[1 1]
 [1 1]]

以上50个Python统计分析的方法涵盖了从基础到高级的各种统计操作,适用于数据探索、预处理、分析和建模的各个阶段。根据您的具体需求选择合适的统计方法,可以大大提高数据分析的效率和质量。

“无他,惟手熟尔”!有需要的用起来。

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!😊

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 计算平均值
  • 2. 计算中位数
  • 3. 计算众数
  • 4. 计算方差
  • 5. 计算标准差
  • 6. 计算四分位数
  • 7. 计算极差
  • 8. 计算任意百分位数
  • 9. 计算偏度
  • 10. 计算峰度
  • 11. 计算相关系数
  • 12. 计算协方差
  • 13. 计算累积和
  • 14. 计算累积积
  • 15. 计算累积最大值
  • 16. 计算累积最小值
  • 17. 简单移动平均
  • 18. 指数加权移动平均 (EWMA)
  • 19. 计算 Z-Score
  • 20. Min-Max 归一化
  • 21. 计算经验 CDF
  • 22. 估计概率密度 (PDF)
  • 23. 中位数绝对偏差 (MAD)
  • 24. 计算信息熵
  • 25. 计算自相关性 (滞后 1)
  • 26. 对数变换
  • 27. Box-Cox 变换
  • 28. 独立样本 t 检验
  • 29. 卡方拟合优度检验
  • 30. 单因素 ANOVA
  • 31. 线性回归
  • 32. 多项式回归
  • 33. 季节性分解
  • 34. 自相关函数 (ACF)
  • 35. Wilcoxon 符号秩检验
  • 36. Mann-Whitney U 检验
  • 37. IQR 异常值检测
  • 38. Z-Score 异常值检测
  • 39. 简单随机抽样
  • 40. 分层抽样
  • 41. 分组均值
  • 42. 分组标准差
  • 43. 均值插补缺失值
  • 44. 中位数插补缺失值
  • 45. 移动中位数平滑
  • 46. Savitzky-Golay 滤波
  • 47. 独热编码
  • 48. 分箱离散化
  • 49. 计算 R²
  • 50. 混淆矩阵
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档