iPAS AI 應用規劃師 中級 科目二 大數據處理分析與應用

pandas 怎麼計算敘述性統計量?

原題 02

使用 Python 的 pandas 套件處理各商品銷售數據(變數為 df)時,若需計算「總銷售額」欄位的敘述性統計量(如平均值、標準差等),應使用下列哪一種語法?

白話

有一個名叫 df 的 pandas DataFrame,裡面有一欄叫「總銷售額」,存放各商品的銷售數字。現在想一口氣看這欄的平均值、標準差、最大值、最小值這些統計摘要。

問你:用 pandas 對某欄位計算敘述性統計量(平均、標準差等),應該用哪一行語法?

點選你的答案。

01 總結

一句話總結

要一次看某欄的平均、標準差、最大最小值等統計摘要,用 df['欄位名'].describe()。這是 pandas 內建的敘述性統計方法,一行搞定。

02 情境

先感受問題:拿到一批銷售數據,第一件事是什麼

嘉誠電商的數據分析師阿雯,剛從資料庫拉出一個 DataFrame,長這樣:

df(部分):
商品名稱   總銷售額
藍牙耳機    58000
無線滑鼠    12000
機械鍵盤   145000
USB集線器   8500
... (共 500 筆)

阿雯想第一眼就知道:這個「總銷售額」欄位的資料分佈狀況怎麼樣?平均賣多少?最高最低差多少?有沒有極端值?

她不想一個一個算,要一行程式碼就看到所有統計摘要。

03 對照

分開算每個統計量有什麼問題

  1. 寫很多行:mean()、std()、min()、max() 各要一行,探索性分析時程式碼堆一堆。
  2. 容易漏看指標:只算平均和標準差,忘了看四分位數(Q1/Q3),資料的偏態就看不出來。
  3. 每換一個欄位就要重複貼:500 個欄位就要貼 500 組程式碼,沒效率。
  4. 沒有格式化輸出:單獨呼叫 mean() 只回傳一個數字,不方便直接對照比較多個指標。
  5. 容易拼錯方法名:每個統計量方法名都不同,初學者容易打錯。
04 解法

describe() 一行看完所有統計摘要

阿雯只需要打一行:

df['總銷售額'].describe()

輸出結果長這樣:

count     500.000000
mean    42350.000000
std     33210.500000
min      1200.000000
25%     15000.000000
50%     38000.000000
75%     62000.000000
max    145000.000000
Name: 總銷售額, dtype: float64

一個輸出同時給你:

  • count:非空值筆數
  • mean:平均值
  • std:標準差
  • min / max:最小最大值
  • 25% / 50% / 75%:四分位數(讓你看出資料分佈形狀)

這就是選項 B 講的:df['總銷售額'].describe()

技術版:實際怎麼跑這段程式碼

中級考試大概率會考程式碼跟公式,所以這部分你還是要學。但如果現在學起來很痛苦,可以先跳過,等讀完其他題目回頭再來。

Step 1 純故事版
  1. 有一張叫做 df 的「試算表」,裡面有很多欄
  2. 我們挑出「總銷售額」這一欄
  3. 叫這欄「幫我做個快速健康檢查」
  4. 它就把所有重要數字一次列出來
Step 2 中文 ↔ 程式碼對照
故事程式碼
那張「試算表」df
挑出「總銷售額」這一欄df['總銷售額']
做快速健康檢查.describe()
印出結果print(df['總銷售額'].describe())
Step 3 符號角色表
df
pandas DataFrame,像一張有行列的試算表,存放所有商品資料。
df['總銷售額']
從 df 裡取出「總銷售額」這一欄,得到一個 pandas Series(一維資料結構)。
.describe()
pandas Series 的方法,自動計算 count、mean、std、min、25%、50%、75%、max 八個統計量,一次回傳。
count
非空值(非 NaN)的資料筆數,用來確認這欄有沒有缺失值。
std
標準差(Standard Deviation),衡量數值分散程度,值越大表示銷售額差異越大。
Step 4 完整公式對應

