← Career advice
Advice Columnist

天文台的理想與現實

香港天文台的預測經常令你失望?是你的心理作用,還是這台的預測真的有偏差?

我們會在有誤差的時候埋怨,但天文台也可以為自己辯解,聲稱其他日子其實也很準確,到最後雙方都好像不夠說服力。這一回,我決定利用 Web Scraping,配合 d3.js ,透過 Visualisation 和數據,讓大家都把誰是誰非一眼看通透!!!(如對程式沒有興趣,可直接拉到最後看結果)

十年不更新的格式

很多朋友初學 Web Scraping,多半都是到天文台抓取資料。而筆者則在十多年前已經開始嘗試抓取天文台的資料,為自己的桌面作一個小型「我的天文台」。

不過,每一位曾經抓取天文台資料的朋友,必然會發現,香港天文台的資料並不方便電腦處理。天文台在自己的網站 (https://rss.weather.gov.hk/rss_uc.html) 和政府的「資料一線通」網站 (https://data.gov.hk/) 都公開了讓程式讀取的資料位置,但你能夠拿到的東西,卻與「純文字版」沒太大分別。例子如下:

 

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="flwc.xsl" type="text/xsl" ?><rss version="2.0">
<channel>
<title>本港地區天氣預報</title>
<link>http://www.weather.gov.hk/wxinfo/currwx/flwc.htm</link>
<description>本港地區天氣預報</description>
<language>zh-tw</language>
<webMaster>[email protected]</webMaster>
<copyright>本檔案的內容,包括但不限於所有文本、平面圖像、圖畫、圖片、照片以及數據或其他資料的匯編,均受版權保障。香港特別行政區政府是本檔案內所有版權作品的擁有人。</copyright>
<image>
<url>http://rss.weather.gov.hk/img/logo_dblue.gif</url>
<title>本港地區天氣預報</title>
<link>http://www.weather.gov.hk/</link>
</image>
<item>
<guid isPermaLink="false">
      http://rss.weather.gov.hk/rss/LocalWeatherForecast/20190503000000</guid>
                        <pubDate>Thu, 02 May 2019 16:00:00 GMT</pubDate>
<title>香港天文台於2019年05月03日00時00分發出之天氣報告</title>
<category>F</category>
<author>香港天文台</author>
<link>http://www.weather.gov.hk/wxinfo/currwx/flwc.htm</link>
<description><![CDATA[
一股清勁至強風程度的偏東氣流昨日影響廣東沿岸。本港昨日多雲,早晚有幾陣驟雨,新界多處地區錄得超過5毫米雨量。預料該偏東氣流會在今明兩日繼續影響廣東沿岸。<br/><br/>
本港地區(五月三日,星期五)天氣預測:<br/>大致多雲,有幾陣驟雨。日間驟雨逐漸減少,短暫時間有陽光。氣溫介乎21至25度。吹和緩至清勁偏東風,離岸間中吹強風。<br/><br/>
展望: 星期六部分時間天色明朗,亦有一兩陣驟雨。隨後數天驟雨增多及有狂風雷暴。 ]]></description>
</item>
</channel>
</rss>

 

這個模樣的報告,根本和電台的講稿一模一樣!我們用程式沒辦法輕易找得出會下雨或是不會下雨,還要用 XML 格式,對於某些初學者來說,可能比在純文字版本找東西更多了一重處理 XML 的障礙,尤其近年來,XML 在一般大眾中的應用越來越少。

幸好,天文台使用的字眼十年如一天,我發現每逢天文台預測下雨的時候,總會以「有…雨」來形容,或者提及最挑動大家情緒的「狂風雷暴」。例如「稍後時間有幾陣雨」、「早晚有一兩陣驟雨」或「有狂風雷暴」。於是,我們便可以利用 Regular Expression,把這些字眼,以一兩行程式碼便抽取出來:

 

let match = result.forecast.match(/本港地區今日天氣預測:<br\/>(.*?)<br\/>/);
let heavyRain = match[1].match(/狂風雷暴/)
let rain = match[1].match(/有[^有雨]*?雨/)

 

我們把這四個月的資料整合,發現天文台只有四種形容方法:「有微雨」,「有驟雨」,「有雨」和「狂風雷暴」。

玩更多 Regular Expression: https://regexr.com/

歷史預測

既然有了方法拆解預測,那麼過往的預測又能怎樣拿到呢?

一般來說,如果沒有在過去的時間把資料儲存下來,那麼過去的資料就找不回來了。也是說,若然沒有其他來源之下,你希望找回過去每一天的天文台早上預報,是沒有可能的,你唯有從今天開始每一日妥善儲存到自己的電腦或雲端上。

那麼我們要不要等數個月才有結果?!不用怕,原來政府自 2017 年開始在 data.gov.hk 提供歷史數據,其實就是政府幫我們一直儲存著這些資訊,可以按每小時抓取過往四個月的天文台的天氣預報。

話說回來,政府的開放數據一直都是為人詬病,這次也不會令大家「失望」!在我們查找的過程中,發現兩個問題

  1. 縱然看起來數據是每小時記錄一次,但這個「每小時」的間距並不保證準確!正常時候是整點 (07:00, 08:00, 09:00…),偶然會失常早一分鐘遲一分鐘甚至誤差十數分鐘!(07:01, 07:47, 08:30…)
  2. 在找天文台數據時,2018-12-07 09:00 至 2019-01-01 08:00 的歷史記錄不見了,難道是那數十天負責的同事放假去了旅行⋯⋯?

 

所以,我們這次的調查只能覆蓋一至四月了。

實際的降雨量: 降雨量竟然有 API

來到這裡,我們手頭上已經拿到足夠的「天氣預報資料」,而實際降雨量方面,原本打算在「每小時降雨量」配合傳統的 HTML 拆解方法 (利用 cheerio 或 BeautifulSoup) 把每小時不同地區的降雨量抓下來。

不過,偶然發現原來天文台有一個「每日數據摘錄」,完整收集了自 1884 年起計的每一日的總雨量記錄。而且,這個頁面更是以 Client-side Rendering 的方式顯示,換句話說,即是資料來源是有 API 可攝取,大大方便了我們作分析工作。

只可惜預報方面缺少了部份歷史數據,更沒有以往年代的預報,否則我們更可以比較古今天文台的準繩度!(照道理應該是越來越準確吧!)

調查結果

萬事俱備,這次我們用 d3.js 把降雨和預測資料,用月曆的方式顯示出來。

從上表中可以看到,一月二月未踏入香港的雨季,實際上有雨的日子並不多。不過,苦口婆心的天文台,幾乎不間斷地提醒大家有微雨或驟雨,二月份更加只有七日沒有預報有雨。在「狂風雷暴」的警示下,只有 4 月 19 日達 75 毫米,其他日子的降雨量並不多,最極端的「狂風雷暴日」 4 月 26 日只有 0.9 毫米降雨量。似乎這結果和我們的想法都符合————天文台預測下雨但其實都不大機會下雨!

反過來看,雖然天文台經常令我們白白帶了傘外出,但在天文台預測沒雨時日子,幾乎全部都真的是沒雨和極微雨(只有 0.2 毫米)!即是說,如果你當天發現天文台的預測沒有提及任何「雨」的字眼,你可以十分放心把雨傘放在家中。

然而,只是數日子好像不夠科學。其實我們更可運用 Confusion Matrix 和統計數據,更清晰看得出以上的結論。

 

 

單單是看 Accuracy,我們能指出天文台的準繩度是 70%,但這樣的說法並不夠仔細。因為

Precision 的計算的方法是 (True Positive) / (True Positive + False Positive),即計算天文台預測有雨的日子中,有多少天是真的有下雨,而得出的數字是 0.57,換句話說即是 當天文台話有雨,只有 57% 機會真的下雨!

而 Recall 則是 (True Positive) / (True Positive + False Negative),即計算實際有雨的日子中,有多少天是天文台有成功預測到的,這次運算達到 94%,代表實際很少情況下,會在天文台沒有預測的時候下雨起來, 當天文台說沒雨,很少機會是真的下雨 。要留意的是,如果每天都說會下雨,其實 Recall 可以達到 100% 的。所以縱然有 94% Recall,配合 57% Precision 來分析,其實就是代表天文台總是偏向預測會下雨,讓大家「有備無患」。

後記:還有更多改良空間

今次為了簡化起見,把降雨量的資料依賴了「每日數據摘錄」,不過,假若降雨記錄只是發生在淩晨 00:00 至早上 08:00 這個時段,其餘時段沒有雨,而天文台又預計當天會下雨的話,其實也算是錯誤的預計!既然我們這次的調查,看得出天文台總是常常預測有雨(Precision 的比率十分低),假若剛才的情況(清晨有雨,日間沒雨)經常發生的話,這個統計是錯誤地推高了天文台的準確率呢!

還有,我們把 0.1 毫米或以上的雨量也當作是有下雨(幾乎是幾滴雨!),我相信帶了雨傘的大家一定不會認為天文台是預測準確。

所以,其實這次對天文台是手鬆了很多呢。

✦✦✦
不論是什麼年紀,追求自己所喜愛的事情而決定重頭開始並沒有錯。假如您希望投身於科技行業,讓GetLinks陪伴您走過路上的每一步吧!
GetLinks Recruitment

GetLinks Recruitment

GetLinks Recruitment 是一家全方位的人材招募公司。 自2015年以來,我們已經為亞洲超過20,000位人才找到了完美的匹配, 我們的 使命是為求職者和僱主提供一個高效 的 連接平台。 GetLinks Recruitment 迅速成為不少 公司值得信賴的合作夥伴,在全球多個地點設有辦事處,提供一個真正全球化的專業人士和企業網路。

Keep reading

Related career advice

【中小企實戰】企業「出海」拓版圖,IT系統也要跟着走出去嗎?
Advice Columnist

【中小企實戰】企業「出海」拓版圖,IT系統也要跟着走出去嗎?

企業走向國際市場,早已不再是跨國巨頭的專利。特區政府於去年特別成立「內地企業出海專班」,並於今年3月推出專屬門戶網站與跨界別服務平台,涵蓋金融、法律、物流及通訊科技等八大領域,全力支援企業以香港為跳板發展海外業務。官方數據更顯示,內地目前有逾 5,000 萬家中小企業,許多正積極探索海外商機,期望藉此拉大業務版圖、打響品牌名聲並分散單一市場風險。 在這波滔滔不絕的「出海」大潮中,筆者作為 IT 業界的一份子,認為非常值得大家共同思考一個核心議題:香港企業走出去,IT系統是否也要一起走出去? IT 系統出海:真正的關卡不在於技術 香港許多 IT 服務商本身也屬於中小企,資源相當寶貴。要把業務推向海外,除了產品本身的研發,還牽涉到人手安排、在地銷售、售後維護及營運開支。若在未摸清當地真實需求前,就冒然投入鉅資搭建海外團隊,盲目擴充的風險極高。 另一個極其棘手的現場考驗,正是「水土不服」。一套在香港本地大獲好評的系統,換個市場未必能直接照搬套用。當地客戶的作業流程、採購習性、法規限制,乃至對服務品質的期待,都可能迥然不同。缺乏對在地文化的切身理解,推行新項目時定會困難重重;如果你的成功故事都只是在香港,這樣要做出成績,要花很長時間和金錢。 更關鍵的是,做 B2B 商業模式極度依賴人脈與信任。初來乍到一個陌生環境,就算技術再頂尖,缺乏在地網絡也很難拿到第一個客戶的信任票。因此,香港 IT 企業在打算「出海」時,萬不能只單向思考「我們具備甚麼技術」,而是要逆向問自己:「當地客戶究竟需要甚麼?」 拒絕單打獨鬥:借力 Partner 才能走得穩健 筆者非常推崇且一貫倡導的策略,是尋找深刻理解當地市場的在地企業進行深度合作。Partner(合作夥伴)為你帶來的,絕不僅僅是一條銷售渠道,更是極其珍貴的在地人脈、實務營運經驗與文化洞察。 商場上從來沒有包賺不賠的生意,特別是對資源有限的中小企來說,善用 Partner(合作夥伴)模式絕對是降低營運風險的核心智勝策略。再者,做生意絕不止於研發好產品,成功關鍵很大程度取決於 Sales & Marketing(市場推廣與銷售)。若缺乏足夠的 Sales & Marketing 投入,就算產品再頂尖也是枉然。試想當你置身於一個完全陌生的海外市場,既無在地人脈、又缺乏品牌歷史與市場信任度,商業效益必然會「大打折扣」。因此,前期在市場推廣)、生產與 銷售渠道上的資源部署,對於爭取接觸潛在客戶而言,起着至關重要的決定性作用。 另一個不容忽視的實戰關鍵,在於產品於當地所產生的實際產值。我們從事 IT 系統開發與方案的本質,說到底就是幫客戶創造價值(不外乎是增加收入、省下營運成本或降低人為錯誤率)。然而,若系統搬到海外後無法發揮相應的經濟效益,自然就很難敲開市場大門。特別是進軍東南亞等新興市場時,由於當地生活水平與人工成本普遍較低,企業若打算以 IT 系統取代人力,就必須精準評估系統所創造的產值與效率增幅,是否真的能切合當地的成本結構與市場承受力。 在合作架構上,企業完全不必在一開始就下重本設立海外分公司,可以佔新公司 30% 或以下即可,抑或採用按項目的技術合作、共同開發、代理分銷,甚至技術入股等靈活彈性的形式。先透過輕量化方式測試市場水溫,再依據後續表現評估是否追加投資。這樣既能緩解資金運用壓力,也能讓團隊在實戰中逐步摸清在地需求。 而挑選 Partner 的核心條件,最主要是看其是否具備豐富的 B2B 生意經驗。政府近期大力推動的「出海全球通」,正正是透過串聯跨領域專業服務與海外網絡,幫助中小企做好出海前的萬全準備,並精準對接合適的在地夥伴。 帶到海外的不是產品,而是「解決問題的能力」 筆者投入 IT 解決方案領域踏入第 40 個年頭,深刻體會到客戶需要的從來都不是單純的軟件或硬件,而是一整套從需求訪談、系統規劃、部署落地到後續維運的一站式解決方案。 以我們團隊過去推廣 RFID、資產管理及各類智慧化方案的經驗來看,不同地區的應用場景與客戶痛點往往差天共地。因此,真正值得我們「帶出去」的,應是技術背後那套「解決問題的能力」,並因應當地的具體環境與作業習慣進行全面重新調整。 香港 IT 企業要邁向國際,IT […]

