這是你覺得好的資料嗎? 台灣(開放)資料平台九大常見問題

五星級開放資料

(這是初稿,持續更動中)

www.google.com 前面的 www 代表 World Wide Web。網路是一項發明,而且發明網路的人 Tim Berners-Lee 還健在。他的另外一項發明是 5 星級開放資料,我們下面就會用這一個標準檢視資料:

一星級的資料:開放授權

make your stuff available on the Web (whatever format) under an open license

(翻譯)資料以開放授權的方式,任意格式釋出

開放授權就像是民主一樣,每一個國家都可以宣稱自己是民主國家。

圖為香港大學校園,對於香港以及北韓民主比較的海報。

在台灣,包含故宮的每一個平台都宣稱自己是開放資料。但其使用條款到底是不是普世相容

解決方法

  • 統一開放資料授權。農委會原本網站上有多個授權,最近把 CC 授權與「政府資料開放平臺資料使用規範」同步。除了同步,也需要檢視現有授權與國際間是否兼容。假如是的話,那是跟哪一種授權相容
  • 折衷方法,假如大家一定要有自己的授權,至少國發會可以請相關法律專家,就該授權到底有什麼使用權限,包含是否再製,是否可商業用途。並且建立一個底線,說假如沒有符合這些條件,就不能稱為開放資料。比方 CC 授權會有 NC (Non-commercial)、BY(Attribution)等。以下為示意表格:
    • data.gov.tw:可商業使用、可重新發布、需標記來源
    • AA 平台:不可商業使用、可重置、需標記來源
    • BB 平台:可商業使用、可重置、需標記姓名、只供學術用途(與國際 Open Data 不相容)
二星級的資料:結構化、機器可讀

make it available as structured data (e.g., Excel instead of image scan of a table)

(翻譯)以機器可讀的結構化資料釋出(Excel 而非圖檔)

機器可讀格式

把資料包在網頁、word 的 doc、docx 檔、pdf 檔、或著以圖檔釋出,像是以下資料: 經濟部工業局禽流感物資

假如使用者要重複使用的話,就需要人一個字一個字 key-in,無法被機器閱讀。這也包含諸如地理資訊以圖磚方式釋出。

會出現這樣的問題,絕大部份是因為政府想要發布這些資訊,只有兼顧「給人看」,但在開放資料中,除了人看,還要「機器看」。

解決方法

  • 立刻可做,公布原始檔:從今開始,要求政府各單位除了「輸出品」,政府應該也要包含「原始檔」,在發佈輸出品的時候,同時讓輸出品可以連到原始檔。

    • 以文字來講 doc 是原始檔,而 pdf 是輸出品。台北市為例
    • pdf 有分兩種,一種是純圖片,另一個可以複製貼上文字,所以後者比前者又稍微好點 (via clkao slideshare)
    • 諸如圖片、影片、照片等製作物。這些東西通常都是外包廠商進行製作,只有最終成果獲得保存。這一個問題是,這些素材通常解析度很低,而且不能被修改。
    • 地理資訊:「圖磚」是輸出品
  • 數位化:許多過去資料具有相當價值,但原始檔已經遺失。比方中選會歷史的選舉資料可能就屬於此類。一個可以參考的方法,是 g0v.tw 零時政府的「政治獻金數位化」專案。

以上是傳統對於第二顆星的看法,就是讓檔案可以讓機器可以打開。但假如要深究「結構化、機器可讀」

二星級的資料隱含標準:一致性

在我們實際操作中,要真正做到「機器可讀」,挑戰在於一致性。是為這個關鍵,讓目前台灣開放資料的機器可讀性只有 25%。

統一資料結構(schema)、格式、編碼、投影

  • 同一筆資料會有不同格式,這些都是標準的格式,包含 csv、tsv (以及其他的 dsv)、xml、json。這些資料分別長得像是這樣子:

  • 編碼:utf-8、utf-16、Big5

  • 地圖投影:經緯度、TWD67、TWD97
  • 同一筆資料,有不同的儲存結構,excel 版本:

  • 同上,json 版本:

儘管這每一個檔案都是機器可讀,但不一樣的格式,會有不一樣的意義。現行問題,是許多檔案沒有標記說背後使用什麼檔案編碼,讓機器不知道該如何解讀:

圖片來源

資料格式錯誤、或著是「太有意見」的資料格式

