香港政府的 Open Data 之我見

看見傳媒報導,立即走去 data.gov.hk 看。OMG,還真的有警方的 Appreciation Letters ,是因為警務署覺得自己形象低落,所以發放出來,告訴市民它多麼受歡迎,還是它真心覺得,有人會對此方面的資料有興趣呢?

政府連感謝信也拿出來當 open data ,實在不知如何形容。是因為懶,還是因為根本不知什麼是 open data 啊?

什麼是 Open data?

Open data 簡單說是開放資料。政府掌握最多資料,而這些資料,一般人基本上是沒可能用其他方法自行獲取的。透過這些資料,市民可以了解社會發生的事情 (投票、人口、犯罪資料),可令生活更方便 (天氣、交通、租金價格資料),或做學術研究 (教育、就業等資料)。

這些資料數據,如人口統計、犯罪率等,皆由政府掌控。若政府不願開放,我們便沒有方法得知。現在鼓吹的 open data,便是希望政府能開放數據,除了可增加透明度,也能讓大眾都可以拿著數據去做分析、研究或做其他形式的發放。

一般來說,open data 的資料格式是容易輸入進電腦程式裏,讓程式容易閱讀。較新的格式有 JSON,XML 等,為最方便程式使用的格式;其次是 xls,很多時需要用其他程式再轉換,但仍算方便;而 PDF、JPG 等則不能輕易輸入進程式中,為最不便的格式。

data.gov.hk 的問題

香港政府為響應 open data ,幾年前成立 data.gov.hk ,旨在用一個統一的地方發放資料。可能內裏的資料類型和質素一直強差人意,似乎政府人員對什麼是 data 毫無概念。

這算是 data ?

「Open Data」是以 data 為主,什麼是「data」則因人而異,但如何不同,也有底線吧?除了之前報導的警察表揚信,我們在 data.gov.hk 可以看到「在囚人士刊物」、「平等機會政策」,或至乎「參加表格」,無論任何角度看,它們也不算是 「data」吧 ? 政府似乎是以為 open 了便可以,是不是 data 也沒有所謂。

OK,我們不應該怪他們,其實很難界定什麼資料有用,畢竟也有人用表揚信資料寫了程式。而且表揚信的發放格式是 XML,可以容易讀取分析,所以也不能算不 OK 吧。雖然我們期望的資籵會是更有用一點 (如各區犯罪率、報案人數等)。

PDF PDF PDF

PDF 是方便人列印閱讀的格式,就算在不同平台機器上開啟,外觀格式也會一致,以人類為對像來發放的話,是非常方便。

但若對像是電腦程式的話,則是另當別論了。PDF 不能輕易轉換為其他格式,很多時就算 copy & paste 也未必能將資料完整地複製出來。對程式設計者來說,PDF 簡直就是惡夢!

但為什麼政府的資源多是 PDF 格式? 什麼?連 JPG 也有呢。

![活豬數量分佈圖](/content/images/2016/07/barchart.jpg)
「活豬數量分佈圖」。只有圖表,沒有資料。為什麼不直接出 data set 而要出 Excel graph?

內容為王

有些資料雖然是以 XML 格式發放,但裏面的是文字段落,完全失去使用 XML 的意義,浪費時間啊。

拿最多人使用的天氣資料為例,讓我們看看 本港地區天氣報告 的資料:

