前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python scipy.stats实现各种常见的统计分布

python scipy.stats实现各种常见的统计分布

作者头像
小末快跑
发布2020-07-29 16:59:13
5.3K0
发布2020-07-29 16:59:13
举报
文章被收录于专栏:日常撸知识

python作为数据分析被大家熟悉。scipy作为数据分析包更是被广为熟知,scipy.stats用来做统计分析非常好用。scipy.stats包含了各种连续分布和离散分布模型。这篇小文使用scipy.stats来实现几种常见的统计分布。

---------

1. 伯努利分布:伯努利试验单次随机试验,只有"成功(值为1)"或"失败(值为0)"这两种结果,又名两点分布或者0-1分布。

代码语言:javascript
复制
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']#中文雅黑字体
plt.rcParams['axes.unicode_minus']=False #显示负号X=np.arange(0,2,1)#[0,1)
p=0.7#科比投篮命中率
pList=stats.bernoulli.pmf(X,p)#在离散分布中,请将pmf改为pdf
print(pList)
plt.plot(X,pList,marker='o',linestyle='None')
'''
vlines用于绘制竖直线(vertical lines),
参数说明:vline(x坐标值,y坐标最小值,y坐标最大值)
我们传入的X是一个数组,是给数组中的每个x坐标值绘制直线,
数值线y坐标最小值是0,y坐标最大值是对应的pList中的值'''
plt.vlines(X,(0,0),pList)

plt.xlabel('随机变量:科比投篮1次')
plt.ylabel('概率')
plt.title('伯努利分布:p=%.2f'% p)
plt.show()
代码语言:javascript
复制
stats.bernoulli.pmf(X,p)

用于求概率密度。

假设科比投篮命中率为0.7,一次投篮的伯努利分布如图所示。

2. 二项分布:假设某个试验是伯努利试验,其成功概率用p表示,那么失败的概率为q=1-p。进行n次这样的试验,成功了x次,则失败次数为n-x,二项分布求的是成功x次的概率。

代码语言:javascript
复制
#第1步,定义随机变量:5次抛硬币,正面朝上的次数
n=10  #做某件事的次数,例如科比三分投篮次数
p=0.75 #三分投篮命中率
X=np.arange(0,n+1,1)

#第2步:求对应分布的概率:概率质量函数(PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应的概率
pList=stats.binom.pmf(X,n,p) #在离散分布中,请将pdf改为pmf
print(pList)
#第3步;绘图
plt.plot(X,pList,marker='o',linestyle='None')

plt.vlines(X,0,pList)
#x轴文本
plt.xlabel('随机变量:科比三分投篮命中次数')
#y轴文本
plt.ylabel('二项分布概率')
#标题
plt.title('二项分布:n=%i,p=%.3f'%(n,p))
#显示图形
plt.show()
代码语言:javascript
复制
stats.binom.pmf(X,n,p)

用于求概率密度。二项分布的期望np, 方差np(1-p).

假设科比三分投篮命中率为0.75,10次投篮的二项分布如图所示,投中8次的概率最大。

3. 几何分布(Geometric Distribution):在伯努利试验中,得到一次成功所需要的试验次数X。X的值域是{ 1, 2, 3, ... };在得到第一次成功之前所经历的失败次数Y = X − 1。Y的值域是{ 0, 1, 2, 3, ... }

代码语言:javascript
复制
#第k次做某事,才取得第1次成功
#这里我们想知道5次表白成功的概率
k=5
#做某件事成功的概率,这里假设每次表白成功概率都是60%
p=0.6
X=np.arange(1,k+1,1)
#第2步:#求对应分布的概率:概率质量函数(PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应值的概率
#分别表示表白第1次成功的概率,表白第2次成功的概率,表白第三次成功的概率
pList=stats.geom.pmf(X,p)
print(pList)

plt.plot(X,pList,marker='o',linestyle='None')
plt.vlines(X,0,pList)
#x轴文本
plt.xlabel('随机变量:表白第k次才首次成功')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('几何分布:p=%.2f' %p)
#显示图形
plt.show()
代码语言:javascript
复制
stats.geom.pmf(X,p)

用于求概率密度。几何分布的众数永远是1。

表白第一次就成功的概率最大。

3. 泊松分布:泊松分布适合于描述单位时间内随机事件发生的次数的概率分布。

代码语言:javascript
复制
λ=3 #平均值:机器每周发生3次报警
k=10 #次数,现在想知道每周发生4次事故的概率
#包含了发生0次,1次,2次,3....,10次事故
X=np.arange(0,k+1,1)

#第2步: #求对应分布的概率:概率质量函数(PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应值的概率
#分别表示发生1次,2次,3次,4次事故的概率
pList=stats.poisson.pmf(X,λ)
print(pList)

#第3步:绘图
plt.plot(X,pList,marker='o',linestyle='None')

plt.vlines(X,0,pList)
#x轴文本
plt.xlabel('随机变量:机器每周发生k次事故')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('泊松分布:平均值mu=%i'%λ)
#显示图片
plt.show()
代码语言:javascript
复制
stats.poisson.pmf(X,λ)

用于求概率密度。

泊松分布的期望和方差都是λ。计算下周发生10次的概率几乎为0。

4. 正太分布:(Normal Distribution):

代码语言:javascript
复制
#第1步:定义随机变量:
mu=0 #平均值
sigma=1 #标准差
X=np.arange(-5,5,0.1)
#第2步:概率密度函数(PDF)
y=stats.norm.pdf(X,mu,sigma)#连续分布用pdf,离散分布用pmf
#第3步:绘图
plt.plot(X,y)
plt.xticks(np.arange(-5, 5, 1))
#x轴文本
plt.xlabel('随机变量:x')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('正态分布:$\mu$=%.1f,$\sigma^2$=%.1f'%(mu,sigma))
#网格
plt.grid()
#显示图形
plt.show()
代码语言:javascript
复制
stats.norm.pdf(X,mu,sigma)

用于求概率密度。

如图是一个均值为0,方差为1的标准正太分布。

------End------

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小末快跑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档