statistics --- 數學統計函式

在 3.4 版被加入.

原始碼:Lib/statistics.py


這個模組提供計算數值 (Real-valued) 資料的數學統計函式。

這個模組並非旨在與 NumPySciPy 等第三方函式庫,或者像 Minitab、SAS 和 Matlab 等專門設計給專業統計學家的高階統計軟體互相競爭。此模組的目標在於繪圖和科學計算。

除非特別註明,這些函數支援 intfloatDecimal 以及 Fraction。目前不支援其他型別(無論是否為數值型別)。含有混合型別的資料的集合亦是尚未定義,且取決於該型別的實作。若你的輸入資料含有混合型別,你可以考慮使用 map() 來確保結果是一致的,例如:map(float, input_data)

有些資料集使用 NaN (非數)來表示缺漏的資料。由於 NaN 具有特殊的比較語義,在排序資料或是統計出現次數的統計函數中,會引發意料之外或是未定義的行為。受影響的函數包含 median()median_low()median_high()median_grouped()mode()multimode() 以及 quantiles()。在呼叫這些函數之前,應該先移除 NaN 值:

>>> from statistics import median
>>> from math import isnan
>>> from itertools import filterfalse

>>> data = [20.7, float('NaN'),19.2, 18.3, float('NaN'), 14.4]
>>> sorted(data)  # This has surprising behavior
[20.7, nan, 14.4, 18.3, 19.2, nan]
>>> median(data)  # This result is unexpected
16.35

>>> sum(map(isnan, data))    # Number of missing values
2
>>> clean = list(filterfalse(isnan, data))  # Strip NaN values
>>> clean
[20.7, 19.2, 18.3, 14.4]
>>> sorted(clean)  # Sorting now works as expected
[14.4, 18.3, 19.2, 20.7]
>>> median(clean)       # This result is now well defined
18.75

平均值與中央位置量數

這些函式計算來自一個母體或樣本的平均值或代表值。

mean()

資料的算術平均數(平均值)。

fmean()

快速浮點數算數平均數,可調整權重。

geometric_mean()

資料的幾何平均數。

harmonic_mean()

資料的調和平均數。

kde()

Estimate the probability density distribution of the data.

kde_random()

Random sampling from the PDF generated by kde().

median()

資料的中位數(中間值)。

median_low()

資料中較小的中位數。

median_high()

資料中較大的中位數。

median_grouped()

分組資料的中位數(第 50 百分位數)。

mode()

離散 (discrete) 或名目 (nomial) 資料中的眾數(出現次數最多次的值),只回傳一個。

multimode()

離散或名目資料中的眾數(出現次數最多次的值)組成的 list。

quantiles()

將資料分成數個具有相等機率的區間,即分位數 (quantile)。

離度 (spread) 的測量

這些函式計算母體或樣本偏離平均值的程度。

pstdev()

資料的母體標準差。

pvariance()

資料的母體變異數。

stdev()

資料的樣本標準差。

variance()

資料的樣本變異數。

兩個輸入之間的關係統計

這些函式計算兩個輸入之間的關係統計數據。

covariance()

兩變數的樣本共變異數。

correlation()

Pearson 與 Spearman 相關係數 (correlation coefficient)。

linear_regression()

簡單線性迴歸的斜率和截距。

函式細節

註:這些函數並不要求輸入的資料必須排序過。為了閱讀方便,大部份的範例仍已排序過。

statistics.mean(data)

回傳 data 的樣本算數平均數,輸入可為一個 sequence 或者 iterable。

算數平均數為資料總和除以資料點的數目。他通常被稱為「平均值」,儘管它只是眾多不同的數學平均值之一。它是衡量資料集中位置的一種指標。

data 為空,則會引發 StatisticsError

使用範例:

>>> mean([1, 2, 3, 4, 4])
2.8
>>> mean([-1.0, 2.5, 3.25, 5.75])
2.625

>>> from fractions import Fraction as F
>>> mean([F(3, 7), F(1, 21), F(5, 3), F(1, 3)])
Fraction(13, 21)

>>> from decimal import Decimal as D
>>> mean([D("0.5"), D("0.75"), D("0.625"), D("0.375")])
Decimal('0.5625')

備註

平均值強烈受到離群值 (outliers) 的影響,且不一定能當作這些資料點的典型範例。若要使用更穩健但效率較低的集中趨勢 (central tendency) 度量,請參考 median()

樣本平均數提供了對真實母體平均數的不偏估計 (unbiased estimate),所以從所有可能的樣本中取平均值時,mean(sample) 會收斂至整個母體的真實平均值。若 data 為整個母體而非單一樣本,則 mean(data) 等同於計算真實的母體平均數 μ。

statistics.fmean(data, weights=None)

data 轉換為浮點數並計算其算數平均數。

這個函式運算比 mean() 更快,並且它總是回傳一個 floatdata 可以是一個 sequence 或者 iterable。如果輸入的資料為空,則引發 StatisticsError

>>> fmean([3.5, 4.0, 5.25])