python数据分析与应用pdf_Python数据分析|如何在工作生活中应用泊松分布?「附代码」...

主要内容:

一、什么是泊松分布

二、用Python解决实际问题

三、泊松分布的形态变化

泊松分布以法国数学家泊松命名,他在1837年出版了一篇关于泊松分布的论文。

一、什么是泊松分布

泊松分布通常是与固定时间或空间间隔内计数相关的离散分布。比如:

  • 我平均每周写三篇文章,那我下周会写几篇文章?
  • 小明平均一个月健身7次,那下个月他会健身几次?
  • 马路边上平均每1000米停有20辆车,那下一个一千米停了多少辆车?
  • 老板平均一天找我两回,假如我明天翘班,他有多大概率不会发现?

在这两个例子中,每周、每月、每1000米对应着固定的时间或空间,而三篇文章、健身七次、20辆车则对应着在固定时间或空间中的计数。泊松分布描述了在类似情境下不同计数的发生概率

泊松分布对应的概率密度函数为:

63ea1723f89d53c353a3d6733d911028.png

在这里,λ就是我们前边提到的固定时间或空间内的计数的均值,或者叫期望,同时,它还是泊松分布的方差。有了概率密度函数之后,剩下的就是计算了,而计算工作交给计算机来完成再好不过。

在实际生活中,泊松分布的应用面非常广,比如在交通规划中,我们需要判断一个小时内经过某路口的车辆有多少;在地铁站中,我们想知道一个小时内的客流量有多大可能会超出承载能力;在网站运维中,我们要弄清楚流量的峰值可能会是多少,有多大概率会发生这种情况等等。

那么接下来,我们就来看一下它是如何解决实际问题的。

二、用Python解决实际问题

我们先写一个poison_pdf(lamb, k)函数,计算期望为lamb的泊松分布中,刚好计数为k的概率是多少;然后写一个poison_pdf(lamb, k)函数,计算期望为lamb的泊松分布中,计数≤k的概率是多少。

from math import exp, factorial# 概率密度函数def poison_pdf(lamb, k): return lamb ** k * exp(-lamb) / factorial(k) # 累计分布函数def poison_cdf(lamb, k): return sum([poison_pdf(lamb, i) for i in range(k+1)])
74dccee2b88be3275158cf9da21c78ec.png

好,接下来我们来回答刚才的第一个问题:我平均每周写三篇文章,下周我会写几篇?

s = ('一周刚好写{0}篇文章的概率为{1:.2f}%,' '写不超过{2}篇文章的概率为{3:.2f}%')for i in range(11): print(s.format(i, poison_pdf(3, i) * 100, i, poison_cdf(3, i) * 100))
032ddf1ce72c51347fc9aabf4822de15.png

可以看到,我下周有90%+的概率会写不超过5篇文章。但是这样看起来不够直观,我们把它画出来看一下:

import seaborn as snsimport matplotlib.pyplot as pltimport matplotlib as mplfrom matplotlib.ticker import FuncFormattersns.set(style='white')mpl.rcParams['font.family'] = 'sans-serif'mpl.rcParams['font.sans-serif'] = 'WenQuanYi Micro Hei'# 用来将坐标轴数字转换成百分比def to_percent(tmp, position): return '{0:.1f}%'.format(tmp * 100)# 计算概率密度和累积概率密度k = list(range(11))pdf = [poison_pdf(3, i) for i in range(11)]cdf = [poison_cdf(3, i) for i in range(11)]# 绘制概率密度条形图fig, ax1 = plt.subplots(figsize=(10, 6))ax1.bar(k, pdf, color='c')ax1.set_ylabel('概率', fontsize=16)ax1.yaxis.set_major_formatter(FuncFormatter(to_percent))# 绘制累积概率密度曲线ax2 = ax1.twinx()ax2.plot(k, cdf, '-r')ax2.set_ylabel('累积概率', fontsize=16)ax2.yaxis.set_major_formatter(FuncFormatter(to_percent))# 设置标题plt.title('我一周会写几篇文章?', fontsize=20)

这样,看起来就直观多了,我大概率下周会写5篇以内(含)。在下边的作图过程中,我们做了一些细节的调整,这些内容在我之前的文章中都有提到,如果不清楚或者忘记了,可以回去看一下《从零开始学Python可视化》、《一天一图学Python可视化》、《7天学会Python最佳可视化工具Seaborn》三个系列,它们的阅读顺序不分先后,可以随意调整顺序。

52977cf6e424a7efe7eeeacd6db67c65.png
7860fdee550bc8356a998adbc3e03d26.png

三、泊松分布随着λ增大的形态变化

接下来,我们看一下,随着λ的逐渐变大,其概率密度函数的形态会发生什么变化。

import numpy as npxs = np.arange(21)fig, ax = plt.subplots(figsize=(16, 10))for i in range(3, 10): plt.plot(xs, [poison_pdf(i, j) for j in xs],  '-', label=r'$lambda={0}$'.format(i))ax.yaxis.set_major_formatter(FuncFormatter(to_percent))plt.legend();
4bf647119bfe44b4ef962e548932cb37.png

可以看到,随着λ的逐渐增大,泊松分布的概率密度函数形态越来越接近正态分布。

e6c15042993d618c9c76e1612036aa09.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值