包包baobaolin.com
date
entry
035
topic
integration
rev
—

在 UN Comtrade 查台灣:代碼 158 是空的,490 也不保證只有台灣

照 ISO 代碼查台灣,API 回空陣列,不報錯。換成 490 有資料,但這個代碼不保證只有台灣。四個從 API 查出來的陷阱。

查台灣的進出口細項,正規的地方是財政部關務署的海關進出口統計(關港貿單一窗口上的查詢頁)。那一頁要輸入驗證碼,我的腳本不處理驗證碼,所以改用鏡像資料(mirror data):別的國家向聯合國申報「出口到台灣」「從台灣進口」的數字,彙整在 UN Comtrade。

但我第一支查詢回來的是空陣列,狀態碼 200,沒有錯誤訊息。這篇要談的是用程式查 UN Comtrade 的台灣資料時,會讓結果安靜地變少或變多的四個地方:台灣的代碼、490 裡裝了什麼、空陣列代表什麼、跨年加總的報告國。貿易數值打在不用金鑰的公開預覽端點 comtradeapi.un.org/public/v1/preview/C/A/HS(年度、HS 分類;preview 每次最多回 500 筆,我的查詢都在這以下),資料可用性用 getDA,代碼查參考表,時間是 2026 年 10 月 13 日(UTC)。

參考表裡有兩個跟台灣有關的代碼

Comtrade 的國家代碼表 partnerAreas.json 裡,跟台灣有關的有兩列(節錄欄位):

{"PartnerCode": 158, "PartnerDesc": "Taiwan, Province of China",
 "PartnerCodeIsoAlpha2": "TW", "PartnerCodeIsoAlpha3": "TWN", "isGroup": false}
{"PartnerCode": 490, "PartnerDesc": "Other Asia, nes",
 "partnerNote": "Other Asia, not elsewhere specified",
 "PartnerCodeIsoAlpha3": "S19", "isGroup": false}

用 ISO 代碼對應國家的程式,會把 TWN 對到 158。同一個問題用兩個代碼各查一次,馬來西亞(458)2025 年 HS 7213(鐵或非合金鋼的熱軋不規則捲盤條及桿,以下簡稱盤元)的出口:

curl -s 'https://comtradeapi.un.org/public/v1/preview/C/A/HS?reporterCode=458&period=2025&partnerCode=158&cmdCode=7213&flowCode=X'
# {"elapsedTime":"0.63 secs","count":0,"data":[],"error":""}

換成 partnerCode=490,回一筆:淨重 173,529,570 公斤,87,292,150.585 美元。

158 不是只有這一題空。2025 年所有報告國對 158 的出口總額查詢是 0 筆,2015 年與 2024 年所有報告國自 158 的進口也是 0 筆;同樣的 2025 年出口改查 490,有 112 個報告國。Reporters.json 裡沒有 158。(以上都是我這次的查詢結果。)

這一點 UN Comtrade 的說明文件〈Taiwan, Province of China trade data〉寫得很直接:台灣在 reporter 和 partner 都歸在 490「Other Asia, not elsewhere specified」,台灣的資料不包含在中國的數字裡。我一開始是從資料量級推出這件事(2024 年中國申報對 490 出口 751.8 億美元,美國申報自 490 進口 1,187.3 億美元),後來才找到這份說明。先找說明,比從數字猜省事。

490 也可能裝著別的

同一份說明的下一句是:屬於亞洲、但沒有指定國家的地區,貿易資料也可能歸到 490。另一份〈Areas not elsewhere specified〉說明,「未另列明」的夥伴用在低金額貿易、申報國不知道夥伴是誰或指定錯誤,有時也是為了保護公司資訊;而且這類群組的組成會因申報國、年份、商品而不同。

我把 2023 到 2025 年各報告國對 490 的出口排序,2025 年第一名是沙烏地阿拉伯(682):

沙烏地 → 490202320242025
出口總額(美元)5.85 億5.89 億1,548.2 億
沙烏地對全世界出口(美元)(沒查)3,055.0 億3,119.9 億

