Python实战:从零掌握标准正态分布及其可视化

张开发
2026/4/24 3:12:30 15 分钟阅读

分享文章

Python实战:从零掌握标准正态分布及其可视化
1. 什么是标准正态分布我第一次接触标准正态分布是在大学统计课上当时教授画了一个完美的钟形曲线说这是自然界最常见的分布。后来做数据分析才发现这个看似简单的曲线真的无处不在——从人的身高体重到考试分数甚至工厂产品的尺寸误差。标准正态分布其实就是一种特殊的正态分布它的均值μ固定为0标准差σ固定为1。你可以把它想象成所有正态分布的标准模板。为什么需要这个模板呢因为不同场景下的正态分布参数差异很大比如身高用厘米计量、体重用公斤但转换成标准正态分布后就都变成了统一的尺度。数学表达式特别简洁φ(z) (1/√(2π)) * e^(-z²/2)这个公式里没有μ和σ因为都被标准化了。我刚开始总记不住这个公式直到发现e^(-z²/2)部分就像个衰减器离中心0点越远概率密度下降得越快。2. 用Python生成标准正态数据实际工作中我更喜欢用numpy生成随机数据。最常用的有两种方法import numpy as np # 方法一直接生成标准正态数据 data1 np.random.standard_normal(10000) # 方法二先生成普通正态再标准化 data2 (np.random.normal(5, 2, 10000) - 5) / 2这里有个坑要注意第二种方法标准化时一定要先减均值再除以标准差我有次写反了顺序结果分布完全不对。验证数据是否标准正态我习惯用三个指标print(均值:, np.mean(data1)) # 应该接近0 print(标准差:, np.std(data1)) # 应该接近1 print(峰度:, scipy.stats.kurtosis(data1)) # 应该接近03. 可视化标准正态分布matplotlib画基本图形很简单但要画出专业感需要些技巧。这是我的常用配置import matplotlib.pyplot as plt from scipy.stats import norm plt.figure(figsize(10,6)) x np.linspace(-4, 4, 1000) plt.plot(x, norm.pdf(x), b-, lw3, alpha0.6, label理论PDF) # 添加关键区域标记 plt.fill_between(x[x-1], norm.pdf(x[x-1]), colorred, alpha0.3) plt.fill_between(x[x1], norm.pdf(x[x1]), colorred, alpha0.3) plt.axvline(0, colork, linestyle--) plt.title(标准正态分布可视化, fontsize15) plt.xlabel(Z值, fontsize12) plt.ylabel(概率密度, fontsize12) plt.grid(True, linestyle--, alpha0.5) plt.legend(fontsize12)这个图特别适合给非技术人员讲解红色区域表示±1个标准差外的概率约32%直观展示大部分数据集中在中间的特点。如果要做更专业的图表可以叠加CDF曲线plt.plot(x, norm.cdf(x), g--, label累积分布)4. 实际应用案例去年做用户行为分析时我发现用户日均使用时长看似符合正态分布但直接建模效果不好。后来用QQ图检验才发现两端有偏离import scipy.stats as stats stats.probplot(data, distnorm, plotplt) plt.show()解决方法是对数据做Box-Cox变换transformed, _ stats.boxcox(data 1) # 加1避免0值另一个常见应用是异常值检测。我们系统设置报警规则时用标准正态的3σ原则z_scores (data - np.mean(data)) / np.std(data) outliers np.where(np.abs(z_scores) 3)但要注意金融数据经常有厚尾现象这时单纯用正态分布会低估极端风险。我的经验是先用可视化工具确认分布形态再决定是否使用标准正态假设。

更多文章