泊松分布
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
'''第1步,定义随机变量:1次抛硬币成功指正面朝上记录为1,失败指反面朝上记录为0'''
X = np.arange(0, 2,1)
'''第2步,求对应分布的概率:概率质量函数 (PMF)它返回一个列表,列表中每个元素表示随机变量中对应值的概率'''
p = 0.5 # 硬币朝上的概率
pList = stats.bernoulli.pmf(X, p)
'''第3步,绘图plot默认绘制折线,这里我们只绘制点,所以传入下面的参数:marker:点的形状,值o表示点为圆圈标记(circle marker)linestyle:线条的形状,值None表示不显示连接各个点的折线'''
plt.plot(X, pList, marker='o',linestyle='None')
'''vlines用于绘制竖直线(vertical lines),参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)'''
plt.vlines(X, 0, pList)
plt.xlabel('随机变量:抛硬币1次')
plt.ylabel('概率')
plt.title('伯努利分布:p=%.2f' % p)
plt.show()二项分布
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
#第1步,定义随机变量:5次抛硬币,正面朝上的次数
n = 5 # 做某件事情的次数
p = 0.5 # 做某件事情成功的概率
X = np.arange(0, n+1,1)
#第2步,#求对应分布的概率:概率质量函数 (PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应值的概率
pList = stats.binom.pmf(X, n, p)
#第3步,绘图
'''
plot默认绘制折线,这里我们只绘制点,所以传入下面的参数:
marker:点的形状,值o表示点为圆圈标记(circle marker)
linestyle:线条的形状,值None表示不显示连接各个点的折线
'''
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, pList)
plt.xlabel('随机变量:抛硬币正面朝上次数')
plt.ylabel('概率')
plt.title('二项分布:n=%i,p=%.2f' % (n,p))
plt.show()几何分布
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
'''
第1步,定义随机变量:
首次表白成功的次数,可能是1次,2次,3次等
'''
#第k次做某件事情,才取到第1次成功
#这里我们想知道5次表白成功的概率
k = 5
# 做某件事情成功的概率,这里假设每次表白成功概率都是60%
p = 0.6
X = np.arange(1, k+1,1)
#第2步,#求对应分布的概率:概率质量函数 (PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应值的概率
#分别表示表白第1次才成功的概率,表白第2次才成功的概率,表白第3次才成功的概率,表白第4次才成功的概率,表白第5次才成功的概率
pList = stats.geom.pmf(X,p)
pList
#第3步,绘图
'''
plot默认绘制折线,这里我们只绘制点,所以传入下面的参数:
marker:点的形状,值o表示点为圆圈标记(circle marker)
linestyle:线条的形状,值None表示不显示连接各个点的折线
'''
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, pList)
plt.xlabel('随机变量:表白第k次才首次成功')
plt.ylabel('概率')
plt.title('几何分布:p=%.2f' % p)
plt.show()泊松分布
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
#第一步:定义一个随机变量:已知某个路口发生事故的比例是每天2次,那么在此处一天内发生k次事故的概率是多少
mu=2 #平均值:每天发生2次
k=4 #次数,现在想知道此处每天发生4次事故的概率是多少,包含0,1,2,3,4次事故
X=np.arange(0,k+1,1)
#第二步:#求对应分布的概率:概率质量函数 (PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应值的概率分别表示发生0,1,2,3,4次事故的概率
pList=stats.poisson.pmf(X,mu)
#第三步:绘图
'''
plot默认绘制折线,这里我们只绘制点,所以传入下面的参数:
marker:点的形状,值o表示点为圆圈标记(circle marker)
linestyle:线条的形状,值None表示不显示连接各个点的折线
'''
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,pList)
plt.title('泊松分布:平均值mu=%i' % mu)
plt.xlabel('随机变量:某路口发生k次事故')
plt.ylabel('概率')
plt.show()正态分布
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
'''
第1步,定义随机变量:
'''
mu=0 #平均值
sigma= 1 #标准差
X = np.arange(-5, 5,0.1)
X
#第2步,概率密度函数(PDF)
y=stats.norm.pdf(X,mu,sigma)
#第3步,绘图
'''
plot默认绘制折线
'''
plt.plot(X, y)
plt.xlabel('随机变量:x')
plt.ylabel('概率:y')
plt.title('正态分布:$\mu$=%.1f,$\sigma^2$=%.1f' % (mu,sigma))
plt.grid()
plt.show()幂律分布
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
#第1步,定义随机变量:
a=6
X=np.arange(0,1,0.01)
#第2步,概率密度函数(PDF)
pList=stats.powerlaw.pdf(X,a)
#第三步,绘图
plt.plot(X,pList)
plt.title('幂律分布:a=%i' % a)
plt.xlabel('随机变量:x')
plt.ylabel('概率')
plt.show()
如果你想知道这些分布的具体应用,可以看我写的另一篇文章Wvvi:描述统计之概率分布zhuanlan.zhihu.com