第 15 章 資料分析:平均數、變異數與標準差¶

(適用:台灣高中~大一;目標:用 SageMath/Python 做描述統計、理解樣本與母體差異,並用視覺化建立直覺)

15.1 本章主旨:把「統計量」變成可計算、可檢查的流程¶

你在高中到大一最常接觸的資料分析(描述統計)包括:

  • 平均數(mean)
  • 變異數(variance)與標準差(standard deviation)
  • 中位數、眾數、四分位數(延伸)
  • 離群值(outliers)與標準化(z-score)

本章會用 SageMath 的計算能力 + Python 的資料處理方式:

  1. 用程式正確計算統計量(避免手算錯)
  2. 用小例子理解公式(尤其母體 vs. 樣本)
  3. 用圖形(直方圖、箱型圖)建立直覺

統計的重點不是「算很快」,而是「知道你算的是什麼」與「解釋得出來」。


15.2 一組資料的基本輸入:list¶

先建立一個示例資料(例如某班 10 位同學的測驗分數):

In [13]:
data = [58, 62, 70, 70, 75, 80, 83, 90, 92, 100]
data
Out[13]:

15.3 平均數:總和除以個數¶

$$ \bar{x} = \frac{1}{n}\sum_{i=1}^n x_i $$

用 Sage/Python 計算:

In [14]:
n = len(data)
mean = sum(data)/n
mean
Out[14]:

加權平均(延伸)¶

若每個數據有權重 $w_i$,加權平均: $$ \bar{x}_w=\frac{\sum w_i x_i}{\sum w_i} $$

例:平時 40%、期中 30%、期末 30%。

In [15]:
scores = [78, 85, 92]       # 平時、期中、期末
weights = [0.4, 0.3, 0.3]
weighted_mean = sum(s*w for s, w in zip(scores, weights))/sum(weights)
weighted_mean
Out[15]:

15.4 變異數與標準差:分散程度¶

核心直覺:

  • 平均數告訴你「中心在哪」
  • 變異數/標準差告訴你「資料散不散」

(A) 母體變異數(population variance)¶

$$ \sigma^2=\frac{1}{n}\sum_{i=1}^n (x_i-\mu)^2 $$

(B) 樣本變異數(sample variance)¶

$$ s^2=\frac{1}{n-1}\sum_{i=1}^n (x_i-\bar{x})^2 $$

差別:樣本用 $n-1$ 是無偏估計(高中不一定要求證明,但要知道用法)。

下面我們兩個都算。

In [16]:
data = [58, 62, 70, 70, 75, 80, 83, 90, 92, 100]
n = len(data)
mean = sum(data)/n

# 母體變異數
var_pop = sum((x-mean)^2 for x in data)/n

# 樣本變異數
var_samp = sum((x-mean)^2 for x in data)/(n-1)

std_pop = sqrt(var_pop)
std_samp = sqrt(var_samp)

mean, var_pop, std_pop.n(), var_samp, std_samp.n()
Out[16]:

重要:標準差是「變異數開根號」,單位會回到原本資料的因次單位。


15.5 用 Sage 的統計函數(依環境)¶

在許多 Sage 環境可以用:

  • mean(data)、variance(data)、std(data)

如果你的環境沒有這些函數,前一節的「自己寫」永遠可用。

我們試著呼叫看看:

In [17]:
reset() #清除之前變數
In [18]:
data = [58, 62, 70, 70, 75, 80, 83, 90, 92, 100]
m2 = mean(data)
v1 = variance(data, bias=False) #樣本變異數
sd1 = std(data, bias=False) #樣本標準差
v2 = variance(data, bias=True) #母體變異數
sd2 = std(data, bias=True) #母體標準差
m2, v1, sd1, v2, sd2
Out[18]:

這裡算出的是平均值,樣本變異數,和樣本標準差。

因為各環境對「母體/樣本」定義可能不同,建議使用指令時先確認,避免誤用。


15.6 中位數、四分位數與箱型圖(視覺化直覺)¶

  • 中位數:排序後中間的位置
  • 四分位數:把資料分成四等分的界點
  • 箱型圖:快速看中心、分散與離群值

先算中位數:

