Scipy_常见随机分布
Scipy_常见随机分布
Weijia Li
关注公众号,一起学习~
无聊e编程
from scipy.stats import *
import numpy as np
import matplotlib.pyplot as plt
前言
常用的方法
主要公共方法是:
rvs:随机变量
pdf:概率密度函数
pmf:离散变量质量函数
cdf:累积分布函数
sf:生存功能(1-CDF)
ppf:百分比点函数(CDF的逆)
isf:逆生存函数(SF的逆)
统计信息:返回均值,方差,(费舍尔)偏度或(费舍尔)峰度
矩:分布的非中心矩
常见连续变量
1.指数分布
mean,var,skew,kurt=expon.stats(moments='mvsk')
mean,var,skew,kurt#均值,方差,偏度,峰度
(array(1.), array(1.), array(2.), array(6.))
x=np.linspace(expon.ppf(0.01),expon.ppf(0.99),100)
plt.plot(x,expon.pdf(x),'b-',label='pdf')
r=expon.rvs(size=1000)
plt.hist(r,density=True,alpha=0.2)
2.均匀分布
mean,var,skew,kurt=uniform.stats(moments='mvsk')
mean,var,skew,kurt#均值,方差,偏度,峰度
(array(0.5), array(0.08333333), array(0.), array(-1.2))
x=np.linspace(uniform.ppf(0.01),uniform.ppf(0.99),10000)
plt.plot(x,uniform.pdf(x),'b-')
r=uniform.rvs(loc=0,scale=1,size=1000)
plt.hist(r,density=True,alpha=0.5)
3.正态分布
mean,var,skew,kurt=norm.stats(moments='mvsk')
mean,var,skew,kurt#均值,方差,偏度,峰度
(array(0.), array(1.), array(0.), array(0.))
x=np.linspace(norm.ppf(0.01),norm.ppf(0.99),100)
plt.plot(x,norm.pdf(x),'b-')
r=norm.rvs(loc=0,scale=1,size=1000)
plt.hist(r,density=True,alpha=0.2)
4.卡方分布
mean,var,skew,kurt=chi2.stats(df=55,moments='mvsk')
mean,var,skew,kurt#均值,方差,偏度,峰度
(array(55.), array(110.), array(0.38138504), array(0.21818182))
#*度不同
df=40
x=np.linspace(chi2.ppf(0.01,df),chi2.ppf(0.99,df),100)
plt.plot(x,chi2.pdf(x,df),'r-')
y=np.linspace(chi2.ppf(0.01,df+4),chi2.ppf(0.99,df+4),100)
plt.plot(y,chi2.pdf(y,df+4),'g-')
z=np.linspace(chi2.ppf(0.01,df+8),chi2.ppf(0.99,df+8),100)
plt.plot(z,chi2.pdf(z,df+8),'y-')
w=np.linspace(chi2.ppf(0.01,df+12),chi2.ppf(0.99,df+12),100)
plt.plot(w,chi2.pdf(w,df+12),'b-')
#近似正态分布
o=np.linspace(chi2.ppf(0.01,100),chi2.ppf(0.99,100),100)
plt.plot(o,chi2.pdf(o,100),'m+')
r=chi2.rvs(df,size=1000)
plt.hist(r,density=True,alpha=0.2)
5.t分布
mean,var,skew,kurt=t.stats(df=55,moments='mvsk')
mean,var,skew,kurt
(array(0.), array(1.03773585), array(0.), array(0.11764706))
#当n接近60时,t分布近似正态分布(蓝色)
df=55
x=np.linspace(t.ppf(0.01,df),t.ppf(0.99,df),100)
plt.plot(x,t.pdf(x,df),'b-')
#小样本n=9
y=np.linspace(t.ppf(0.01,8),t.ppf(0.99,8),100)
plt.plot(y,t.pdf(x,8),'r-')
#大样本(近似正态分布)
z=np.linspace(t.ppf(0.01,1000),t.ppf(0.99,1000),100)
plt.plot(z,t.pdf(z,1000),'m+')
r=t.rvs(size=1000,df=df)
plt.hist(r,alpha=0.2,density=True)
6.F分布
dfn,dfd=29,18
mean,var,skew,kurt=f.stats(dfn,dfd,moments='mvsk')
mean,var,skew,kurt
(array(1.125), array(0.28055727), array(1.80656765), array(7.07463602))
x=np.linspace(f.ppf(0.01,dfn,dfd),f.ppf(0.99,dfn,dfd),100)
plt.plot(x,f.pdf(x,dfn,dfd),'b-')
r=f.rvs(dfn,dfd,size=1000)
plt.hist(r,density=True,alpha=0.2)
常见离散变量
1.0-1分布(伯努利分布)
p=0.2
mean,var,skew,kurt=bernoulli.stats(p,moments='mvsk')
mean,var,skew,kurt
(array(0.2), array(0.16), array(1.5), array(0.25))
x=np.arange(bernoulli.ppf(0.01,p),bernoulli.ppf(0.99,p)+1)
plt.plot(x,bernoulli.pmf(x,p),'bo',ms=8,lw=1)
plt.vlines(x,0,bernoulli.pmf(x,p),colors='b',lw=4,alpha=0.5)
#十次实验,成功和失败
bernoulli.rvs(p,size=10)
array([1, 0, 0, 0, 1, 0, 0, 1, 1, 0])
2.二项分布
#当n足够大时,近似正态分布
n,p=200,0.4
mean,var,skew,kurt=binom.stats(n,p,moments='mvsk')
mean,var,skew,kurt
(array(80.), array(48.), array(0.02886751), array(-0.00916667))
x=np.arange(binom.ppf(0.01,n,p),binom.ppf(0.99,n,p)+1)
plt.plot(x,binom.pmf(x,n,p),'bo',ms=8,lw=1)
plt.vlines(x,0,binom.pmf(x,n,p),colors='b',lw=4,alpha=0.5)
#十次n为200的伯努利实验,每次的成功实验数
binom.rvs(n,p,size=10)
array([86, 78, 81, 79, 75, 82, 72, 80, 69, 77])
3.几何分布
p=0.50
#概率越小,越密集;概率越大,越疏。
mean,var,skew,kurt=geom.stats(p,moments='mvsk')
mean,var,skew,kurt
(array(2.), array(2.), array(2.12132034), array(6.5))
x=np.arange(geom.ppf(0.01,p),geom.ppf(0.99,p)+1)
plt.plot(x,geom.pmf(x,p),'bo')
plt.vlines(x,0,geom.pmf(x,p),colors='b',alpha=0.2)
#十次实验,成功的次数
geom.rvs(p,size=10)
array([1, 4, 7, 2, 3, 1, 1, 2, 1, 1])
4.超几何分布
#假设我们有20种动物的集合,
#其中7种是狗。然后,如果我们
#想知道如果随机选择20只动物中
#的12只,则发现找到给定数量的
#狗的概率
[M, n, N] = [20, 7, 12]
mean,var,skew,kurt=hypergeom.stats(M,n,N,moments='mvsk')
mean,var,skew,kurt
(array(4.2), array(1.14947368), array(-0.06218122), array(-0.15266106))
x=np.arange(hypergeom.ppf(0.01,M,n,N)-1,hypergeom.ppf(0.99,M,n,N)+1)
plt.plot(x,hypergeom.pmf(x,M,n,N),'bo')
plt.vlines(x,0,hypergeom.pmf(x,M,n,N),'b',lw=2,alpha=0.2)
#进行十次M取N的实验,其中抽到n的次数
hypergeom.rvs(M,n,N,size=10)
array([4, 4, 4, 3, 4, 3, 4, 5, 5, 5])
5.poisson分布
mu=2
mean,var,skew,kurt=poisson.stats(mu,moments='mvsk')
mean,var,skew,kurt
(array(2.), array(2.), array(0.70710678), array(0.5))
x=np.arange(poisson.ppf(0.01,mu),poisson.ppf(0.99,mu)+1)
plt.plot(x,poisson.pmf(x,mu),'bo')
plt.vlines(x,0,poisson.pmf(x,mu),'b',alpha=0.2)
poisson.rvs(mu,size=10)
array([2, 2, 4, 1, 0, 4, 4, 5, 1, 1])
上一篇: python制作多种常用统计图
下一篇: php写的网页计数器代码_PHP教程