資料知識地圖 · 5. 探索分析

5. 探索分析

EDA & Descriptive Statistics

在互動地圖中開啟 回資料知識地圖

觀念教學

拿到資料先別急著建模 — 先「摸熟它」。探索性資料分析(EDA, Exploratory Data Analysis)就是你和資料的第一次深度對話:看長相、找關係、抓異常。

核心觀念

EDA 搭配敘述性統計(Descriptive Statistics)描述資料現況:集中趨勢(平均數、中位數)、離散程度(標準差、四分位距),再用分佈、偏態、CDF/PDF 理解資料長相。目的不是下結論,而是產生假設,決定後續怎麼清理、怎麼建模。這一站的成果,用洞察數量報告品質來衡量。

白話理解

零售團隊拿到兩年銷售資料:先畫直方圖看營收分佈,再算相關看「來客數與營收」是否連動,最後用散佈圖做群聚初探,看客群會不會自然分成幾群。這些圖表匯整起來,就是給老闆看的第一版洞察。

探索的四個動作

  • 看分佈:直方圖、CDF/PDF、偏態,判斷資料長相與是否需要轉換
  • 找關聯:相關係數、交叉分析,找出變數之間的關係
  • 群聚初探:觀察資料是否自然分群,為後續分群建模鋪路
  • 視覺化:圖表傳達初步洞察,匯整成 Dashboard 與報告雛形
🎯 口訣:先描述、再探索 — 看長相、找關係、抓群聚、畫出來。

iPAS 考點

最愛考分析四層次:描述性(發生了什麼)、診斷性(為什麼發生)、預測性(Predictive,接下來會怎樣)、處方性(該怎麼做)。題目給四個部門對營運與銷售資料的分析需求,問哪個最接近預測性分析 — 判斷關鍵字是「預測下一季、估計未來、可能性」;報告歷史現況的是描述性,直接給行動建議的是處方性,別選錯層。

📝 本節掛載 1 題 iPAS 歷屆試題 — 讀完往下到「iPAS 考題練習」直接實戰。

應用場景

分佈分析相關性分析視覺化Dashboard

評估指標

洞察數量報告品質

iPAS 歷屆考題詳解(7 題)

先自行作答,再展開詳解。題目出處均為 iPAS AI 應用規劃師正式考題,著作權屬原主辦單位。

第四梯次初級AI應用規劃師第一科人工智慧基礎概論 第14題

某企業分析團隊正在處理一組近兩年的營運與銷售數據,共有四個部門提出了各自的分析需求,請判斷哪一個最接近「預測性分析(Predictive Analysis)」的特性?

  1. A視覺化所有產品線過去月銷售走勢與標準差,觀察其分佈情況與波動程度
  2. B藉由資料比對分析,找出去年母親節促銷失效的地區與品類組合
  3. C建構模型推算下一季的主力商品銷量,以規劃備貨與倉儲資源配置
  4. D透過熱圖分析廣告投放成本與訂單轉換率之間的潛在關聯性
看正解與逐選項詳解

正解:C

正確答案:(C) 【正解解析】 資料分析依目的可分為描述性(Descriptive)、診斷性(Diagnostic)、預測性(Predictive)與指示性(Prescriptive)四個層次。預測性分析的核心是利用歷史資料建立模型,推估尚未發生的結果。選項 (C) 建構模型推算「下一季」主力商品銷量,並據以規劃備貨與倉儲資源,正是以歷史資料推論未來數值的預測性分析,符合題意。 【為何其他選項錯了?】 - (A):視覺化過去的月銷售走勢與標準差,呈現的是資料「已經發生」的分佈與波動情況,屬於描述性分析,不涉及對未來的推估。 - (B):比對資料找出去年促銷失效的地區與品類組合,是在回答「為什麼發生」,屬於診斷性分析,分析對象仍是過去事件的成因。 - (D):以熱圖檢視廣告投放成本與轉換率的關聯,屬於探索性或診斷性分析,找的是變數之間的既有關聯,並未建立推估未來的模型。 提示:描述性看「發生了什麼」、診斷性問「為什麼發生」、預測性推「將會發生什麼」;題幹出現「推算下一季」即指向預測性分析。
114年第二梯次中級AI應用規劃師第二科大數據處理分析與應用 第2題

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

  1. Adf['總銷售額'].sum()
  2. Bdf['總銷售額'].describe()
  3. Cdf['總銷售額'].sort_values()
  4. Ddf['總銷售額'].stats()
看正解與逐選項詳解

正解:B