【職場心理學】客戶是願意買這件產品的,如何令他選擇跟「你」買?
Advice Columnist

【職場心理學】客戶是願意買這件產品的,如何令他選擇跟「你」買?

每天準時赴約,備好精心設計的計劃書,用最清晰的圖表解釋保障缺口、回報率、通脹風險—— 對很多保險顧問和理財規劃師而言,這是一個再熟悉不過的工作日常。 但有一個問題,很少人會在百忙中停下來認真問自己: 客戶為什麼選擇了你?是因為你的專業知識?還是只因為某一天,你剛好出現在他的生命裡? 曾有學員問我:「YY姑娘,我每次見客都準備充足,計劃書也設計得很詳細——但客戶最後總是說『再考慮一下』,然後就沒有消息了。我到底哪裡出了問題?」 我沒有立即給他答案。我反問了他一個問題:「你上一次見那位客戶,談話的重心,是放在他這個人身上,還是你要介紹的產品上?」 他沉默了一會兒。 這不是一個叫人難堪的問題。這是一個值得誠實面對的問題。 表層熱情,還是真實在場? 社會學家 Arlie Hochschild 在其經典著作中提出「情緒勞動」(Emotional Labour)的概念,將服務業從業員的情感表現分為兩種模式:表層扮演(Surface Acting)——即管理外在表情與行為,令自己「看起來」投入;以及深層扮演(Deep Acting)——真正嘗試調動內在感受,真心在意眼前的人(Hochschild, 1983)。 我有時會在人際溝通實戰班中,請學員回想兩段截然不同的對話經歷:一次是感到「被真心聆聽」,另一次是察覺到「對方只是在演」。幾乎所有人都能毫不猶豫地說出兩者之間的感覺差異——即使他們當時未必能清楚道出哪裡不同。 這個感知能力,你的客戶同樣擁有。 近年神經科學的研究進一步印證了這一點。一項刊登於 Frontiers in Neuroscience 的實地研究,在兩間奢侈品零售店測量了銷售員服務客戶時的神經投入度(Neurological Immersion),發現銷售員的峰值投入度能有效預測客戶的消費金額,且兩者呈線性正相關(Rancati et al., 2025)。換句話說,你有沒有真正在意眼前的人,不只是態度問題,而是大腦信號的問題。客戶的直覺,往往比我們以為的更準確。 每個客戶,都活在自己的世界裡 人本心理學家 Carl Rogers 提出現象學(Phenomenology)的視角:每一個人都活在自己獨特的主觀世界裡,有他自己對安全感、對未來、對風險的詮釋(Rogers, 1961)。 你可以對通脹數據倒背如流,可以把保障缺口計算得精準無誤——但如果你從未真正嘗試進入客戶的主觀世界,了解他真正憂慮的是什麼、他的成長背景如何塑造了他對金錢的態度、他此刻的人生正處於什麼階段——那麼你的每一個建議,對他而言都只是一個外人的猜測。 即使是一份完美的計劃書,也只是一份猜測。 我曾在決策心理學課中分享過一個概念:人們在作出重要決定時,理性分析往往只是最後一步。在那之前,他們已經在問一個更根本的問題——「我信任這個人嗎?」 如果答案是否定的,再精準的數字也難以打動人心。 三個指標,讓你誠實評估自己 以下三點,不是來自銷售訓練手冊,而是來自心理學對真實信任關係的研究定義。不妨對照自己: 客戶在沒有被詢問的情況下,主動分享自己的生活狀況和憂慮;當他們面對重要的財務或人生決定時,你是他們第一個聯絡的人;他們願意把家人或朋友介紹給你——不是因為有好處,而是因為他們信任你這個人。 如果以上三點,你能做到的寥寥無幾,值得誠實問自己的是:你和客戶之間,究竟是真正的顧問關係,還是只是一段買賣關係? 這不是批評。這是一個邀請——邀請你重新思考,你在這份工作中,真正想成為誰。 停下來,問自己兩個問題 你最近一次與客戶見面,談話的重心是放在他這個人身上,還是你要介紹的產品上? 你有多少客戶,在沒有任何利益關係的前提下,仍然願意主動找你說話? 這兩個問題,沒有標準答案。但答案的方向,也許比任何銷售技巧培訓都更值得你花時間思考。 真正長遠的業績,從來不是靠話術建立的。它的根基,是對「人」的深度理解——包括你自己,和你對面的每一位客戶。 參考資料 Hochschild, A. R. (1983). The managed […]

