1. 程式人生 > 其它 >【DA】SciPy的統計模組:scipy.stats

【DA】SciPy的統計模組:scipy.stats

技術標籤:DAscipy

SciPy的統計模組是scipy.stats,其中有一個類是連續分佈的實現,一個類是離散分佈的實現。此外,該模組中還有很多用於統計檢驗的函式。

# 匯入包
from scipy import stats
import matplotlib.pyplot as plt

# 1.使用`scipy.stats`包按正態分佈生成隨機數
generated = stats.norm.rvs(size=900)

# 2.用正態分佈去擬合生成的資料,得到其均值和標準差
print("Mean", "Std", stats.norm.fit(
generated)) # Mean Std (-0.027757190138192445, 0.9967355589828278) # 3.偏度(skewness)描述的是概率分佈的偏斜(非對稱)程度。我們來做一個偏度檢驗。 # 該檢驗有兩個返回值,其中第二個返回值為p-value,即觀察到的資料集服從正態分佈的概率,取值範圍為0~1。 print("Skewtest", "pvalue", stats.skewtest(generated)) # Skewtest pvalue SkewtestResult(statistic=-0.4227102833216121, pvalue=0.6725066519280437)
# 因此,該資料集有67%的概率服從正態分佈。 # 4.峰度(kurtosis)描述的是概率分佈曲線的陡峭程度。我們來做一個峰度檢驗。該檢驗與 # 偏度檢驗類似,當然這裡是針對峰度。 print("Kurtosistest", "pvalue", stats.kurtosistest(generated)) # Kurtosistest pvalue KurtosistestResult(statistic=0.6422156432448409, pvalue=0.5207331773445296) # 5.正態性檢驗(normality test)可以檢查資料集服從正態分佈的程度。我們來做一個正態性
# 檢驗。該檢驗同樣有兩個返回值,其中第二個返回值為p-value。 print("Normaltest", "pvalue", stats.normaltest(generated)) # Normaltest pvalue NormaltestResult(statistic=0.5911249160542223, pvalue=0.7441129374456706) # 6.使用SciPy我們可以很方便地得到資料所在的區段中某一百分比處的數值 print("95 percentile", stats.scoreatpercentile(generated, 95)) # 95 percentile 1.6419459784929902 # 7.將前一步反過來,我們也可以從數值1出發找到對應的百分比 print("Percentile at 1", stats.percentileofscore(generated, 1)) # Percentile at 1 84.44444444444444 # 8.使用Matplotlib繪製生成資料的分佈直方圖。 plt.hist(generated) plt.show()

在這裡插入圖片描述
我們經常會遇到兩組資料樣本,它們可能來自不同的實驗,但互相有一些關聯。統計檢驗可以進行樣本比對。scipy.stats模組中已經實現了部分統計檢驗。

另一種筆者喜歡的統計檢驗是scikits.statsmodels.stattools中的Jarque-Bera正態性檢驗。SciKits是Python的小型實驗工具包,它並不是SciPy的一部分。此外還有pandas, 它是scikits.statsmodels 的分支。