比較致命的,是有一些單位不了解這些格式而產生誤用:

  • 食藥署,上面標榜著 .csv,但實際上是 .tsv。兩者的原名是 tab separated value 以及 comma separated value。兩者都對機器非常友善,所以用 .tsv 絕對可以,但是掛 .csv,機器就會認定這一個檔案是使用逗點進行區隔。進而造成問題。

    • .tsv: 資料 資料 資料
    • .csv: 資料,資料,資料
  • 接續,食藥署網站上對於 .csv 格式的回覆竟是:

    CSV格式,資料分隔符號為tab(因資料內容易有逗點,故不直接以逗點分隔)

先不論前述名字上的根本錯誤。這裡面更核心的問題,凸顯的是網站不了解技術規範,所以才會有這樣的論述。資料裡面本來就有逗點。所以 .csv 不是只是加上逗點而已,還要把裡面有逗點的欄位 escape。想像你有這樣的資料:

John this is cool 27
Marry Hi, my name is. 28

要化為 .csv 的話,按照食藥署現在的做法,第一筆應該是:John,this is cool,27,第二筆是 Marry,Hi, my name is,28。這樣邊會有問題的地方,ˋ是因為第二筆裡面,有四個逗點。所以機器會以為是四個欄位。但問題是,像這樣這麼常出現的問題,早就有規範了,在這一種情況下,正確的方法應該是 Marry,"Hi, my name is",28,更多可以參考RFC4180

食藥署網站會有這樣的回覆,表示他們缺乏對於這些資料標準的理想,而且認為只要使用一個「比較少出現的分隔符號,像是 tab」就可以解決問題了。問題是沒有解決 escape 的問題,當有一天資料裡面有 tab,格式也會因為同樣的理由爆掉。

同樣 JSON 格式也常常有錯誤。像是文化局裡的資料(資料已移除),字串中間出現換行沒有被 escape,導致錯誤。JS 裡面有內建的 JSON.stringify 應該可以解決。

另外一個問題,是當我們要跨資料集的應用,我們就會需要很多的 overhead 來處理這些資料:

用最間單方式釋放資料,因為我們不知道使用者會怎麼用資料

假如我們不知道使用者會怎麼樣使用資料,用最簡單的格式釋放資料,不要讓我們創意加值變成限制。以金管會的例子,是想像一個全台灣 ATM 位置的資料集。資料擁有單位覺得:「使用者一定是想要查詢最近的 ATM」,所以我們就來做一個你給我經緯度,我給你最近 ATM 位置的 API。但這一個單位在提供這樣的 API 時候,沒有提供原始資料集。原本善意的「想像」,反而變成某一種限制。比方說,下列幾種使用情境就沒有辦法使用:

  • 計算縣市 ATM 的密度
  • 分析不同銀行 ATM 不同區域的佔比
  • 計算 ATM 彼此之間的平均距離

好的地方,當然是不同單位都有在動腦筋,想像這一個資料可以怎麼樣做加值應用。但比起這一件事情更重要的,是我們必須承認我們並不知道最理想的使用情況是什麼,假如我們的想像造成使用者使用上的不便,那就令人相當困擾。

解決方法

  • 把格式說清楚(立刻可做):格式、編碼、以及投影法應該標記清楚。以台北市為例,包含 編碼、投影法、檔案格式都不清楚。
  • 用最簡單的方法提供資料:可以直接釋放原始檔,就不要以 API 的方式提供。
  • 用機器去閱讀所有資料,找出錯誤(短期作法):目前個平台假如真的要持續,應該針對各資料通過「測試」,所以比方說 JSON Lint來測試這些資料是否符合格式,以及平台是否有能力提供正確格式的能力。 SheetHub.com 這一次以機器解析所有 7,000 筆資料的作法,就清楚找出哪些資料編碼格式錯誤。
  • 統一轉換(短期作法):各單位或許個別沒有能力進行格式、編碼轉換,但 SheetHub.com 目前已有「自動轉換」的功能。也就是可以將單一檔案格式(比如 excel),自動轉換為機器可獨的格式,包含 json、csv 等,把 shape 檔轉換為 geojson,並把地理資訊以地圖形式呈現。
  • 資料訓練(短期作法):讓各個維護資料的單位理解頁面標準的資料維護格式。
  • 建立標準格式建議(長期):國發會應該建立一個建議格式,讓不同部門在儲存資料、建立系統的時候可以遵守。就算此系統現階段無法立刻解決問題,但這是可以根本性改善此問題的長久之計。
  • 根本作法,目前各單位自建獨立資料平台的作法,不容易維護。假如統一平臺,這一種系統性錯誤將會減少許多。

