穩懋 2025 會計年度的淨利率是多少?我手上有兩張表,一張寫 10.2%,另一張寫 6.5%。
第一個反應通常是:有一張抄錯了。但兩個數字其實都對,問題出在「淨利」指的是哪一個淨利:一張表用的是歸屬母公司淨利,另一張用的可能是含非控制權益的本期淨利。兩個數字各自都對,放進同一張圖就錯了。
前兩篇談的是怎麼看圖、怎麼選圖;這一篇往回退一步,談畫圖之前的那八成功夫。圖會說錯話,多半不是因為畫錯,而是因為表沒整理好。
一、資料從哪裡來:五種來源,五種口徑
這個系列用的是一份半導體產業的資料集,91 家公司、2021 到 2025 五個會計年度。光是這份資料,就來自五種不同的地方。
每一種來源都有自己的口徑:幣別、會計年度、合併或個別報表、實際值或預測值。把不同來源的數字放進同一張表,等於默默假設它們口徑一致,而這個假設通常是錯的。
這有點像把各縣市的「平均房價」放在同一張表比較:有的統計含車位、有的不含,有的是實價登錄、有的是開價,數字排得整整齊齊,卻沒有一欄真的能比。
二、整齊資料:表是給機器讀的
統計學家 Hadley Wickham 在 2014 年把「整齊資料」(tidy data)歸納成三條規則:
一欄一個變數。 營收、淨利、年度各占一欄,不要把 2021、2022、2023 寫成欄名,因為年度是變數,不是欄位。
一列一筆觀察。 一列就是一家公司的一個年度,同一家公司五年就是五列。
一表一種單位。 公司層級的資訊(國家、產業分類)放在主檔,年度數字放在面板,兩者用公司代號串接,不要每張表各存一份分類。
三條規則看起來很普通,但財報資料幾乎都不符合。原因很簡單:財報是給人讀的,畫圖程式要的卻是給機器讀的。
寬表是財報、年報、Excel 最常見的樣子,人眼看起來很方便;但如果要畫「三條線、X 軸是年度」,繪圖程式需要的是一欄年度、一欄營收、一欄公司,也就是長表。長表還有幾個好處:新增一年只是多幾列,不必改欄位;分組加總、跨表合併都很自然。
兩種形狀之間的轉換,在 Python 的 pandas 裡各有一個指令:
# 長 → 寬:pivot(給人看、給報表)
wide = ts.pivot(index="代號", columns="FY", values="營收_USDbn")
# 寬 → 長:melt(給程式畫圖)
long = (wide.reset_index()
.melt(id_vars="代號", var_name="FY", value_name="營收_USDbn"))
# 檢查:來回一次,資料不應該變
back = long.pivot(index="代號", columns="FY", values="營收_USDbn")
assert back.equals(wide)
# 常見錯誤:同一家公司同一年有兩列,pivot 會報錯
dup = ts.duplicated(["代號", "FY"], keep=False)
print(ts[dup]) # 先找出重複,再決定留哪一列如果 pivot 報錯說有重複,代表同一家公司同一年有兩列,這本身就是資料問題;這時候不要用平均把它「抹平」,而是回頭查清楚哪一列才對。另一個小地方是讀檔時要把代號當成文字,否則「2330」會被讀成數字,和「2330.TW」永遠對不上。
三、先檢查,再畫圖:12 項資料檢查
整理好形狀之後,還要檢查內容。我替這份資料集列了 12 項檢查。
跑完一輪,共有 33 項發現,其中嚴重的 3 項、需要注意的 22 項、提示性質的 8 項。最值得記住的一句話是:嚴重的問題都不會讓程式出錯,卻會讓圖說錯話。
涵蓋:哪些公司、哪些年度有資料
做任何面板資料之前,第一張圖應該是涵蓋圖:每一列是一家公司,每一欄是一個年度,每一格只回答一件事,有沒有資料。
這張圖很樸素,卻能一眼看出哪些公司整列空白、哪一年的資料特別少,也就是後面所有加總與平均的「地基」長什麼樣子。
自洽:比率與金額對得上嗎
資料集裡同時存了比率(例如淨利率)與金額(營收、淨利)。用金額重算一次比率,再和資料集裡的比率比對,理論上應該完全一致。
對不上的 14 筆,全部是營收不到 1 億美元的小公司。原因不是算錯,而是精度:比率是用原幣算的,金額卻以「十億美元」為單位、只存到小數點後三位,也就是只精確到 100 萬美元,小公司反推回去就會差。處理方式是比率以原幣計算為準,金額改用「百萬」為單位存。
匯率:資料集用的是哪一種匯率
把「原幣金額 ÷ 美元金額」反推回去,可以得到資料集隱含的匯率。
結果每一年都一樣:新台幣 31.1、日圓 149.6、韓元 1,421、歐元 0.885。這代表資料集用的是固定匯率,而不是每一年的實際匯率。這個發現本身不是錯誤,但它會改變每一張圖的意義,第四節會再談。
四、三個會讓圖說錯話的問題
負權益:兩家公司讓平均 ROE 從 18% 掉到 6%
股東權益報酬率(ROE)等於淨利除以股東權益。Dell 和 HP 長年大量買回庫藏股,帳上權益變成負數,分母為負,ROE 就算出 -240%、-731% 這種沒有意義的數字。81 家公司直接平均,ROE 只有 5.9%,分佈圖的 Y 軸被拉到 -700%,其他公司全擠成一條線;排除這兩家後,79 家的平均是 18.4%,中位數 13.7%。
排除可以,但一定要在圖註寫明排除了誰、為什麼;沒寫出來的排除,就是在挑資料。
面板不平衡:樣本變多,被誤讀成產業成長
在資料補齊之前,2021 年缺了 Apple、Microsoft、Cisco、KLA、Lam Research、Micron、Qualcomm 共 7 家,其中 Apple 和 Microsoft 的營收都是數千億美元。左圖把每一年有資料的公司全部加總,2021 到 2022 年跳了 46%,四年成長 1.97 倍,看起來像一場產業大爆發;但這主要是因為 Apple 和 Microsoft 從 2022 年才「加入」樣本。右圖只用五年都有資料的 73 家,四年成長 1.55 倍。
這是一種組成效果:總數變了,不是因為每個成員變大了,而是因為成員換了。規則很簡單:畫加總或平均的時間序列,只用每一年都有資料的同一批公司(balanced panel)。
固定匯率:成長 2.4 倍,還是 2.15 倍?
資料集用固定匯率 31.1 把新台幣換成美元,好處是美元成長率等於新台幣成長率,看的是公司本業的成長,不受匯率干擾;代價是和公司自己公布的美元數字對不上。以台積電為例,2021 年的營收在資料集裡是 510 億美元,用當年平均匯率換算則是約 568 億美元,差了 10%;結果是,用固定匯率算,台積電 2021 到 2025 年成長 2.4 倍,用當年匯率算是 2.15 倍。
兩個數字都對,只是回答不同的問題:固定匯率回答「公司本業長了多少」,當年匯率回答「美元投資人實際看到多少」。我的決定是保留固定匯率,凡是用到美元金額的圖,頁尾一律註明「以 2025 年平均匯率換算」。
另外兩個不起眼的陷阱
缺值補 0。 研發費用「未揭露」和「研發為零」意義完全不同,把未揭露補成 0,會把平均拉低,讓整個產業看起來不重視研發。
待核數字。 有 23 家公司、45 列資料在備註裡標示「待核」。來不及查核的,要嘛先排除,要嘛加一個欄位標記,讓畫圖的人自己決定要不要用。
五、會計年度:「FY2025」不是同一段時間
Nvidia 的 FY2025 截止在 2025 年 1 月,幾乎就是曆年的 2024 年;Applied Materials 截止在 10 月;台積電則是曆年制,截止在 12 月。把它們放在同一個「2025」上,等於把 9 種不同的 12 個月當成同一年。
處理方式有三個層次:X 軸寫「FY2025」而不是「2025」,讓讀者知道這是會計年度;在資料裡保留每家公司的年度截止日;需要嚴格對齊時,改用季資料自行加總成曆年。
六、把每一個決定都寫下來
資料清理最容易被忽略的產出,不是那張乾淨的表,而是一路上做的決定。
每一個口徑決定都要寫下四件事:問題是什麼、決定是什麼、什麼時候決定的、落實在哪裡。好處是半年後回來看,或者換別人接手,不必重新吵一次;有人問「為什麼這樣算」的時候,也有地方可以指。
用經濟學的話說,決策紀錄是一種降低交易成本的制度:它把一次性的討論變成可以重複使用的共識,讓後來的人不必再付一次談判的成本。
另一份文件是代碼簿(codebook),回答每一欄「是什麼、單位是什麼、怎麼算的」。
沒有代碼簿的圖,讀者無法判斷數字能不能比較。最後一步,是把這些決定寫進一個共用的讀檔函式,所有圖都從同一個入口讀資料:代號一律當文字、產業分類一律從主檔串接、自動標記哪些公司五年資料齊全、哪些數字待核。這樣就不會出現「這張圖用 A 口徑、那張圖用 B 口徑」的情況。
七、為什麼資料清理總是被低估
如果資料清理這麼重要,為什麼它總是被跳過?
第一個原因是看不見。一張漂亮的圖會被轉發、被稱讚,一張乾淨的表沒有人會看到;功勞歸於畫圖的人,清理資料的人只在出錯時才被想起。這是典型的誘因錯置:最重要的工作,回報卻最低。
第二個原因是沒有警報。程式不報錯,人就以為沒問題;負權益、面板不平衡、固定匯率,三個問題都不會讓 pandas 出錯。「沒有錯誤訊息」被當成「沒有錯誤」,這和「沒有收到客訴」被當成「客戶很滿意」是同一種錯覺。
第三個原因是口徑是一種選擇,而選擇需要有人負責。固定匯率還是當年匯率、排除還是保留、歸母淨利還是本期淨利,每一個都沒有標準答案;寫下決定,就等於承認這是一個選擇,而承認選擇,就要為它負責。
資料檢查不是為了讓資料完美,而是為了知道每一張圖的結論在什麼條件下成立,並把這些條件寫在圖上。
結語:三件事
表是給機器讀的。 一欄一變數、一列一觀察、一表一單位。
程式不報錯,不代表資料沒問題。 負權益、面板不平衡、固定匯率,都會讓圖說錯話。
每一個口徑決定都寫下來。 決策紀錄、代碼簿,加上一個共用的讀檔函式。
接下來,這個系列就要進入 FT Visual Vocabulary 的九大類,從離散差異開始。之後每一張圖的頁尾都會出現「以 2025 年平均匯率換算」、「排除……」、「n=……」,那些都是這一篇的決定。
資料來源與說明
Hadley Wickham(2014),〈Tidy Data〉,Journal of Statistical Software 59(10)。
財務數據:91 家公司 FY2021–2025 財報,來源包括公開資訊觀測站、SEC 10-K/20-F 與各公司投資人關係網站;以 2025 年平均匯率換算。
當年匯率:美國聯邦準備理事會 G.5A 年平均匯率。
市場資料:WSTS、SIA;市值:companiesmarketcap.com。














