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

时间:2022-07-22
本文章向大家介绍python scipy.stats实现各种常见的统计分布,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

---------

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

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()
stats.bernoulli.pmf(X,p)

用于求概率密度。

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

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

#第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()
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, ... }

#第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()
stats.geom.pmf(X,p)

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

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

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

λ=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()
stats.poisson.pmf(X,λ)

用于求概率密度。

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

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

#第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()
stats.norm.pdf(X,mu,sigma)

用于求概率密度。

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

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