← 返回職場資訊
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 迅速成為不少 公司值得信賴的合作夥伴,在全球多個地點設有辦事處,提供一個真正全球化的專業人士和企業網路。

繼續閱讀

相關職場資訊

【職場指南】未過試用期放紅日被扣糧,公司有冇犯法?一文看清勞工法例點樣講!
Advice Columnist

【職場指南】未過試用期放紅日被扣糧,公司有冇犯法?一文看清勞工法例點樣講!

打工仔轉新工,最開心當然係撞正農曆新年、復活節或者聖誕節等長假期。不過,唔少新人一出糧就發現:「咦?點解今個月少咗幾百甚至幾千蚊?」問返 HR,原來係因為「未過試用期,紅日放假無糧出」。到底公司因為紅日而扣起月薪員工嘅人工,有冇違反香港《僱傭條例》? 直接解答:公司扣薪,其實並無犯法! 好多人以為月薪制就等於「包月」,只要係放公眾假期就理所當然有錢收。但原來根據香港勞工法例,公司喺特定情況下,扣除新入職僱員嘅紅日薪金,係合法嘅,並冇犯法! 拆解《僱傭條例》:關鍵在於「3 個月」而唔係「試用期」 點解公司可以扣糧?根據香港《僱傭條例》,所有僱員(無論做咗幾耐)都有權放法定假日(即係俗稱嘅「勞工假」)。不過,「放假」是一回事,有沒有「假日薪酬」(即係有薪假)又是另一回事。 法例明文規定,僱員必須按「連續性合約」(即俗稱嘅 418 規定:連續受僱 4 星期,每星期不少於 18 小時)受僱滿 3 個月,喺緊接法定假日之前,先至有資格享有該日嘅「假日薪酬」。 換句話說: 注意,勞工法例嘅標準係「3個月年資」,而唔係「試用期長短」! 「勞工假」 VS 「銀行假」 頭先講嘅係法定假日(勞工假),咁公眾假期(銀行假)又點計? 香港法例主要規管法定假日,而額外嘅公眾假期(例如部分復活節日子、佛誕等)則視乎公司政策。對於不屬於法定假日嘅公眾假期,法例並無強制僱主必須支付薪酬,一切以雙方簽訂嘅僱傭合約為準。但慣常做法上,大部分提供銀行假嘅公司,都會將兩者嘅計薪方式統一處理。 扣錢點樣扣先啱? 如果真係要扣糧,公司都唔可以亂扣。根據法例,假日薪酬嘅每日款額應該等於僱員在該假日前 12 個月內所賺取嘅每日平均工資(ADW)。如果受僱未滿 12 個月,就用入職以嚟嘅較短期間去計算。公司唔可以隨便用「月薪 ÷ 30日」嚟扣錢,必須依照 ADW 嘅準則嚟計先算合法。 總括而言,新入職未夠 3 個月被扣紅日人工,喺勞工法例上係沒有違法嘅(除非合約另外寫明「入職即享首三個月有薪法定假期」)。 各位求職者喺簽約嗰陣,記得睇清楚僱傭合約條款! 有唔少「好老闆」或者大機構,會喺合約列明「入職首天即享有薪公眾假期」,咁就唔洗擔心頭三個月遇到大節日會「糧尾」啦。如果合約冇寫,不妨喺面試或簽約時禮貌地向 HR 問清楚公司嘅假期計薪政策,咁出糧時就唔會有期望落差!

【職場求生術】遇上「扮工」專家?教你4招對付成日扮忙嘅同事
Advice Columnist

【職場求生術】遇上「扮工」專家?教你4招對付成日扮忙嘅同事

喺香港職場,大家一定遇過呢種同事:日日將「好忙啊」、「真係做唔切」掛喺嘴邊,一有新 Task 就即刻卸膊。最令人眼火爆嘅係,佢哋硬係鍾意喺 Weekend 或者半夜三更覆 Email,特登 CC 晒畀班 Management 睇,營造一個「搏命為公司」嘅假象,但實際上工作產出少之又少。 面對呢種「扮工」專家,身為同事嘅你難免會覺得委屈,甚至因為佢推卸責任而增加咗自己嘅 Workload。今次為你準備咗以下 4 招應對策略,教你點樣優雅地應對,唔使硬食死貓! 1. 劃清界線,拒絕無了期「接身後事」 2. 白紙黑字,留低溝通紀錄 3. 唔好做觀眾,冷處理「非辦公時間」嘅表演 4. 專注自己,相信管理層嘅眼光 職場上最重要係保護自己嘅 Mental Health。與其為咗「扮工」同事激心,不如將精力放喺提升自己嘅實力上!

老細每粒鐘要你「報更」?4招教你對付 Micro-management 控制狂上司!
Advice Columnist

老細每粒鐘要你「報更」?4招教你對付 Micro-management 控制狂上司!

返工最怕遇到啲咩?唔係無窮無盡嘅 OT,而係遇到一個 Micro-management(微管理)嘅老細!每日每分每秒都 mon 住你,不停問:「你而家做緊咩?」、「份report搞成點?」,最誇張嘅甚至要你每日 mark 實一張 Time sheet,每個鐘「報更」匯報自己做過啲乜。 面對呢種令人窒息嘅工作環境,與其日日喺位度反白眼兼懷疑人生,不如試下用以下 4 招「反客為主」,拆解老細嘅不安感! 1. 主動出擊:先發制人,塞爆佢個 Inbox 控制狂上司之所以不停問,往往係因為佢缺乏安全感,覺得一切唔喺佢掌握之內。既然佢咁想知,你就不如主動匯報! 2. 善用工具:透明化你嘅工作日程 老細要你每個鐘寫 Time sheet?與其嘥時間填表,不如主動提議用更有效率嘅方法。 3. 向上管理:委婉反映「報更」嘅時間成本 好多老細未必意識到,不停要求員工匯報,其實係會拖慢工作進度。你要搵個適當嘅時機(例如 One-on-one meeting),平心靜氣咁同佢傾下。 4. 建立信任:用實力證明你係「靠得住」 講到尾,Micromanagement 嘅核心問題係「信任」。要老細放手,首先你要證明自己值得被信任。 🌟 終極絕招:三十六計,走為上計! 如果你試過晒以上方法,交足貨又主動溝通,但老細依然故我,將控制慾無限放大,搞到你精神緊張、壓力爆煲……咁證明呢間公司嘅文化根本唔適合你。 與其留喺度受氣,不如及早轉身!全港咁多好老闆,總有一個懂得欣賞你嘅獨立工作能力!唔好等啦,即刻為自己嘅 career 搵條新出路!

天文台的理想與現實 | CPJobs 職場資訊