【職場 Hacker】揭開職場破局的秘密——SMI 框架(下)
Advice Columnist

【職場 Hacker】揭開職場破局的秘密——SMI 框架(下)

上週,我們分享了 SMI 框架的第一層:SCAN 層——如何診斷你的職場現狀。 很多讀者完成了 SCAN 評估,找出了自己的職涯轉型原型。但接下來,大家都問了同一個問題:「我知道問題在哪裡了,但我該怎麼做?」 這就是今天要分享的內容:SMI 框架的第二層和第三層——MAKER 層(如何系統化地行動)和 IMPACT 層(如何驗證成效)。 如果說 SCAN 層是「診斷工具」,那麼 MAKER 層就是「行動引擎」,IMPACT 層就是「成效儀表板」。這三層形成了一個完整的閉環系統。 MAKER 層:五個行動維度 MAKER 層包含五個核心維度,每個維度對應一個子框架: M = Map(路線圖)→ PATH 框架 第一個維度是「路線圖」,幫助你創建清晰、可執行的職涯路線圖。 PATH 框架包含四個要素: – P(Purpose,目的):定義你的核心目的和價值觀 – A(Aspiration,志向):設定具體、可衡量的職涯目標 – T(Terrain,地形):評估環境和識別障礙 – H(Horizon,視野):擴展視野與邊界,明確長中期方向 A = Allies(人脈班底)→ WEB 框架 第二個維度是「人脈班底」,幫助你建立策略性的支持網絡。 WEB 框架包含三個要素: – W(Who,誰):識別關鍵利益相關者(燈塔、盟友、倡導者、連結者) – E(Exchange,交換):定義價值交換和互惠 – B(Bridge,橋樑):建立跨越不同社交圈的橋樑 K = Kaizen(持續改善)→ […]

天文台的理想與現實 | CPJobs Career Advice