本題考的是語法選擇,沒有需要推導的數學公式。describe() 內部使用的統計公式:

  • mean = Σ(x) / n
  • std = √(Σ(x - mean)² / (n-1))(樣本標準差,pandas 預設 ddof=1)

這兩個公式不需要背,記住「describe() 會幫你算」就夠了。

Step 5 自我複述

蓋住程式碼,用自己的話說出這 3 步:

  1. 用方括號加欄位名稱,從 df 取出那一欄
  2. 在後面接 .describe()
  3. 得到含有 8 個統計量的摘要

講得出來代表這段你會了。

05 陷阱

為什麼其他選項是錯的

Adf['總銷售額'].sum()

字面在說什麼

把「總銷售額」這欄所有數字加總,得到一個數字(全部商品銷售額的總和)。

為什麼不對

sum() 只算「加總」,回傳一個數字,不是統計摘要。題目要的是「平均值、標準差等」多個統計量,sum() 做不到。

誰會選錯

看到「銷售額」就聯想到「加總」的人。注意:題目說的是「敘述性統計量」,不是加總。

Cdf['總銷售額'].sort_values()

字面在說什麼

把「總銷售額」欄的數值從小到大排序。

為什麼不對

sort_values() 是「排序」方法,回傳的是排好順序的資料序列,不計算任何統計量。它改變的是資料的排列順序,跟敘述性統計完全不同用途。

誰會選錯

把「排序」跟「統計」搞混的人,或是想說「排完才能看分佈」的人。排序是資料整理,describe() 才是統計摘要。

Ddf['總銷售額'].stats()

字面在說什麼

用 stats() 方法計算統計量。

為什麼不對

pandas Series 根本沒有 stats() 這個方法。執行會直接拋出 AttributeError。這是個「看起來合理但其實不存在」的假方法,用來測試你是否真的記住正確的 API。

誰會選錯

猜測「stats 就是 statistics 的縮寫,應該是統計方法」的人。pandas 的統計摘要方法名叫 describe(),不叫 stats()。

06 變形

同個考點下次怎麼變形

變形 1

如果想一次看整個 DataFrame 所有數值欄位的統計摘要,怎麼做?

直覺

不只看一欄,要看全部欄位,每欄都要平均、標準差。

答案

直接用 df.describe()(不加欄位名稱),pandas 會自動對所有數值欄位(numeric columns)做統計摘要,輸出是一個矩陣,行是統計量名稱,列是各欄位。

變形 2

describe() 預設不包含類別欄位,怎麼讓它也分析字串欄位?

直覺

「商品名稱」是字串,describe() 預設只看數字,要怎麼看字串欄的統計?

答案

加上 include='all' 參數:df.describe(include='all')。這樣字串欄會顯示 count、unique(獨特值個數)、top(最常出現的值)、freq(最常出現的次數)。

變形 3

只想看平均值和標準差,不要其他統計量,怎麼做?

直覺

describe() 輸出太多了,只要兩個數字。

答案

分別呼叫 df['總銷售額'].mean() 和 df['總銷售額'].std()。或者呼叫 df['總銷售額'].agg(['mean', 'std']),用 agg() 方法指定要計算的統計量清單。

變形 4

describe() 輸出的「50%」是什麼?

直覺

看到「50%」這個奇怪的標籤,不確定是什麼意思。

答案

50% 就是中位數(Median),也是第二個四分位數(Q2)。describe() 用百分位數的格式表示:25% = Q1(下四分位數)、50% = Q2(中位數)、75% = Q3(上四分位數)。看 25% 跟 75% 的差距(IQR),可以判斷資料分佈是否偏斜。

變形 5

計算 DataFrame 中某欄的中位數,應該用什麼語法?

直覺

describe() 有中位數,但如果只要中位數這一個數字?

答案

df['總銷售額'].median()。pandas Series 有直接的 median() 方法,回傳單一數值。對應的方法還有 mean()、std()、var()、min()、max()、sum(),分別計算各統計量。

07 延伸

想再往下看,這 5 個

出處

iPAS 經濟部產業人才能力鑑定 ・ 114 年第二梯次 iPAS AI 應用規劃師 中級 科目二 大數據處理分析與應用 第 2 題

查看官方原文 PDF