
- SciPy 教程
- SciPy - 首頁
- SciPy - 簡介
- SciPy - 環境設定
- SciPy - 基本功能
- SciPy - 聚類
- SciPy - 常量
- SciPy - FFTpack
- SciPy - Integrate (積分)
- SciPy - Interpolate (插值)
- SciPy - 輸入和輸出
- SciPy - 線性代數 (Linalg)
- SciPy - 影像處理 (Ndimage)
- SciPy - 最佳化 (Optimize)
- SciPy - 統計
- SciPy - 圖論 (CSGraph)
- SciPy - 空間資料處理 (Spatial)
- SciPy - 正交距離迴歸 (ODR)
- SciPy - 特殊函式包 (Special Package)
- SciPy 有用資源
- SciPy - 參考
- SciPy - 快速指南
- SciPy - 有用資源
- SciPy - 討論
SciPy - 統計
所有統計函式都位於子包scipy.stats中,可以使用info(stats)函式獲得這些函式的相當完整的列表。還可以從stats子包的文件字串 (docstring)中獲得可用隨機變數的列表。此模組包含大量機率分佈以及不斷增長的統計函式庫。
每個單變數分佈都有其自己的子類,如下表所述:
序號 | 類和描述 |
---|---|
1 | rv_continuous 一個通用的連續隨機變數類,用於子類化 |
2 | rv_discrete 一個通用的離散隨機變數類,用於子類化 |
3 | rv_histogram 根據直方圖生成分佈 |
正態連續隨機變數
隨機變數X可以取任何值的機率分佈是連續隨機變數。location (loc)關鍵字指定均值。scale (scale)關鍵字指定標準差。
作為rv_continuous類的例項,norm物件繼承了一組通用方法,並用此特定分佈的細節補充它們。
要計算多個點的CDF,我們可以傳遞列表或NumPy陣列。讓我們考慮以下示例。
from scipy.stats import norm import numpy as np print norm.cdf(np.array([1,-1., 0, 1, 3, 4, -2, 6]))
上述程式將生成以下輸出。
array([ 0.84134475, 0.15865525, 0.5 , 0.84134475, 0.9986501 , 0.99996833, 0.02275013, 1. ])
要查詢分佈的中位數,我們可以使用百分位點函式 (PPF),它是CDF的逆函式。讓我們透過以下示例來理解。
from scipy.stats import norm print norm.ppf(0.5)
上述程式將生成以下輸出。
0.0
要生成一系列隨機變數,我們應該使用size關鍵字引數,如下例所示。
from scipy.stats import norm print norm.rvs(size = 5)
上述程式將生成以下輸出。
array([ 0.20929928, -1.91049255, 0.41264672, -0.7135557 , -0.03833048])
上述輸出不可重現。要生成相同的隨機數,請使用seed函式。
均勻分佈
可以使用uniform函式生成均勻分佈。讓我們考慮以下示例。
from scipy.stats import uniform print uniform.cdf([0, 1, 2, 3, 4, 5], loc = 1, scale = 4)
上述程式將生成以下輸出。
array([ 0. , 0. , 0.25, 0.5 , 0.75, 1. ])
構建離散分佈
讓我們生成一個隨機樣本,並將觀察到的頻率與機率進行比較。
二項分佈
作為rv_discrete類的例項,binom物件繼承了一組通用方法,並用此特定分佈的細節補充它們。讓我們考慮以下示例。
from scipy.stats import uniform print uniform.cdf([0, 1, 2, 3, 4, 5], loc = 1, scale = 4)
上述程式將生成以下輸出。
array([ 0. , 0. , 0.25, 0.5 , 0.75, 1. ])
描述性統計
諸如最小值、最大值、均值和方差之類的基本統計資料以NumPy陣列作為輸入,並返回相應的結果。scipy.stats包中提供的一些基本統計函式在以下表格中進行了描述。
序號 | 函式和描述 |
---|---|
1 | describe() 計算傳遞陣列的幾個描述性統計資料 |
2 | gmean() 沿指定軸計算幾何平均值 |
3 | hmean() 沿指定軸計算調和平均值 |
4 | kurtosis() 計算峰度 |
5 | mode() 返回眾數 |
6 | skew() 檢驗資料的偏度 |
7 | f_oneway() 執行單因素方差分析 (ANOVA) |
8 | iqr() 沿指定軸計算資料的四分位距 |
9 | zscore() 計算樣本中每個值的z分數,相對於樣本均值和標準差 |
10 | sem() 計算輸入陣列中值的均值標準誤差(或測量標準誤差) |
其中許多函式在scipy.stats.mstats中都有類似的版本,這些版本適用於掩碼陣列。讓我們透過以下示例來了解這一點。
from scipy import stats import numpy as np x = np.array([1,2,3,4,5,6,7,8,9]) print x.max(),x.min(),x.mean(),x.var()
上述程式將生成以下輸出。
(9, 1, 5.0, 6.666666666666667)
T檢驗
讓我們瞭解T檢驗在SciPy中如何有用。
ttest_1samp
計算一組分數的均值的T檢驗。這是一個針對零假設的雙側檢驗,即獨立觀測樣本“a”的期望值(均值)等於給定的總體均值popmean。讓我們考慮以下示例。
from scipy import stats rvs = stats.norm.rvs(loc = 5, scale = 10, size = (50,2)) print stats.ttest_1samp(rvs,5.0)
上述程式將生成以下輸出。
Ttest_1sampResult(statistic = array([-1.40184894, 2.70158009]), pvalue = array([ 0.16726344, 0.00945234]))
比較兩個樣本
在以下示例中,有兩個樣本,它們可能來自相同的分佈或不同的分佈,我們想要檢驗這些樣本是否具有相同的統計特性。
ttest_ind - 計算兩個獨立樣本分數均值的T檢驗。這是一個針對零假設的雙側檢驗,即兩個獨立樣本具有相同的平均值(期望值)。預設情況下,此檢驗假設總體具有相同的方差。
如果我們觀察到來自相同或不同總體的兩個獨立樣本,我們可以使用此檢驗。讓我們考慮以下示例。
from scipy import stats rvs1 = stats.norm.rvs(loc = 5,scale = 10,size = 500) rvs2 = stats.norm.rvs(loc = 5,scale = 10,size = 500) print stats.ttest_ind(rvs1,rvs2)
上述程式將生成以下輸出。
Ttest_indResult(statistic = -0.67406312233650278, pvalue = 0.50042727502272966)
您可以使用相同長度但均值不同的新陣列測試相同的內容。在loc中使用不同的值並測試相同的內容。