优秀的编程知识分享平台

网站首页 > 技术文章 正文

利用 Python 进行 25 种 常见分布的统计分析实战

nanyue 2025-01-12 17:31:25 技术文章 3 ℃

1. 首先,我们需要导入必要的 Python 库,如 `numpy` 和 `matplotlib.pyplot` 以及 `scipy.stats` 等。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import *

2. 以正态分布为例,我们可以使用 `norm` 函数来生成正态分布的数据。


# 生成正态分布数据
mu = 0  # 均值
sigma = 1  # 标准差
x = np.linspace(norm.ppf(0.01, mu, sigma), norm.ppf(0.99, mu, sigma), 100)
pdf = norm.pdf(x, mu, sigma)



3. 然后,我们可以绘制出正态分布的概率密度函数图像。

# 绘制正态分布图像
plt.plot(x, pdf, 'r-', lw=5, alpha=0.6, label='norm pdf')
plt.title('Normal Distribution')
plt.xlabel('x')
plt.ylabel('Probability Density Function')
plt.legend()
plt.show()


4. 接下来,我们看看二项分布。假设进行多次独立的伯努利试验,每次试验成功的概率为 $p$,试验次数为 $n$,我们可以用 `binom` 函数来处理。

# 二项分布示例
n = 10  # 试验次数
p = 0.3  # 每次试验成功的概率
k = np.arange(0, n + 1)
binomial_pmf = binom.pmf(k, n, p)


5. 绘制二项分布的概率质量函数图像,直观地观察其分布形态。

# 绘制二项分布图像
plt.bar(k, binomial_pmf)
plt.title('Binomial Distribution')
plt.xlabel('Number of Successes')
plt.ylabel('Probability Mass Function')
plt.show()


6. 指数分布也是常见的一种,它常用于描述事件发生的时间间隔。

# 指数分布示例
lam = 0.5  # 速率参数
x_exp = np.linspace(0, 10, 100)
exponential_pdf = expon.pdf(x_exp, scale = 1/lam)


7. 同样,绘制指数分布的概率密度函数图像。

# 绘制指数分布图像
plt.plot(x_exp, exponential_pdf)
plt.title('Exponential Distribution')
plt.xlabel('x')
plt.ylabel('Probability Density Function')
plt.show()

8. 再谈谈伽马分布,它在许多领域都有应用,比如在概率论中与指数分布和卡方分布密切相关。使用 `gamma` 函数来生成伽马分布的数据。

# 伽马分布示例
a = 2.0  # 形状参数
loc = 0.0  # 位置参数
scale = 1.0  # 尺度参数
x_gamma = np.linspace(gamma.ppf(0.01, a, loc, scale), gamma.ppf(0.99, a, loc, scale), 100)
gamma_pdf = gamma.pdf(x_gamma, a, loc, scale)



9. 绘制伽马分布的概率密度函数图像,以更好地理解其分布特征。

# 绘制伽马分布图像
plt.plot(x_gamma, gamma_pdf)
plt.title('Gamma Distribution')
plt.xlabel('x')
plt.ylabel('Probability Density Function')
plt.show()


10. 对于贝塔分布,它常用于表示概率的概率分布情况。以下是使用 `beta` 函数生成贝塔分布数据的示例。

# 贝塔分布示例
a = 2.0
b = 5.0
x_beta = np.linspace(beta.ppf(0.01, a, b), beta.ppf(0.99, a, b), 100)
beta_pdf = beta.pdf(x_beta, a, b)


11. 绘制贝塔分布的概率密度函数图像,展示其分布形态。

# 绘制贝塔分布图像
plt.plot(x_beta, beta_pdf)
plt.title('Beta Distribution')
plt.xlabel('x')
plt.ylabel('Probability Density Function')
plt.show()


12. 卡方分布在统计学的假设检验等方面有重要作用。通过 `chi2` 函数来生成卡方分布的数据。

# 卡方分布示例
df = 5  # 自由度
x_chi2 = np.linspace(chi2.ppf(0.01, df), chi2.ppf(0.99, df), 100)
chi2_pdf = chi2.pdf(x_chi2, df)


13. 绘制卡方分布的概率密度函数图像,帮助理解其特性。

# 绘制卡方分布图像
plt.plot(x_chi2, chi2_pdf)
plt.title('Chi-Square Distribution')
plt.xlabel('x')
plt.ylabel('Probability Density Function')
plt.show()