正確答案:(B) 【正解解析】 pandas 的 describe() 會一次輸出欄位的敘述性統計量:筆數(count)、平均值(mean)、標準差(std)、最小值、四分位數與最大值,正是題目所需「平均值、標準差等敘述統計」的完整摘要。對數值欄位進行探索性分析時,df['欄位'].describe() 是最直接的方法,一行程式碼即可取得該欄位的整體統計輪廓。 【為何其他選項錯了?】 - (A):sum() 只回傳總和一個數值,屬於聚合運算,無法取得平均值與標準差等統計摘要。 - (C):sort_values() 只是將資料由小到大排序,不會產生任何統計量。 - (D):pandas 的 Series 並沒有 stats() 這個方法,執行會拋出 AttributeError。 提示:要一次取得 count、mean、std、min、四分位數、max,使用 describe()。
114年第二梯次中級AI應用規劃師第二科大數據處理分析與應用 第27題

某金融科技公司分析每日上億筆交易資料,以監控客戶轉帳金額分佈與異常波動。由於資料量極大,為兼顧效率與準確度,團隊決定採用「近似分位數(Approximate Quantile)」方法進行資料摘要統計。下列何者最能正確反映該技術的核心目的?

  1. A確保每個分位值的結果完全精確,即使計算時間較長
  2. B利用機器學習模型預測分位數位置,以減少統計計算量
  3. C僅能對結構化資料進行批次處理,無法應用於即時資料流
  4. D在可容忍誤差範圍內,快速估算分位值以支援即時分析
看正解與逐選項詳解

正解:D

正確答案:(D) 【正解解析】 上億筆資料要計算精確分位數,需要全域排序或多次掃描,在即時監控場景下成本過高。近似分位數演算法(如 t-digest、GK 演算法)以單次掃描、少量記憶體維護資料摘要,在可容忍的誤差範圍內快速估算分位值,以可控的精度損失換取大幅的效能提升,支撐即時分析需求。這正是大數據摘要統計的核心取捨:在誤差可控的前提下優先確保計算效率。 【為何其他選項錯了?】 - (A):「每個分位值完全精確、即使計算時間較長」與近似方法的定位相反;近似分位數的設計目的就是放棄絕對精確以換取效率。 - (B):近似分位數依靠確定性的資料結構與演算法,並具有誤差上界保證,並非以機器學習模型預測分位數位置。 - (C):敘述恰好相反,近似分位數演算法多為單遍(one-pass)串流演算法,本來就是為即時資料流設計,不限於批次處理。 提示:大數據摘要統計的取捨原則:犧牲可控的小誤差,換取串流式、即時、低記憶體的計算能力。
114年第二梯次中級AI應用規劃師第二科大數據處理分析與應用 第45題

某遊戲銷售資料集(DataFrame 變數為 data)包含 Platform(遊戲平台)與 Global_Sales(全球銷售量,單位:百萬份)等欄位。為了觀察各遊戲平台的市場表現,分析師想要統計每個平台的全球銷售總額,並以長條圖呈現。請選出最能正確實現此分析的程式碼。

  1. Adata.groupby("Platform")["Global_Sales"].sum().plot(kind="bar")
  2. Bdata.groupby("Platform")["Global_Sales"].count().plot(kind="bar")
  3. Cdata["Platform"].value_counts().plot(kind="bar")
  4. Ddata.groupby("Platform")["Global_Sales"].mean().plot(kind="bar")
看正解與逐選項詳解

正解:A

正確答案:(A) 【正解解析】 需求可拆成兩步:「每個平台的全球銷售總額」需按 Platform 分組後對 Global_Sales 加總,即 groupby("Platform")["Global_Sales"].sum();「以長條圖呈現」則接上 .plot(kind="bar")。選項 (A) 的分組欄位、聚合函數與圖表型態三個環節皆正確,完整實現題目要求。 【為何其他選項錯了?】 - (B):count() 統計的是每個平台的資料筆數,不是銷售額加總;遊戲款數多不代表銷售總額高,兩者是不同指標。 - (C):value_counts() 同樣只計算 Platform 各值的出現次數,完全沒有使用 Global_Sales 欄位,無法反映銷售金額。 - (D):mean() 計算的是每平台「平均單款銷售量」,不是「銷售總額」;平均值高可能只是款數少,無法反映整體市場規模。 提示:「總額」用 sum()、「筆數」用 count() 或 value_counts()、「平均」用 mean();聚合函數選錯,結果就偏離題目要求。
114年第二梯次中級AI應用規劃師第二科大數據處理分析與應用 第48題

使用行銷資料集 marketing.csv 進行分析,以 df = pd.read_csv("marketing.csv") 載入後,執行 df.describe() 得到以下輸出(數值依序為 youtube、facebook、newspaper、sales 四個欄位): count:200.00、199.00、200.00、200.00 mean:176.451、27.820、36.665、16.827 std:103.025、17.808、26.134、6.261 min:0.84、0.00、0.36、1.92 25%:89.25、11.94、15.30、12.45 50%:179.70、27.00、30.90、15.48 75%:262.59、43.68、54.12、20.88 max:355.68、59.52、136.80、32.40 根據上述結果,下列何者正確?

  1. A資料集個數為 199 筆,變數個數為 4 個
  2. Bsales 變數的中位數是 16.827
  3. Cfacebook 變數的第三四分位數(Q3)是 11.94
  4. Dyoutube 變數的第一四分位數(Q1)是 89.25
