使用 Python 展示统计学中的帕累托分布


帕累托分布是一种幂律概率分布,通常用于描述可测量的现象,例如社会、科学、地球物理或精算数据。它以意大利经济学家、社会学家和土木工程师维尔弗雷多·帕累托的名字命名。帕累托分布常用于模拟各种数据集的分布,例如城市规模、网站流量和科学出版物的引用。

帕累托法则,也称为 80/20 法则,表明在每种场景或系统中,20% 的投入会导致 80% 的产出。Python 提供了各种用于处理概率分布的库,例如 scipy.stats 库。为了在 Python 中计算帕累托分布,可以使用 scipy.stats 库中的 pareto 函数,并将其形状参数 alpha 和尺度参数 xm 作为参数。

语法

以下语法用于从帕累托分布生成 500 个随机数:

import numpy as np
   from scipy.stats import pareto
   data = pareto.rvs(alpha_value, 500, scale_value)
print(np.mean(data))

算法

  • 步骤 1 - 导入库。

  • 步骤 2 - 定义形状参数 (alpha) 和尺度参数 (xm)

  • 步骤 3 - 给出生成随机数的特定大小,并使用 'pareto.rvs' 函数。

  • 步骤 4 - 打印生成的随机数。

方法 1:这里我们使用 scipy.stats 库

示例 1

要从 alpha = 2 和 xm = 1 的帕累托分布生成 500 个随机数,我们可以使用以下代码:

import numpy as np
from scipy.stats import pareto
data = pareto.rvs(2, size=500, scale=1)
print(np.mean(data))

输出

1.9138055526628364

此代码根据数字运算和质数定义的帕累托分布生成 500 个随机数。计算并打印生成的数字的平均值(均值)。这对于组织分布统计数据并在 Python 中执行初步分析很有用。

示例 2

要从 alpha = 3 和 xm = 2 的帕累托分布生成 700 个随机数,我们可以使用以下代码:

import numpy as np
from scipy.stats import pareto
data = pareto.rvs(3, size=700, scale=2)
print(np.median(data))

输出

2.517223926313278

此代码使用帕累托分布生成 700 个随机数,其中大小参数设置为 3,尺度参数设置为 2。计算并打印生成的数字的中位数(中间得分)。这可以用来检查生成的数字的中间数字。

示例 3

要从 alpha = 5 和 xm = 1 的帕累托分布生成 1000 个随机数,我们可以使用以下代码:

import numpy as np
from scipy.stats import pareto
data = pareto.rvs(5, size=1000, scale=1)
print(np.median(data))

输出

1.1557246772718455

在此代码中,从帕累托分布生成 1000 个随机数,大小参数设置为 3,尺度参数设置为 2。在此之后,计算并打印生成的数字的中位数。这给出了生成的数字的中位数。

方法 2:这里我们使用 Numpy 库

示例 1

要从 alpha = 2 和 xm = 1 的帕累托分布生成 500 个随机数,我们可以使用以下代码:

import numpy as np
alpha = 2
xm = 1
size = 500
data = np.random.pareto(alpha, size) + xm
print(np.mean(data))

输出

1.8557392857152564

此代码根据数字运算和质数定义的帕累托分布生成 500 个随机数。它计算并打印生成的数字的平均值(均值)。

示例 2

要从 alpha = 4 和 xm = 2 的帕累托分布生成 500 个随机数,我们可以使用以下代码:

import numpy as np
alpha = 4
xm = 2
size = 500
data = np.random.pareto(alpha, size) + xm
print(np.mean(data))

输出

2.33759634002971

此代码根据数字运算和质数定义的帕累托分布生成 500 个随机数。它计算并打印生成的数字的平均值(均值)。

示例 3

要从 alpha = 4 和 xm = 2 的帕累托分布生成 700 个随机数,我们可以使用以下代码:

import numpy as np
alpha = 4
xm = 2
size = 700
data = np.random.pareto(alpha, size) + xm
print(np.median(data))

输出

2.202691921458917

在此代码中,帕累托分布的 alpha 参数设置为 4,尺度 (xm) 设置为 2。在此之后,生成 700 个随机数,这些随机数根据帕累托分布确定。计算并打印生成的数字的中位数。这给出了生成的数字的中位数。

注意 - 以上所有程序/代码每次都会给出不同的输出,因为它们在程序中生成随机数。

示例 4

在此程序/示例中,我们分别使用 pdf 和 cdf 方法计算帕累托分布的概率密度函数 (PDF) 和累积分布函数 (CDF),并使用 matplotlib 绘制 PDF 和 CDF 以可视化分布。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import pareto
 
alpha = 2  # define shape parameter
xm = 1 	# define scale parameter
 
# Generate random numbers from a Pareto distribution
random_numbers = pareto.rvs(alpha, scale=xm, size=1000)
 
data = np.linspace(pareto.ppf(0.10, alpha, scale=xm), pareto.ppf(0.90, alpha, scale=xm), 100)
pdf = pareto.pdf(data, alpha, scale=xm) # Calculate the PDF
cdf = pareto.cdf(data, alpha, scale=xm) # Calculate the CDF
 
# Plotting the PDF and CDF
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
plt.plot(data, pdf, 'r', lw=2, label='PDF')
plt.xlabel('x')
plt.ylabel('Probability Density')
plt.title('Pareto Distribution PDF')
plt.legend()
 
plt.subplot(1, 2, 2)
plt.plot(data, cdf, 'b', lw=2, label='CDF')
plt.xlabel('x')
plt.ylabel('Cumulative Probability')
plt.title('Pareto Distribution CDF')
plt.legend() 
plt.show()

输出


结论

总之,帕累托分布是一种有效的统计工具,用于模拟具有少量极值和大量较小值的事件。帕累托分布在各个领域都有广泛的应用,因为它可以模拟收入差距、城市规模和其他经济因素。通过使用 Python 模块(如 scipy.stats、Numpy 和 matplotlib),我们可以快速计算、拟合、可视化和分析帕累托分布,并获得对这些情况的重要见解。

更新于: 2023 年 9 月 29 日

699 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告