超几何分布及其在 Python 中的应用

什么是超几何分布?

超几何分布是一种离散概率分布,用于描述在没有替换的情况下,从一个有限的总体中抽取样本的时机的成功概率。它主要用于解决以下类型的问题:从一堆物品中抽取一部分,询问其中有多少个符合特定条件的物品。

超几何分布的公式

超几何分布的概率计算公式如下:

[ P(X = k) = \frac{{\binom{K}{k} \cdot \binom{N-K}{n-k}}}{{\binom{N}{n}}} ]

  • ( N ) 是总体的大小。
  • ( K ) 是总体中成功的物品总数。
  • ( n ) 是抽取的样本大小。
  • ( k ) 是成功的样本数。
  • ( \binom{a}{b} ) 是从 ( a ) 个物品中选取 ( b ) 个物品的组合数。

超几何分布的应用场景

超几何分布被广泛用于生物统计、质量控制、抽样检验、土壤检测等领域。例如,在一个包含 20 个蓝球和 30 个红球的箱子里,假设我们随机抽取 10 个球,那么可以通过超几何分布计算在这 10 个球中恰好有 3 个蓝球的概率。

Python 中的超几何分布

在 Python 中,我们可以使用 SciPy 库来计算超几何分布。首先,我们需要安装 SciPy:

pip install scipy

接下来,我们来看一个代码示例,计算从箱子里抽取蓝球的概率。

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

# 参数设定
N = 50  # 总体大小
K = 20  # 成功的物品个数(蓝球)
n = 10  # 抽取的样本大小
k = np.arange(0, n+1)  # 成功的样本数(从 0 到 n)

# 计算超几何分布概率
pmf = stats.hypergeom.pmf(k, N, K, n)

# 绘制概率分布图
plt.bar(k, pmf, color='blue', alpha=0.7)
plt.title('超几何分布概率分布图')
plt.xlabel('成功的样本数 (k)')
plt.ylabel('概率')
plt.xticks(k)
plt.grid()
plt.show()

这段代码计算并绘制了在不同成功样本数下的超几何分布概率分布图。

饼状图示例

除了概率分布图,饼状图也能清晰地表示不同结果的分布。我们可以利用以下代码生成一个简单的饼状图:

# 准备数据
labels = ['0成功', '1成功', '2成功', '3成功', '4成功', '...']
sizes = pmf * 100  # 将概率转换为百分比

# 绘制饼状图
plt.figure(figsize=(8, 8))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140)
plt.title('抽取结果的饼状图')
plt.axis('equal')
plt.show()

在这个饼状图中,我们可以看到不同成功样本数的相对比例。

甘特图示例

甘特图可用于展示任务的进度或时间段。在这种情况下,我们可以通过如下代码生成一段简单的甘特图:

import matplotlib.dates as mdates
import datetime

# 增加示例数据
tasks = [
    {"task": "任务 A", "start": datetime.datetime(2023, 10, 1), "end": datetime.datetime(2023, 10, 4)},
    {"task": "任务 B", "start": datetime.datetime(2023, 10, 2), "end": datetime.datetime(2023, 10, 5)}
]

# 绘制甘特图
fig, ax = plt.subplots(figsize=(10, 5))
for task in tasks:
    ax.barh(task["task"], (task["end"] - task["start"]).days, left=task["start"].timestamp(), color='skyblue')

ax.xaxis.set_major_locator(mdates.DayLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.title('甘特图示例')
plt.xlabel('日期')
plt.ylabel('任务')
plt.grid(axis='x')
plt.show()

这段代码展示了两个任务的时间安排,清晰地反映了任务的执行顺序和持续时间。

结论

超几何分布是统计学中一个重要的概念,能够帮助我们在没有替换的抽样情境中理解成功事件的概率。通过 Python 中的 SciPy 库,我们可以轻松地计算这种分布并可视化结果,以便更好地理解我们的数据。无论是概率分布图、饼状图还是甘特图,这些可视化工具都能帮助我们更直观地分析和解释数据,进而为决策提供支持。希望这篇文章能够帮助你更好地掌握超几何分布,并在实际应用中活用这一强大工具!