資料整理不是「修漂亮」
學習目標:定義資料粒度;區分格式整理與語意品質;建立 raw/staging/clean 三層觀念。
很多人把「資料整理」想成把欄位排整齊、把顏色改一改。但真正決定分析能不能被信任的,是兩個更根本的問題:這份資料的「粒度」是什麼?每一步轉換是不是可以重來一次、得到一樣的結果?
只做格式整理
把欄位名稱改成看起來一致、把數字加上千分位逗號、把空白補成看起來完整;資料看起來乾淨,但沒有人確認過每一列真正代表什麼。
同時檢查語意品質
- 粒度
- 先確認一列代表什麼:一家公司一年一列,還是一個據點一個月一列?
- 層次
- 原始檔案保持不動(raw),轉換過程留在 staging,只有驗證過的結果才進 clean。
- 可重現
- 每一步轉換都寫成程式碼或紀錄,重新執行一次應該得到相同結果。
| 層次 | 內容 | 規則 |
|---|---|---|
| Raw(原始) | 直接從來源取得的檔案,完全不修改 | 永遠保留一份,作為追溯的起點 |
| Staging(處理中) | 型態轉換、清理、reshape 的中間結果 | 可以重新產生;不當作最終結論使用 |
| Clean(乾淨) | 已通過驗證規則的分析資料 | 只有這一層可以直接拿來計算指標 |
- 欄位名稱出現「total」或「avg」,卻沒有人說明是跨哪個維度加總的
- 同一個 company_id 在原始檔案中的列數忽多忽少,卻沒有人解釋原因
- 合併兩個來源之後列數改變了,卻沒有人回頭核對預期列數
import pandas as pd
# raw:完全不修改,先看清楚長什麼樣子
raw = pd.read_csv("DS102_Company_Year_Practice.csv")
raw.shape
raw.head()某分析者把一家公司四個季度的用電量加總成一個年度數字,用來跟另一份「年度」資料比較。兩份資料看起來都是「一年一個數字」,但其中一份其實是四個季度加總而成,另一份是直接量測的年度數據,計算方式不同,直接比較會得出錯誤結論,而程式本身不會報錯。
注意
資訊
一份資料的每一列代表「一家公司一個年度」的紀錄。下列哪一種做法最能保護這個粒度?