<description>
<![CDATA[
    <p><img src="http://rss.weather.gov.hk/img/pic53.png" style="vertical-align: middle;"><br/><br/> 上 午 9 時 天 文 台 錄 得:<br/> 氣 溫 : 29 度<br/> 相 對 濕 度 : 百 分 之 89<br/> 過 去 一 小 時 , 京 士 柏 錄 得 的 平 均 紫 外 線 指 數 : 2<br/> 紫 外 線 強 度 : 低 <br/>

    <br/> 天 氣 炎 熱 可 能 影 響 健 康 , 天 文 台 提 醒 市 民 保 持 警 惕 。<br/>

    <p></p>
    本 港 其 他 地 區 的 氣 溫 :<br/>
    <font size="-1">
        <table border="0" cellspacing="0" cellpadding="0">

            <tr>
                <td>天 文 台 </td>
                <td width="100" align="right">29</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>京 士 柏 </td><td width="100" align="right">30</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>黃 竹 坑 </td><td width="100" align="right">30</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>打 鼓 嶺 </td><td width="100" align="right">29</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>流 浮 山 </td><td width="100" align="right">30</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>大 埔 </td><td width="100" align="right">28</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>沙 田 </td><td width="100" align="right">29</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>屯 門 </td><td width="100" align="right">30</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>將 軍 澳 </td><td width="100" align="right">29</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>西 貢 </td><td width="100" align="right">29</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>長 洲 </td><td width="100" align="right">29</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>赤 &#40050;  角    </td><td width="100" align="right">30</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>青 衣 </td><td width="100" align="right">31</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>石 崗 </td><td width="100" align="right">31</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>荃 灣 可 觀 </td><td width="100" align="right">27</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>荃 灣 城 門 谷 </td><td width="100" align="right">30</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>香 港 公 園 </td><td width="100" align="right">30</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>筲 箕 灣 </td><td width="100" align="right">29</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>九 龍 城 </td><td width="100" align="right">30</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>跑 馬 地 </td><td width="100" align="right">30</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>黃 大 仙 </td><td width="100" align="right">30</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>赤 柱 </td><td width="100" align="right">30</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>觀 塘 </td><td width="100" align="right">30</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>深 水 埗 </td><td width="100" align="right">31</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>啟 德 跑 道 公 園 </td><td width="100" align="right">30</SPAN><SPAN style="float:static; text-align:left;"> 度 ,</td></tr>
                <tr><td>元 朗 公 園 </td><td width="100" align="right">31</SPAN><SPAN style="float:static; text-align:left;"> 度 。</td></tr>
        </table></font><br/>
    <br/>
    上 午 7 時 45 分  至 8 時 45 分  , 各 區 錄 得 雨 量 如 下 :<br/><table border="0" cellspacing="0" cellpadding="0">
    <tr><td>北 區 </td><td width="100" align="right">0 至 5 毫 米 , 
    </td></tr>
    <tr><td>屯 門 </td><td width="100" align="right">0 至 4 毫 米 , 
    </td></tr>
    <tr><td>離 島 區 </td><td width="100" align="right">0 至 4 毫 米 , 
    </td></tr>
    <tr><td>大 埔 </td><td width="100" align="right">0 至 1 毫 米 。 
    </td></tr>
    </table><br/>
    從 昨 晚 午 夜 至 上 午 9 時 , 天 文 台 錄 得 最 低 氣 溫 為 25.8 度 。<br/><br/>
]]>
</description>

看到了嗎?XML 裏是一大段 HTML code,還有 css 呢。若想從中找到當天天氣溫度,要自己用 regex 抽出來。其實《我的天文台》讀取的也是格式好的資料,證明天文台是絕對有能力發放方便程式使用的格式,但為什麼放在 data.gov.hk 要使用這種文字形式來?是不鼓勵其他人使用?還是要要迫人使用它的 app 呢?

開發「香港天晴」時,我本想使用這些 RSS,無奈這些資料有等於無,最後也要自行 scrape 網站資料去做,這些 RSS 完全沒有任何幫助。

政府 app

老實說,政府出品的 app ,一定有很多限制。先天的限制是,政府必有立場,必須服務市民。其次是掌握生殺大權者,必為上一代的高官老人,他們較難接受「新事物」,普遍害怕出錯,不願承擔,間接令程式設計老舊之餘,亦不會實用。

很多政府的 App 如交功課,為做而做,沒有考慮用家有沒有此等需求。有些擁有「花巧」的外觀,連文字也由圖片堆砌,但卻沒有實際的功能,只流於表面。而政府部門間各自為政,本來可以統一在同一程式中顯示的資料,很多時需要分開各自的 app 來顯示,浪費資源。

為何坊間的程式,往往比政府的官返程式更受觀迎?因為開發著會以用家的角度出發,較易接受新式設計,沒有官僚的包袱。若讓有興趣的人或公司自行開發,基於他們會以吸引人用作賣點,程式設計絕對比政府優勝。

當然,政府的角色便有其功用:某些程式根本沒有人願意開發 (表揚信 app , anyone? ),這時政府便能填補空缺。

總結

政府不是要創造就業、推動創新的嗎?為什麼連飯也不願施捨,不願給 data 讓市民使用?就真的這麼怕出錯嗎?還是有其他政治考慮?

政府應該主力提供數據,讓各方運用。不能因為怕自己的程式使用率低,而不肯開放。

政府作為資料提供者作足矣。

相關連結