關於這方面,clkao 在這一個投影片裡面有提供更多的例子,包含「將報表獨立抽出」、「一列一項目:不要額外小計、不要標頭、不要標頭拆欄」、「累計、小計等可以被計算,所以可以省略」

資料人為錯誤清理

以我們服務地方政府的某局為例,我們發現同一個檔案,由不同人維護,會有截然不同的資料記錄習慣,所以比方會有:

  • 「社團法人台北市野鳥學會」以及「台北市野鳥學會」
  • 「台北市野鳥學會」以及「臺北市野鳥學會」
  • 「"台北市野鳥學會"」以及「台北市野鳥學會」
  • 「台北市野鳥學會(23125642)」以及「台北市野鳥學會」(前者有統編)

而像是同一個年份欄位,會有:「民國 82年」、「82」、「1993」、「八十二」。這源自於每一個人的習慣不同,又沒有統一標準,所以同一個檔案有截然不同的呈現方式

統一編號打錯,經濟部投審會 10 萬筆資料中,出現幾十筆錯誤。SheetHub.com 是利用 Reference Data 的技術發現的:因為我們已經有所有統一編號的清單,所以我們可以利用既有的統一編號清單,比對新資料的統一編號列表,繼而在大量數據中找到統一編號對不起來的例子。

解決方式

  • 一致性清理(短期):這裏有兩個想法:
    • 資料錯誤是「系統性」,而清理的工作是可以「累積」的,所以因為兩筆資料的錯誤模式可能相似,所以清完第一筆,清理下一筆的時候就簡單許多。以 SheetHub.com 為例,我們有一個工具可以把清理資料的程式捕捉下來,下一次遇到類似的案例,機器就會自動幫忙清理。
    • 以資料清理資料,所以比方我們可以把新資料對比舊資料,進而發現不一致的地方。所以用運這一個方法,我們就順利在 7,000 筆資料清出編碼錯誤。以及將前述經濟部投審會 10 萬筆資料找出數十筆打錯的統一編號。
三星級的資料:不要被微軟產品鎖住

use non-proprietary formats (e.g., CSV instead of Excel)

(翻譯)使用非專利性標準

諸如 doc、docx、xls、xlsx 等格式為微軟所擁有。所以使用諸如 excel 等工具時,資料就被鎖住了,不利於重複利用。

解決方式

  • 建立自動轉換程序,將專利性標準轉為非專利性(短期):這是相對容易解決的科技問題,因為資料已經是機器可讀了,所以可以使用機器進行轉換。以 SheetHub 為例,可以自動將 excel 轉為 csv、或著將 shape 檔轉換為 geojson
  • 要求政府單位使用往後建置新系統的時候使用非專利性標準(長期)
四星級的資料:每行資料的獨立連結

use URIs to denote things, so that people can point at your stuff

(翻譯)使用 URI 來標記東西(不只是每筆資料,而是每一行資料)

台灣所有的資料平台都有一個連結可以下載資料。但四星級開放資料的概念,是資料的每一行都有超連結。

所以比方假如我們要跟別人說「天心中醫醫院」的地址,以往我們會貼這一個資料的連結。對方會需要下載這一個資料,在 2,000 行資料中找到找到「天心中醫醫院」。但假如有四星期資料的話,就可以直接告訴對方:「這一個就是天心中醫醫院的連結」。

這感覺是一個小步,但有這樣的小步驟,才可以做到五星級 Linked Data。

五星級的資料:相互連結的資料

link your data to other data to provide context

(翻譯)把(每行)資料相互連結,提供更多意義

當資料相連在一起的時候,當有人上傳「金門人口統計」的資料時,因為系統已經有「金門地圖資料」,所以兩者就可以連在一起。所以比方系統就可以產生有意義的資訊,像是全台灣的用電資料:

或著全台灣的藍綠選舉地圖:

或著是用聲控的方法控制資料:

上述只是這樣功能的冰山一角,雖然 SheetHub.com 已經提供了此功能,但我們其實不完全了解 Linked Data 確切可以產生什麼產值。

人們在網際網路發明前夕,或許沒有人可以遇見網路在過去二十年會如此改變我們的生活。現在說「政府沒有提供 Linked Data 的服務」是有一點奇怪,因為根本沒有人知道怎麼使用。

但這或許就是「基礎建設」的意思:先蓋道路才會有工業,先蓋飛機場才會有飛機。


感謝 Ronny、pofeng、clkao 提供的補充連結或反饋或修訂建議,本文不代表他們的立場。