伯努利分布
from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(0,2,1)
x
array([0, 1])
# 求對應分布的概率:概率質量函數 (PMF)
p=0.5# 硬幣朝上的概率
df=stats.bernoulli.pmf(x,p)
df
array([0.5, 0.5])
#繪圖
'''vlines用于繪制豎直線(vertical lines),參數說明:vline(x坐標值, y坐標最小值, y坐標值最大值)我們傳入的X是一個數組,是給數組中的每個x坐標值繪制豎直線,豎直線y坐標最小值是0,y坐標值最大值是對應pList中的值'''
plt.plot(x,df,marker='o',linestyle='None')
plt.vlines(x,0,df)
plt.xlabel('隨機變量:拋硬幣1次')
plt.ylabel('概率')
plt.title('伯努利分布:p=%.2f' % p)
plt.show()
二項分布
'''
arange用于生成一個等差數組,arange([start, ]stop, [step, ]
'''
#第1步,定義隨機變量:5次拋硬幣,正面朝上的次數
n = 5 # 做某件事情的次數
p = 0.5 # 做某件事情成功的概率
X = np.arange(0, n+1,1)
X
array([0, 1, 2, 3, 4, 5])
#第2步,#求對應分布的概率:概率質量函數 (PMF)
#它返回一個列表,列表中每個元素表示隨機變量中對應值的概率
pList = stats.binom.pmf(X, n, p)
pList
array([ 0.03125, 0.15625, 0.3125 , 0.3125 , 0.15625, 0.03125])
#第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()
幾何分布
'''
arange用于生成一個等差數組,arange([start, ]stop, [step, ]
'''
'''
第1步,定義隨機變量:
首次表白成功的次數,可能是1次,2次,3次等
'''
#第k次做某件事情,才取到第1次成功
#這里我們想知道5次表白成功的概率
k = 5
# 做某件事情成功的概率,這里假設每次表白成功概率都是60%
p = 0.6
X = np.arange(1, k+1,1)
X
array([1, 2, 3, 4, 5])
'''
幾何分布官方使用文檔:
'''
#第2步,#求對應分布的概率:概率質量函數 (PMF)
#它返回一個列表,列表中每個元素表示隨機變量中對應值的概率
#分別表示表白第1次才成功的概率,表白第2次才成功的概率,表白第3次才成功的概率,表白第4次才成功的概率,表白第5次才成功的概率
pList = stats.geom.pmf(X,p)
pList
array([ 0.6 , 0.24 , 0.096 , 0.0384 , 0.01536])
#第3步,繪圖
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()
泊松分布
'''
第1步,定義隨機變量:
已知某路口發生事故的比率是每天2次,
那么在此處一天內發生k次事故的概率是多少?
'''
mu = 2 # 平均值:每天發生2次事故
k=4 #次數,現在想知道每天發生4次事故的概率
#包含了發生0次、1次、2次,3次,4次事故
X = np.arange(0, k+1,1)
X
array([0, 1, 2, 3, 4])
#第2步,#求對應分布的概率:概率質量函數 (PMF)
#它返回一個列表,列表中每個元素表示隨機變量中對應值的概率
#分別表示發生1次,2次,3次,4次事故的概率
pList = stats.poisson.pmf(X,mu)
pList
array([ 0.13533528, 0.27067057, 0.27067057, 0.18044704, 0.09022352])
#第3步,繪圖
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('泊松分布:平均值mu=%i' % mu)
plt.show()
正態分布
'''
arange用于生成一個等差數組,arange([start, ]stop, [step, ]
'''
'''
第1步,定義隨機變量:
'''
mu=0 #平均值
sigma= 1 #標準差
X = np.arange(-5, 5,0.1)
X
array([ -5.00000000e+00, -4.90000000e+00, -4.80000000e+00,
-4.70000000e+00, -4.60000000e+00, -4.50000000e+00,
-4.40000000e+00, -4.30000000e+00, -4.20000000e+00,
-4.10000000e+00, -4.00000000e+00, -3.90000000e+00,
-3.80000000e+00, -3.70000000e+00, -3.60000000e+00,
-3.50000000e+00, -3.40000000e+00, -3.30000000e+00,
-3.20000000e+00, -3.10000000e+00, -3.00000000e+00,
-2.90000000e+00, -2.80000000e+00, -2.70000000e+00,
-2.60000000e+00, -2.50000000e+00, -2.40000000e+00,
-2.30000000e+00, -2.20000000e+00, -2.10000000e+00,
-2.00000000e+00, -1.90000000e+00, -1.80000000e+00,
-1.70000000e+00, -1.60000000e+00, -1.50000000e+00,
-1.40000000e+00, -1.30000000e+00, -1.20000000e+00,
-1.10000000e+00, -1.00000000e+00, -9.00000000e-01,
-8.00000000e-01, -7.00000000e-01, -6.00000000e-01,
-5.00000000e-01, -4.00000000e-01, -3.00000000e-01,
-2.00000000e-01, -1.00000000e-01, -1.77635684e-14,
1.00000000e-01, 2.00000000e-01, 3.00000000e-01,
4.00000000e-01, 5.00000000e-01, 6.00000000e-01,
7.00000000e-01, 8.00000000e-01, 9.00000000e-01,
1.00000000e+00, 1.10000000e+00, 1.20000000e+00,
1.30000000e+00, 1.40000000e+00, 1.50000000e+00,
1.60000000e+00, 1.70000000e+00, 1.80000000e+00,
1.90000000e+00, 2.00000000e+00, 2.10000000e+00,
2.20000000e+00, 2.30000000e+00, 2.40000000e+00,
2.50000000e+00, 2.60000000e+00, 2.70000000e+00,
2.80000000e+00, 2.90000000e+00, 3.00000000e+00,
3.10000000e+00, 3.20000000e+00, 3.30000000e+00,
3.40000000e+00, 3.50000000e+00, 3.60000000e+00,
3.70000000e+00, 3.80000000e+00, 3.90000000e+00,
4.00000000e+00, 4.10000000e+00, 4.20000000e+00,
4.30000000e+00, 4.40000000e+00, 4.50000000e+00,
4.60000000e+00, 4.70000000e+00, 4.80000000e+00,
4.90000000e+00])
#第2步,概率密度函數(PDF)
y=stats.norm.pdf(X,mu,sigma)
#第3步,繪圖
'''
plot默認繪制折線
'''
plt.plot(X, y)
#x軸文本
plt.xlabel('隨機變量:x')
#y軸文本
plt.ylabel('概率:y')
#標題
plt.title('正態分布:$\mu$=%.1f,$\sigma^2$=%.1f' % (mu,sigma))
#網格
plt.grid()
#顯示圖形
plt.show()