【DA】SciPy的統計模組:scipy.stats
阿新 • • 發佈:2021-01-26
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 的分支。