NumPy 泊松分布模拟与 Seaborn 可视化技巧

泊松分布

简介

泊松分布是一种离散概率分布,用于描述在给定时间间隔内随机事件发生的次数。它常用于模拟诸如客户到达商店、电话呼叫接入中心等事件。

参数

泊松分布用一个参数来定义:

λ:事件发生的平均速率,表示在单位时间内事件发生的平均次数。

公式

泊松分布的概率质量函数 (PMF) 给出了在指定时间间隔内发生 k 次事件的概率,计算公式为:

python 复制代码
P(k) = e^(-λ) (λ^k) / k!

其中:

e^(-λ):表示没有事件发生的概率。
(λ^k):表示 k 次事件发生的概率。
k!:表示 k 个元素的阶乘,即 k × (k - 1) × (k - 2) × ... × 2 × 1。

生成泊松分布数据

NumPy 提供了 random.poisson() 函数来生成服从泊松分布的随机数。该函数接受以下参数:

lam:事件发生的平均速率。
size:输出数组的形状。

示例:生成一个平均速率为 5 的事件在 10 个时间间隔内发生的次数:

python 复制代码
import numpy as np

data = np.random.poisson(lam=5, size=10)
print(data)

可视化泊松分布

Seaborn 库提供了便捷的函数来可视化分布,包括泊松分布。

示例:绘制平均速率为 7 的事件在 1000 个时间间隔内发生的次数分布:

python 复制代码
import seaborn as sns
import numpy as np

data = np.random.poisson(lam=7, size=1000)
sns.distplot(data)
plt.show()

正态分布与泊松分布的关系

当事件发生的平均速率 λ 很大时,泊松分布可以近似为正态分布。其均值 μ 为 λ,标准差 σ 为 sqrt(λ)。

示例:比较泊松分布和正态分布的形状:

python 复制代码
import seaborn as sns
import numpy as np

lam = 50

# 生成泊松分布数据
data_poisson = np.random.poisson(lam=lam, size=1000)

# 生成正态分布数据
mu = lam
sigma = np.sqrt(lam)
data_normal = np.random.normal(loc=mu, scale=sigma, size=1000)

sns.distplot(data_poisson, label="Poisson")
sns.distplot(data_normal, label="Normal")
plt.legend()
plt.show()

练习

  1. 在一个小时内,一家商店平均收到 10 位顾客。模拟顾客到达商店的次数并绘制分布图。
  2. 比较不同平均速率下泊松分布形状的变化。
  3. 利用泊松分布来模拟一个呼叫中心每天接到的电话呼叫数量,并计算平均呼叫量和每天接听超过 30 个电话的概率。

解决方案

python 复制代码
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

# 1. 模拟顾客到达商店的次数并绘制分布图
data = np.random.poisson(lam=10, size=1000)
sns.distplot(data)
plt.show()

# 2. 比较不同平均速率下泊松分布形状的变化
lam_values = [5, 10, 20, 50]
for lam in lam_values:
    data = np.random.poisson(lam=lam, size=1000)
    sns.distplot(data, label=f"λ={lam}")
plt.legend()
plt.show()

# 3. 模拟电话呼叫数量并计算平均呼叫量和每天接听超过 30 个电话的概率
calls_per_day = np.random.poisson(lam=150, size=365)
print("平均呼叫量:", calls_per_day.mean())
print("每天接听超过 30 个电话的概率:", (calls_per_day > 30).mean())

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

相关推荐
一只大侠的侠1 小时前
Flutter开源鸿蒙跨平台训练营 Day 10特惠推荐数据的获取与渲染
flutter·开源·harmonyos
寻星探路2 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
ValhallaCoder4 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
wdfk_prog5 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
盟接之桥5 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
猫头虎5 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
忆~遂愿5 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
湘-枫叶情缘6 小时前
1990:种下那棵不落叶的树-第6集 圆明园的对话
linux·系统架构
八零后琐话6 小时前
干货:程序员必备性能分析工具——Arthas火焰图
开发语言·python
草梅友仁6 小时前
墨梅博客 1.4.0 发布与开源动态 | 2026 年第 6 周草梅周报
开源·github·ai编程