码迷,mamicode.com
首页 > 编程语言 > 详细

Python_Statistics&Probability

时间:2020-04-06 00:00:45      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:histogram   相关   blog   format   details   ima   产生   def   amp   

 

python_statistics and probability

https://blog.csdn.net/howhigh/article/details/78007317 

https://www.jb51.net/article/152713.htm

 

1. 常用的统计分布

用Python统计模拟的方法,介绍四种常用的统计分布,包括离散分布:二项分布和泊松分布,以及连续分布:指数分布和正态分布,最后查看人群的身高和体重数据所符合的分布。
首先导入python相关模块:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
%config InlineBackend.figure_format = retina

随机数
计算机发明后,便产生了一种全新的解决问题的方式:使用计算机对现实世界进行统计模拟。该方法又称为“蒙特卡洛方法(Monte Carlo method)”,起源于二战时美国研制原子弹的曼哈顿计划,它的发明人中就有大名鼎鼎的冯·诺依曼。蒙特卡洛方法的名字来源也颇为有趣,相传另一位发明者乌拉姆的叔叔经常在摩洛哥的蒙特卡洛赌场输钱,赌博是一场概率的游戏,故而以概率为基础的统计模拟方法就以这一赌城命名了。
使用统计模拟,首先要产生随机数,在Python中,numpy.random 模块提供了丰富的随机数生成函数。比如生成0到1之间的任意随机数:

np.random.random(size=5)  # size表示生成随机数的个数

结果:

技术图片Output of random numbers

又比如生成一定范围内的随机整数:

np.random.randint(1, 10, size=5)  # 生成5个1到9之间的随机整数

结果:

技术图片Output of random int 

下面介绍使用python生成pdf的方法:

  1. 使用matplotlib的画图接口plot.hist(),直接画出pdf分布;
  2. 使用numpy的数据处理函数histogram(),可以生成pdf分布数据,方便进行后续的数据处理,比如进一步生成cdf;
  3. 使用seaborn的distplot(),好处是可以进行pdf分布的拟合,查看自己数据的分布类型;
技术图片Plot PDF

技术图片

下面介绍使用python生成cdf的方法:

  1. 使用numpy的数据处理函数histogram(),生成pdf分布数据,进一步生成cdf;
  2. 使用seaborn的cumfreq(),直接画出cdf;
技术图片
from scipy import stats
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

arr = np.random.normal(size=100)

plt.subplot(121)
hist, bin_edges = np.histogram(arr)
cdf = np.cumsum(hist)
plt.plot(cdf)

plt.subplot(122)
cdf = stats.cumfreq(arr)
plt.plot(cdf[0])

plt.show()
Plot CDF

技术图片

 

 

 在更多时候,需要把pdf和cdf放在一起,可以更好的显示数据分布。

技术图片
from scipy import stats
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

arr = np.random.normal(size=100)

hist, bin_edges = np.histogram(arr)
width = (bin_edges[1] - bin_edges[0]) * 0.8
plt.bar(bin_edges[1:], hist/max(hist), width=width, color=#5B9BD5)

cdf = np.cumsum(hist/sum(hist))
plt.plot(bin_edges[1:], cdf, -*, color=#ED7D31)

plt.xlim([-2, 2])
plt.ylim([0, 1])
plt.grid()

plt.show()
CDF&PDF Consolidation

技术图片

 

 

1) 二项分布

二项分布(伯努利分布)是n个独立的是/非试验中成功的次数的概率分布,其中每次试验的成功概率为p。这是一个离散分布,所以使用概率质量函数(PMF)来表示k次成功的概率:

    技术图片

 

 

 最常见的二项分布就是投硬币问题了,每次投一个硬币,投n次硬币,正面朝上次数就满足该分布。size(投掷次数)可以从10~10000. 看图形的变化。

sample=np.random.binomial(1,0.5,size=100)
plt.hist(sample,bins=50)

技术图片 

 下面我们使用计算机模  拟的方法,产生10000个符合(n,p)的二项分布随机数,相当于进行10000次实验,每次实验投掷了n(10)枚硬币,正面朝上的硬币数就是所产生的随机数。同时使用直方图函数绘制出二项分布的PMF图。

def plot_binomial_PDF(n,p):
    ‘‘‘绘制二项分布的概率质量函数‘‘‘
    sample = np.random.binomial(n,p,size=10000)  # 产生10000个符合二项分布的随机数
    bins = np.arange(n+2) 
    plt.hist(sample, bins=bins, align=left, normed=True, rwidth=0.1)  # 绘制直方图
    #设置标题和坐标
    plt.title(Binomial PMF with n={}, p={}.format(n,p))  
    plt.xlabel(number of successes)
    plt.ylabel(probability)
def plot_binomial_CDF(sample):
  hist,bin_edges=np.histogram(sample)
  cdf=np.cumsum(hist)
plt.plot(cdf)
plot_binomial(10, 0.5)
sample=np.random.binomial(10,0.5,size=1000)
plot_binomial_CDF(sample)

技术图片 技术图片

 

 

投10枚硬币,如果正面或反面朝上的概率相同,即p=0.5, 那么出现正面次数的分布符合上图所示的二项分布。该分布左右对称,最有可能的情况是正面出现5次。
但如果这是一枚作假的硬币呢?比如正面朝上的概率p=0.2,或者是p=0.8,又会怎样呢?我们依然可以做出该情况下的PMF图。

技术图片 

这时的分布不再对称了,正如我们所料,当概率p=0.2时,正面最有可能出现2次;而当p=0.8时,正面最有可能出现8次。

二项分布的例子:抛掷10次硬币,恰好两次正面朝上的概率是多少? -技术图片-> k=2, n = 10, p=0.5  

 1 def binom_pmf():
 2     n = 10           #独立实验次数
 3     p = 0.5           #每次正面朝上概率
 4     k = np.arange(0,11)   #0-10次正面朝上概率
 5     binomial = stats.binom.pmf(k,n,p)
 6     print(binomial)
 7     print(sum(binomial))
 8     print(binomial[2])
 9     plt.plot(k, binomial,o-)
10     plt.title(Binomial: n=%i , p=%.2f % (n,p),fontsize=15)
11     plt.xlabel(Number of successes)
12     plt.ylabel(Probability of success,fontsize=15)
13     plt.show()    
技术图片
[0.00097656 0.00976563 0.04394531 0.1171875  0.20507813 0.24609375
 0.20507813 0.1171875  0.04394531 0.00976563 0.00097656]
1.0000000000000009
0.04394531249999999
Output

技术图片

 

 

 

 

 2) 泊松分布

泊松分布用于描述单位时间内随机事件发生次数的概率分布,它也是离散分布,其概率质量函数PMF为:

    技术图片

 

比如你在等公交车,假设这些公交车的到来是独立且随机的(当然这不是现实),前后车之间没有关系,那么在1小时中到来的公交车数量就符合泊松分布。同样使用统计模拟的方法绘制该泊松分布,这里假设每小时平均来6辆车(即上述公式中lambda=6)。

 

Python_Statistics&Probability

标签:histogram   相关   blog   format   details   ima   产生   def   amp   

原文地址:https://www.cnblogs.com/tlfox2006/p/12639874.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!