2025 年那筆約占沙烏地全年出口的 49.6%,其中 HS 27(礦物燃料)就有 1,544 億美元;前一年同一個流向還不到 6 億。這筆是什麼,Comtrade 的資料看不出來:可能是真的對台出口,可能是歸不到國家的貨物,也可能是分類或申報錯誤。我能說的是,它讓 2025 年對 490 的加總多了一千五百多億美元,在弄清楚之前不該直接當成台灣的進口。

所以我現在不直接用 490 的加總,而是逐國看;遇到某國某年大幅跳升,先查它對全世界的總額和商品別,查不清楚就把疑點留著,並把含與不含它的結果都算出來。

空陣列不是零

回到盤元。越南(704)2023 年有一筆對 490 的 HS 7213 出口,2024、2025 年查回來是空陣列。空陣列本身不是零:它是「沒有符合條件的紀錄」,可能是代碼用錯(像上面的 158)、那一年的資料還沒發布、或真的沒有這項貿易。程式把它寫成 0,表格上就會出現一個沒有證據支持的「掉到零」。

要分辨,先查那個報告國那一年的資料集有沒有發布。Comtrade 有一個公開的資料可用性端點:

curl -s 'https://comtradeapi.un.org/public/v1/getDA/C/A/HS?reporterCode=704&period=2023'
# → count 1(Viet Nam,H6,totalRecords 537185,firstReleased 2025-04-15)
curl -s 'https://comtradeapi.un.org/public/v1/getDA/C/A/HS?reporterCode=704&period=2024'
# → {"count":0,"data":[],"error":""}
curl -s 'https://comtradeapi.un.org/public/v1/getDA/C/A/HS?reporterCode=704&period=2025'
# → {"count":0,"data":[],"error":""}

查詢當天取不到越南 2024、2025 年的年度 HS 資料集;馬來西亞 2025 年的有。越南有沒有提交、什麼時候會出來,這個端點回答不了;Comtrade 的〈Data availability〉說明寫,各國資料進來的時間不同,沒有預定的發布日。我能確定的只有:這次越南對 490 的盤元出口查詢,在這兩年是「沒有紀錄」,不是 0。

報告國少了,加總就跟著變

越南不是唯一的缺口。對 490 的年度出口總額(cmdCode=TOTAL&flowCode=X&partnerCode=490)有紀錄的報告國,依不重複的 reporterCode 逐年數下來,金額是 primaryValue 的加總:

年有紀錄的報告國出口加總(美元)
20221473,791 億
20231453,302 億
20241323,323 億
20251125,753 億

2023 年有紀錄、2025 年沒有的報告國有 36 個,越南、阿聯、伊朗、卡達、烏克蘭都在裡面。換句話說,每一年的加總混著好幾件事:真實的貿易變化、這一年有哪些國家的資料、還有像沙烏地那樣的個別大筆紀錄。

我的做法是先取三年都有紀錄的報告國(107 個),只用它們比較:加總是 2,974 億、3,277 億、5,753 億美元。這一步處理的是「誰有資料」,沙烏地三年都在,所以它還在裡面;再把沙烏地三年都拿掉,是 2,968 億、3,271 億、4,205 億。兩種算法都還在上升,所以我不會說趨勢全是蒐集方式做出來的;我能說的是,原始加總的變化不能直接讀成台灣貿易的變化。這和〈分頁上限做出來的假趨勢〉是同一類提醒:先確認每一年算進來的是同一批東西。

我現在查 Comtrade 的檢查清單:台灣用 490,不用 ISO 對應;空陣列不寫成 0,先用 getDA 確認那一年的資料集有沒有發布;跨年比較先固定報告國;加總前先排序看最大的幾筆,大幅跳升的先查,查不清楚就含與不含各算一次。

如果只記得一件事

Comtrade 的空陣列不是零,490 也不保證只有台灣。開頭那支回空陣列的查詢,是因為台灣在這裡的代碼是 490 不是 158;換成 490 之後,數字有了,但要逐國看過、把疑點標出來。鏡像資料來自別國的統計,時間、計價、涵蓋範圍都可能和台灣自己的統計不同;它告訴你哪些報告國有對 490 的出口紀錄,不等於台灣官方的進口額。

修訂紀錄

  1. 首次發布