14. 学生 t 分布在小样本统计推断中经常用到。利用 `t` 函数生成学生 t 分布的数据。

# 学生 t 分布示例
df_t = 10  # 自由度
x_t = np.linspace(t.ppf(0.01, df_t), t.ppf(0.99, df_t), 100)
t_pdf = t.pdf(x_t, df_t)


15. 绘制学生 t 分布的概率密度函数图像,以便直观地观察其分布情况。

# 绘制学生 t 分布图像
plt.plot(x_t, t_pdf)
plt.title('Student\'s t Distribution')
plt.xlabel('x')
plt.ylabel('Probability Density Function')
plt.show()

16. F 分布在方差分析等方面有广泛应用。使用 `f` 函数来生成 F 分布的数据。

# F 分布示例
dfn = 3  # 分子自由度
dfd = 15  # 分母自由度
x_f = np.linspace(f.ppf(0.01, dfn, dfd), f.ppf(0.99, dfn, dfd), 100)
f_pdf = f.pdf(x_f, dfn, dfd)



17. 绘制 F 分布的概率密度函数图像,清晰呈现其分布特征。

# 绘制 F 分布图像
plt.plot(x_f, f_pdf)
plt.title('F Distribution')
plt.xlabel('x')
plt.ylabel('Probability Density Function')
plt.show()


18. 离散均匀分布表示在有限个等可能值上的离散分布。以下是使用 `randint` 函数生成离散均匀分布数据的示例(这里借助 `numpy` 中的 `randint` 函数来模拟)。

# 离散均匀分布示例
low = 1
high = 6
size = 100
discrete_uniform = np.random.randint(low, high + 1, size)


19. 可以通过统计离散均匀分布数据的频率来大致了解其分布情况(这里简单打印出每个值出现的次数)。

# 统计离散均匀分布的频率
unique, counts = np.unique(discrete_uniform, return_counts=True)
for i in range(len(unique)):
    print(f"Value {unique[i]}: Count {counts[i]}")


20. 几何分布用于描述在一系列独立伯努利试验中,首次成功所需的试验次数。使用 `geom` 函数来生成几何分布的数据。

# 几何分布示例
p_geom = 0.2  # 每次试验成功的概率
x_geom = np.arange(1, 10)
geom_pmf = geom.pmf(x_geom, p_geom)

21. 绘制几何分布的概率质量函数图像,展示其分布特点。

# 绘制几何分布图像
plt.bar(x_geom, geom_pmf)
plt.title('Geometric Distribution')
plt.xlabel('Number of Trials until First Success')
plt.ylabel('Probability Mass Function')
plt.show()



22. 负二项分布与几何分布相关,它表示在一系列独立伯努利试验中,成功一定次数所需的试验次数。使用 `nbinom` 函数生成负二项分布的数据。

# 负二项分布示例
n = 5  # 成功的次数
p_nbinom = 0.3  # 每次试验成功的概率
x_nbinom = np.arange(5, 20)
nbinom_pmf = nbinom.pmf(x_nbinom, n, p_nbinom)


23. 绘制负二项分布的概率质量函数图像,以便观察其分布规律。

# 绘制负二项分布图像
plt.bar(x_nbinom, nbinom_pmf)
plt.title('Negative Binomial Distribution')
plt.xlabel('Number of Trials')
plt.ylabel('Probability Mass Function')
plt.show()


24. 超几何分布常用于抽样问题,比如从有限总体中抽取一定数量的样本,其中具有特定特征的样本数量的分布。使用 `hypergeom` 函数生成超几何分布的数据。

# 超几何分布示例
M = 100  # 总体中的元素个数
n = 20  # 总体中具有特定特征的元素个数
N = 10  # 抽取的样本大小
x_hypergeom = np.arange(0, n + 1)
hypergeom_pmf = hypergeom.pmf(x_hypergeom, M, n, N)


25. 绘制超几何分布的概率质量函数图像,展现其分布形态。

# 绘制超几何分布图像
plt.bar(x_hypergeom, hypergeom_pmf)
plt.title('Hypergeometric Distribution')
plt.xlabel('Number of Elements with Specific Feature in the Sample')
plt.ylabel('Probability Mass Function')
plt.show()
最近发表
标签列表