常用【描述性統計指標】含義(by python)

wang_yb發表於2023-11-30

統計學有時候會被誤解,好像必須有大量的樣本資料,才能使統計結果有意義。
這會讓我們覺得統計學離我們的日常生活很遙遠。

其實,如果資料的準確度高的話,少量的樣本資料同樣能反映出真實的情況。
比如,很多國家選舉時不斷做的民意調查,一般做到有效樣本1600多份就夠了,不管你是幾千萬人的小國家,還是數億人的大國,調查的樣本數都差不多。

所以,正確地進行統計,即使樣本資料量不大,我們也可以從中提取知識,避免被誤導。
不過,在此之前,我們要能夠清楚地理解統計資料和各種統計指標的含義,以及它們在區分真相和誤導時的作用。

1. 統計是什麼

統計是個很籠統的概念,它涉及到很多事情,簡單來定義它的話,必然會掩蓋很多細節。
統計學可以被認為是處理資料的科學框架,其中包括與資料收集、分析和解釋相關的所有任務。

那麼,什麼是資料
資料是對世界觀察的一般集合,其性質多種多樣,從定性到定量。
比如,研究人員從實驗中收集資料,企業家從使用者那裡收集資料,醫生從病人那裡收集資料等等。

本篇準備介紹一些在分析資料時常用的兩種描述性指標,透過它們來實際的度量資料情況,而不是模凌兩可的描述資料性質。

本文使用的示例資料來自scikit-learn中自帶的糖尿病資料集。

from sklearn.datasets import load_diabetes

# 糖尿病人資料集
ds = load_diabetes(as_frame=True, return_X_y=True, scaled=False)
data = ds[0]

data.head()

image.png
其中一共有400多條資料。
這裡不做糖尿病的分析,只是用這個資料集來演示一些統計學描述指標的計算方式。

2. 集中度指標

首先是集中度指標,它表示資料的“中間”是什麼樣的。
“中間”這個詞是模糊的,我們可以用多種方式來定義中間。

2.1. 平均值

平均值是一種描述性統計量,描述的是資料集中最典型的值。
比如,我們看看示例資料中,糖尿病病人的年齡平均值:

# 獲取年齡列表
ages = data["age"].tolist()

# 年齡之和
sum_ages = sum(ages)
# 人數
num_ages = len(ages)

# 平均年齡
avg_ages = sum_ages / num_ages
avg_ages

# 執行結果
48.51809954751131

這個平均年齡告訴我們,易患糖尿病的“典型”年齡可能是48歲左右

2.2. 中位數

中位數是資料“中間”的另一種定義,它不像平均值那樣需要算術計算。
它只要將資料排序之後,取中間的那個值就行,如果資料集中資料的個數是偶數,則取排序後中間兩個值的平均值。

# 獲取年齡列表
ages = data["age"].tolist()

sorted_ages = sorted(ages)

# 人數
num_ages = len(ages)
mid = int(num_ages / 2)

# 因為人數是偶數,所以中位數是中間兩個數的平均值
med_ages = (sorted_ages[mid - 1] + sorted_ages[mid])/2
med_ages

# 執行結果
50.0

中位數年齡50與上面計算的平均值差別不大。
有時候,資料集中有一些異常值(極大或極小的值),就會造成中位數平均值差別很大。

異常值一般會對平均值產生不利的影響,而對於中位數來說,一般影響不大。

2.3. 眾數

眾數是資料中出現最頻繁的值,它不像平均值中位數那樣更像資料的“中間”
不過,一個值在資料集中重複出現的次數越多,對平均值的影響就越大,因此,眾數代表了對平均值的最高加權貢獻因素。

# 獲取年齡列表
ages = data["age"].tolist()

ages_count = {}
# 統計每個年齡的個數
for i in ages:
    if i in ages_count:
        ages_count[i] += 1
    else:
        ages_count[i] = 1

# 出現次數最多的年齡
max_age, max_count = 0, 0
for k, v in ages_count.items():
    if v > max_count:
        max_age = k
        max_count = v

print(max_age, max_count)

# 執行結果
53.0 19

眾數也就是出現最多的年齡,是53歲,有19人。
眾數相當接近中位數,這讓我們對於資料的集中趨勢更有信心。

3. 離散度指標

集中度指標讓我們瞭解到資料的“中間”是什麼樣的,而離散度指標則是告訴我們資料“變化”有多大。
離散度指標讓我們可以度量資料的變化程度,哪怕是輕微的變化程度。

3.1. 極差

極差就是資料的最大值與最小值之差,它讓我們瞭解到資料的變化範圍有多大。

# 獲取年齡列表
ages = data["age"].tolist()

# 極差
max(ages) - min(ages)

# 執行結果
60.0

極差60歲,說明糖尿病患者的年齡差距很大,這是一種需要及早預防的疾病。

3.2. 標準差

標準差是對觀察結果分佈的衡量,是對資料與“典型”資料點的偏差程度的度量。
標準差越大,資料在平均值附近的分佈就越分散,反之越集中。

# 標準差計算函式
def stdev(nums):
    diffs = 0
    avg = sum(nums)/len(nums)
    for n in nums:
        diffs += (n - avg)**(2)
    return (diffs/(len(nums)-1))**(0.5)

# 獲取年齡列表
ages = data["age"].tolist()

stdev(ages)

# 執行結果
13.109027822041087

極差看出年齡的差距有60歲,但是標準差只有13歲左右,說明資料還算集中,不是太分散。

3.3. 方差

方差就是標準差的平方,它們幾乎是完全相同的東西。
需要注意的是,方差的單位是原始資料不一樣,而標準差的單位和原始資料一樣。

平均值一樣,方差標準差也會受到異常值的影響。

4. 總結

本篇主要內容包括:

  1. 描述性統計指標分兩種:集中度指標和離散度指標
  2. 描述性統計指標表示資料的簡單摘要
  3. 平均值計算我們資料集的典型值,易受異常值影響
  4. 中位數是資料集排序後的中間值,不易受異常值影響
  5. 眾數是出現次數最多的值
  6. 極差是資料集中最大值和最小值之間的差
  7. 方差標準差表示在平均值附近的波動情況

相關文章