看正解與逐選項詳解

正解:D

正確答案:(D) 【正解解析】 describe() 輸出中,youtube 欄位的 25% 列(即第一四分位數 Q1)數值為 89.25,選項 (D) 敘述正確。判讀 describe() 的要領:count 是「非缺失值」筆數,mean 是平均值,50% 是中位數,25% 與 75% 分別對應 Q1 與 Q3。 【為何其他選項錯了?】 - (A):資料集共 200 筆(youtube、newspaper、sales 的 count 皆為 200);facebook 顯示 199 是因為該欄位有 1 個缺失值,不代表整個資料集只有 199 筆。變數個數 4 個正確,但筆數敘述錯誤,整個選項即不成立。 - (B):16.827 是 sales 的平均值(mean);中位數應看 50% 列,其值為 15.48,兩個統計量不可混淆。 - (C):11.94 是 facebook 的 25%(Q1),不是第三四分位數;facebook 的 Q3(75%)是 43.68。 提示:describe() 判讀要領:count 為非缺失筆數、50% 為中位數、25% 與 75% 為 Q1 與 Q3;mean 與中位數是不同統計量。
115年第一次中級AI應用規劃師第二科大數據處理分析與應用 第45題

若分析師想找出「總貢獻營收最高的前 3 名客戶」,下列 Pandas 程式碼何者最為精確且高效?

  1. Adf.sort_values('Revenue', ascending=False).head(3)['CustomerID']
  2. Bdf.groupby('CustomerID')['Revenue'].max().head(3)
  3. Cdf.groupby('CustomerID')['Revenue'].sum().nlargest(3)
  4. Ddf.value_counts('CustomerID').head(3)
看正解與逐選項詳解

正解:C

正確答案:(C) 【正解解析】 「總貢獻營收最高的前 3 名客戶」需要三個步驟:按客戶分組、將各客戶的所有訂單營收加總、取總額最大的前 3 名。df.groupby('CustomerID')['Revenue'].sum() 先計算每位客戶的營收總和,.nlargest(3) 直接回傳最大的三筆;nlargest 在「只取前 K 名」的情境下不必對全部客戶完整排序,效率優於先排序再取頭,語意也最精確。 【為何其他選項錯了?】 - (A):先按單筆 Revenue 排序再取前 3 列,取得的是「單筆金額最大的三筆訂單」對應的客戶;以多筆小額訂單累積出最高總額的客戶會被遺漏,且同一位客戶可能重複出現。 - (B):groupby 後取 max() 計算的是各客戶「單筆最大營收」,不是總貢獻;且 .head(3) 只是取分組結果的前三個(依索引順序),並未依金額排序。 - (D):value_counts('CustomerID') 統計的是每位客戶的訂單筆數,與金額無關;訂單筆數最多不等於營收貢獻最高。 提示:「總和最高前 K 名」的標準寫法:groupby(鍵)[數值].sum().nlargest(K);先分清楚要排序的是單筆、次數還是總額。
115年第一次中級AI應用規劃師第二科大數據處理分析與應用 第46題

若分析師只想計算「Electronics(電子產品)」這個特定分類的平均營收,下列何者為最佳的語法?

  1. Adf[df['Category'] == 'Electronics']['Revenue'].mean()
  2. Bdf['Category' == 'Electronics']['Revenue'].mean()
  3. Cdf.loc['Electronics', 'Revenue'].mean()
  4. Ddf.filter(items=['Electronics'])['Revenue'].mean()
看正解與逐選項詳解

正解:A

正確答案:(A) 【正解解析】 這是標準的布林遮罩(Boolean Masking)寫法:df['Category'] == 'Electronics' 先產生 True/False 序列,df[...] 以此篩出所有電子產品的資料列,再取 ['Revenue'] 欄位計算 .mean(),即得到該分類的平均營收。這是 Pandas 依「欄位值」進行條件篩選最正統的語法。 【為何其他選項錯了?】 - (B):df['Category' == 'Electronics'] 會先計算字串比較 'Category' == 'Electronics',結果為 False,等同於 df[False];Pandas 會嘗試尋找名為 False 的欄位而拋出 KeyError。引號位置不同,語意完全改變。 - (C):df.loc['Electronics', 'Revenue'] 是以「索引標籤」選取資料列,只有當 DataFrame 的索引本身就是 Category 時才成立;對預設整數索引的交易表會拋出 KeyError。 - (D):df.filter(items=['Electronics']) 過濾的是「欄位名稱」而非欄位內的值;資料表中沒有名為 Electronics 的欄位,只會得到空的 DataFrame,無法算出正確的平均營收。 提示:篩選「欄位值」用布林遮罩 df[df['欄']==值];filter 與 loc 依據的是欄位名稱與索引標籤,不能用來篩選內容。

相關節點