You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现Poisson/Gaussian分布并可视化分析入城车流量问题

针对入城车流量分析的Poisson/Gaussian分布实现方案

嘿,作为Python新手能想到用统计分布来分析车流量问题,这个思路超棒!我帮你整理了一个完整的实现方案,包含模拟流量变化、绘制可视化图表和常见分析计算,代码里加了详细注释,你跟着一步步来就行~


1. 所需依赖库

先安装好必要的工具包,打开终端执行:

pip install numpy matplotlib scipy

2. 完整代码实现

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import poisson, norm

# -------------------------- 参数设置 --------------------------
avg_hourly_traffic = 3640  # 白天平均入城车流量(辆/小时)
peak_multiplier = 1.5      # 早高峰峰值是平均流量的倍数
hours = 6                   # 模拟时长:从早高峰到平峰共6小时(7:00-13:00)

# 生成随时间递减的流量均值:早高峰最高,之后线性降到平均值
hourly_means = np.linspace(avg_hourly_traffic * peak_multiplier, avg_hourly_traffic, hours)

# -------------------------- 生成模拟数据 --------------------------
# 用Poisson分布生成每小时的实际车流量(符合计数事件的统计规律)
poisson_traffic = [poisson.rvs(mu=mean, size=100) for mean in hourly_means]  # 每个小时模拟100次流量数据
# 用Gaussian分布近似Poisson(当λ很大时,正态分布N(λ, √λ)可以很好近似)
gaussian_traffic = [norm.rvs(loc=mean, scale=np.sqrt(mean), size=100) for mean in hourly_means]

# -------------------------- 绘制图表 --------------------------
plt.figure(figsize=(12, 8))

# 子图1:早高峰到平峰的流量变化趋势
plt.subplot(2, 2, 1)
plt.plot(range(7, 7+hours), hourly_means, marker='o', color='darkblue')
plt.title('Hourly Average Traffic Trend (7:00-13:00)')
plt.xlabel('Hour of Day')
plt.ylabel('Average Traffic Volume')
plt.grid(True)

# 子图2:早高峰时段(7:00)的流量分布直方图+理论曲线
plt.subplot(2, 2, 2)
peak_traffic = poisson_traffic[0]
plt.hist(peak_traffic, bins=15, density=True, alpha=0.6, color='orange', label='Simulated Traffic')
# 绘制Poisson理论分布曲线
x = np.arange(min(peak_traffic), max(peak_traffic)+1)
plt.plot(x, poisson.pmf(x, mu=hourly_means[0]), 'b-', label='Poisson Distribution')
# 绘制Gaussian近似曲线
x_norm = np.linspace(min(peak_traffic), max(peak_traffic), 100)
plt.plot(x_norm, norm.pdf(x_norm, loc=hourly_means[0], scale=np.sqrt(hourly_means[0])), 'r--', label='Gaussian Approximation')
plt.title('Peak Hour (7:00) Traffic Distribution')
plt.xlabel('Traffic Volume')
plt.ylabel('Probability Density')
plt.legend()
plt.grid(True)

# 子图3:平峰时段(13:00)的流量分布
plt.subplot(2, 2, 3)
flat_traffic = poisson_traffic[-1]
plt.hist(flat_traffic, bins=15, density=True, alpha=0.6, color='green', label='Simulated Traffic')
x = np.arange(min(flat_traffic), max(flat_traffic)+1)
plt.plot(x, poisson.pmf(x, mu=hourly_means[-1]), 'b-', label='Poisson Distribution')
x_norm = np.linspace(min(flat_traffic), max(flat_traffic), 100)
plt.plot(x_norm, norm.pdf(x_norm, loc=hourly_means[-1], scale=np.sqrt(hourly_means[-1])), 'r--', label='Gaussian Approximation')
plt.title('Off-Peak Hour (13:00) Traffic Distribution')
plt.xlabel('Traffic Volume')
plt.ylabel('Probability Density')
plt.legend()
plt.grid(True)

plt.tight_layout()
plt.show()

# -------------------------- 关键分析计算 --------------------------
print("=== 入城车流量分析结果 ===")
# 1. 早高峰时段(7:00)流量超过5500辆的概率
peak_exceed_prob = poisson.sf(5500, mu=hourly_means[0])
print(f"早高峰(7:00)流量超过5500辆的概率: {peak_exceed_prob:.4f}")

# 2. 平峰时段(13:00)流量低于3500辆的概率
flat_below_prob = poisson.cdf(3500, mu=hourly_means[-1])
print(f"平峰(13:00)流量低于3500辆的概率: {flat_below_prob:.4f}")

# 3. 全天6小时的模拟平均流量
avg_simulated = np.mean([np.mean(hour_data) for hour_data in poisson_traffic])
print(f"6小时模拟平均流量: {avg_simulated:.0f}辆/小时(接近设定的平均值{avg_hourly_traffic})")

# 4. 用高斯近似计算平峰流量在3400-3800之间的概率
gaussian_range_prob = norm.cdf(3800, loc=avg_hourly_traffic, scale=np.sqrt(avg_hourly_traffic)) - norm.cdf(3400, loc=avg_hourly_traffic, scale=np.sqrt(avg_hourly_traffic))
print(f"平峰流量在3400-3800之间的概率(高斯近似): {gaussian_range_prob:.4f}")

3. 代码解释与结果说明

  • 参数设置:我们用np.linspace生成了从早高峰峰值到平均流量的递减序列,完美匹配你说的“早高峰峰值高,随后逐渐递减”的场景,你可以随时调整peak_multiplier来模拟不同拥堵程度的高峰。
  • 数据生成:Poisson分布是计数类事件(比如单位时间内的车辆数)的标准统计模型;当平均流量λ很大时,正态分布可以很好地近似Poisson分布,这也是我们同时生成两种数据的原因。
  • 图表绘制:三个子图分别展示了流量趋势、早高峰和平峰的流量分布,你能直观看到模拟数据和理论分布的拟合效果。
  • 分析计算:用scipy.stats里的sf(生存函数,计算P(X>x))和cdf(累积分布函数,计算P(X≤x))直接解决你关心的概率问题,输出结果都做了清晰标注。

4. 新手友好扩展建议

  • 如果你有真实的车流量数据,直接替换poisson_traffic里的模拟数据就行,分析代码不用大改
  • 可以增加晚高峰的流量变化逻辑,比如在17:00左右再设置一个峰值
  • 尝试计算不同置信区间的流量范围,比如95%置信度下的合理流量区间

内容的提问来源于stack exchange,提问作者Giroud2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:25:08