In [19]:
data_sorted = sorted(data)
data_sorted
Out[19]:
In [20]:
def median(xs):
    xs = sorted(xs)
    n = len(xs)
    if n % 2 == 1:
        return xs[n//2]
    else:
        return (xs[n//2 - 1] + xs[n//2]) / 2

median(data_sorted)
Out[20]:

統計圖¶

Sage 可以用 list_plot、histogram 等畫圖(不同環境可能略差)。

In [21]:
# 直方圖(若你的環境支援 histogram)
try:
    histogram(data, bins=6).show()
except Exception as e:
    e
No description has been provided for this image

若某些繪圖函數在你的環境不可用,替代的方法是:

  • 先用 list_plot 畫排序後的點
  • 或把資料丟到你熟悉的 Python 套件(例如 matplotlib)做直方圖

下面用 list_plot 畫排序後的分布:

In [22]:
points = [(i+1, x) for i, x in enumerate(sorted(data))]
list_plot(points)
Out[22]:
No description has been provided for this image
In [23]:
# 箱形圖 boxplot
import matplotlib.pyplot as plt

plt.boxplot(data)
plt.title("Boxplot example")
plt.show()
No description has been provided for this image

15.7 離群值與 z-score(標準化)¶

z-score(標準分數): $$ z=\frac{x-\mu}{\sigma} $$ 表示距離平均數多少個標準差。

例:100 分在這組資料的 z-score(用母體標準差)。

In [24]:
x = 100
z = (x - mean(data))/std(data, bias=True)
N(z)
Out[24]:

z-score 的用途:

  • 不同量尺資料的比較(例如不同考試)
  • 判斷離群值(例如 |z|>3 常被視為非常極端)

15.8 兩組資料比較:平均數相同但標準差不同¶

這是統計最重要的觀念之一:

兩組資料平均數一樣,分散程度仍可能完全不同。

我們做兩組資料:

  • A:集中在平均附近
  • B:同樣平均但更分散
In [25]:
A = [70, 72, 73, 74, 75, 76, 77, 78, 79, 80]
B = [50, 55, 60, 65, 70, 80, 85, 90, 95, 100]

def pop_stats(xs):
    n = len(xs)
    m = sum(xs)/n
    v = sum((x-m)^2 for x in xs)/n
    return m, v, sqrt(v)

pop_stats(A), pop_stats(B)
Out[25]:
In [26]:
# 用點圖快速看差異
pA = list_plot([(i+1, x) for i, x in enumerate(sorted(A))])
pB = list_plot([(i+1, x) for i, x in enumerate(sorted(B))])
pA + pB
Out[26]:
No description has been provided for this image

15.9(進階)從資料到機率:期望與變異數的連結(連回第 14 章)¶

若 X 是隨機變數: $$ \mathrm{Var}(X)=E[(X-E[X])^2]=E[X^2]-E[X]^2 $$

用一個離散分佈例子驗算: 公平骰子 X:1~6,各 1/6。

In [27]:
# 骰子:Var(X) = E[X^2] - E[X]^2
E1 = sum(k*(1/6) for k in range(1,7))
E2 = sum(k^2*(1/6) for k in range(1,7))
Var = E2 - E1^2
E1, E2, Var, N(Var)
Out[27]:

15.10 本章小結:資料分析的可靠工作流¶

你現在應該能:

  • 用 list 輸入資料並計算平均數(含加權平均)
  • 正確區分母體/樣本變異數,並計算標準差
  • 用排序、點圖、直方圖/箱型圖(若支援)理解分布
  • 用 z-score 做標準化並初步判斷離群值
  • 透過兩組資料比較理解「平均一樣不代表分布一樣」
  • 理解 Var 與期望的關係$E[X^2]-E[X]^2$

練習題(附提示)¶

  1. 計算:資料 [2,4,4,4,5,5,7,9] 的平均數、母體變異數、母體標準差。
    提示:照 15.4 的公式寫。

  2. 同一組資料,算樣本變異數與樣本標準差,並比較與母體版本差異。
    提示:分母用 n-1。

  3. 加權平均:某科目平時 30%、期中 30%、期末 40%,分數分別 70、80、90,求總成績。

  4. z-score:對題目 1 的資料,計算 x=9 的 z-score(用母體標準差),並解釋它代表什麼。

5.(挑戰)資料清理:

若資料中有一筆輸入錯誤(例如 700),請示範如何用程式找出異常值:

提示:用 z-score 或用「與中位數差距」的方式。

下一章(第 16 章)我們會整理「電腦代數系統的應用策略」:
你會學到如何在解題時正確使用 CAS:何時信、何時檢查、如何避免誤用與增根。