編程學習網 > 編程語言 > Python > python scipy.stats實現各種常見的統計分布教程
2023
08-23

python scipy.stats實現各種常見的統計分布教程

python作為數據分析被大家熟悉。scipy作為數據分析包更是被廣為熟知,scipy.stats用來做統計分析非常好用。scipy.stats包含了各種連續分布和離散分布模型。這篇小文使用scipy.stats來實現幾種常見的統計分布。

1. 伯努利分布:伯努利試驗單次隨機試驗,只有"成功(值為1)"或"失?。ㄖ禐?)"這兩種結果,又名兩點分布或者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的標準正太分布。

以上就是python scipy.stats實現各種常見的統計分布教程的詳細內容,想要了解更多Python教程歡迎持續關注編程學習網。

掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取