Python实现概率分布(二项分布、伯努利分布、泊松分布、几何分布、正态分布等)
1.二项分布
#导入包
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
from pylab import mpl
mpl.rcParams[\'font.sans-serif\'] = [\'SimHei\']
#生成一个数组
X1 = np.arange(0, 2, 1)
X1
p1 = 0.5
pList1 = stats.bernoulli.pmf(X1,p1)
pList1
#plot默认绘制折线
#marker:点的形状,值o表示点为圆圈标记(circle marker)
#linestyle:线条的形状,值None表示不显示连接各个点的折线
plt.plot(X1,pList1,marker=\'o\', linestyle=\'None\')
#vlines用于绘制竖直线(vertical lines),
#参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)
#我们传入的X是一个数组,是给数组中的每个x坐标值绘制竖直线,
#竖直线y坐标最小值是0,y坐标值最大值是对应pList1中的值
plt.vlines(X1,0,pList1)
plt.xlabel(\'随机变量:抛1次硬币\')
plt.ylabel(\'概率\')
plt.title(\'伯努利分布: p=%.2f\' % p1)
plt.show()
二项分布
n2 = 5
p2 = 0.5
X2 = np.arange(0, n2+1,1)
X2
pList2 = stats.binom.pmf(X2,n2,p2)
pList2
plt.plot(X2,pList2,marker=\'o\',linestyle=\'None\')
plt.vlines(X2,0,pList2)
plt.xlabel(\'随机变量:抛硬币正面朝上的次数\')
plt.ylabel(\'概率\')
plt.title(\'二项分布: n=%i,p=%.2f\' %(n2,p2))
plt.show()
几何分布
几何分布就是在n次伯努利试验中,试验k次才得到第一次成功的机率。
n2 = 5
p2 = 0.5
X2 = np.arange(0,n2+1,1)
X2
pList2 = stats.binom.pmf(X2,n2,p2)
pList2
plt.plot(X2,pList2,marker=\'o\',linestyle=\'None\')
plt.vlines(X2,0,pList2)
plt.xlabel(\'随机变量:抛硬币正面朝上的次数\')
plt.ylabel(\'概率\')
plt.title(\'二项分布:n=%i,p=%.2f\' % (n2,p2))
plt.show()
泊松分布
泊松分布描述的是已知一段时间内事件发生的平均数,求某个时间内发生的概率。
mu4 = 2
k4 = 4
X4 = np.arange(0, k4+1,1)
X4
pList4 = stats.poisson.pmf(X4,mu4)
pList4
print(\'X4:\',X4)
print(\'pList4\', pList4)
plt.plot(X4,pList4,marker=\'o\',linestyle=\'None\')
plt.vlines(X4,0,pList4)
plt.xlabel(\'某路口发生K次事故\')
plt.ylabel(\'概率\')
plt.title(\'泊松分布:平均值mu=%i\' % mu4)
plt.show()
正态分布
mu5 = 0
sigma = 1
X5 = np.arange(-5,5,0.1)
X5
y = stats.norm.pdf(X5,mu5,sigma)
print(\'X5\',X5)
print(\'y:\',y)
plt.plot(X5,y)
plt.xlabel(\'随机变量:x\')
plt.ylabel(\'概率:y\')
plt.title(\'正态分布:$\mu$=%.1f,$\sigma^2$=%.1f\' %(mu5,sigma))
plt.grid()
plt.show()