Horry

喜歡看書,旅遊、跑步、爬山, 因為這些都是讓我認識世界的途徑。 http://horrypong.wordpress.com

用Qlik Sense製作疫情互動數據圖

相信大家都看過John Hopkins Hospital製作的COVID-19數據圖表,網站除了提供資訊圖外,還將已整理好的原始數據上傳至github給公眾參考。自己在工作上有使用Qlik Sense製作資訊圖,就無聊地(?)拿csse_covid_19_time_series的數據來試用一下,順便磨練一下Qlik Sense的技巧。結果不下場還好,一到實戰時還是遇上不少問題,最後還是要GOOGLE一輪才解決問題,但這也是有所得著的過程。以下分享一下內容,留言有提供原始的Qlik Sense App下載(需配合Qlik Sense Cloud使用,可申請一個月免費試用帳戶),歡迎使用及改動(會有人用嗎?),也歡迎交流一下。

以下所有數據更新至2020年3月11日。另圖表僅供參考,我雖有盡力檢查但不保證圖表正確。(XP)有問題或bug可以留言,我時間及能力許可下盡量跟進。

版面簡介︰App內包括了Overview、Countries/Regions、Mainland China和Data四版,分別展示全球一覽圖、各國數據圖、中國大陸數據圖和原始數據表。

Overview
Countries/Regions
Mainland China
Data

以下截取了一些圖表給大家參考。

受疫情影響的國家/地區已達到116個,其中2月22日是疫情的爆發點,出現感染案例的國家數目自此便一直上升。

Existing case是指當下患病人數,計算方法是:確診案例 - 死亡案例 - 已康復案例。

中國大陸自2月中起Existing case便開始減少(負數代表數目減少),相反大陸以外的案例數目在同期開始急速上升。

Case fatality rate是:累計死亡人數 / 累計確診人數。

本來除卻湖北以外各地區的死亡率都不高(低於1%),但隨著意大利、伊朗等國疫情大爆發,大陸以外地區的死亡率便漸漸迫近湖北的水平(約4.5%)。

以下是一些關於國家的數據圖表。

撇除中國後(它數量太大會壓低了其他國家的數據線)、最多existing case的七個國家。南韓的確診數目似乎穩定下來;反觀意大利、伊朗以及其他國家的上升勢趨則仍末停止。
香港、台灣與新加坡的數字,一直很納悶為何新加坡的確診人數仍是不住上升。澳門已多天沒有新增案例所以就沒有加入圖表內。
撇除中國以外、existing case最高7個國家的死亡率,當中意大利情況尤為嚴重(6.6%,超越大陸重災區湖南),很可能當地的醫療系統已被急增的確診人數所拖垮... ...
除卻中國外最多死亡案例的7個國家。意大利的情況令人擔憂,反而曾經大爆發的南韓死亡人數則甚低(低到近乎看不到)

以下是一些中國大陸的數據圖表。

中國大陸方面,重災區湖北的existing case數目已顯著回落
剔除湖北後各省的existing case數目,全部都回落至100宗上下
各省的新增確診數字也控制在30宗以下。
死亡宗數也集中在湖北,而且數目也回落至每天30宗

製作感想

  • 雖然平日已有製作Dashboard的經驗,但是增作這些以天為時間單位的圖表還是第一次(平日製作的都是以年為單位),所以要摸索關於日期的變換及處理,其中學到了Above()及Below()這個比較上/下一列數據的function,初時以為可以用來計算每日案例數目的變動,不過考慮到若果用家點選了個別日期後該function便可能失效,所以最終沒有使用,後來找到了peek這個loading function用來撈取早前的數據並徹底解決了問題。
  • 另一個難題是如何自動地更新數據。平日的數據因為是以年為單位所以人手更新便可(一年做一次),但這次疫情資訊是每天更新,便開始研究如何設定自動的數據更新,詳細方法文末有分享。
  • John Hopkins提供的數據不時改動國家/地區的名稱,例如本來一直分開列出的香港和澳門最近被合併入中國內,台灣又煞有介事地標為"Taiwan *",South Korea又不知為何改為"Korea, South",政治雕琢的痕跡顯而易見,而這亦令App內的數據線不時斷掉,於是我又要花費心神做data cleansing...
  • 每次製作這些Dashboard時心裏總有「想放的東西太多但版面太小」的感覺,雖然Qlik Sense有提供Tab container算是舒緩了版面不足的問題,但現時仍是覺得版面很擠擁,如何平衡資訊性及可讀性總是成為最難處理的問題。

檔案下載

請參看留言,歡迎使用及改動。(重申一次︰我雖有盡力檢查但不保證圖表正確。)

使用方法

下載檔案後請到Qlik Sense Cloud申請試用帳戶(免費使用一個月),登入後上傳檔案,成功後便會看到新增了一個「App」(明顯地為了扮「潮」所以用這個字),點擊後便可進入使用。

註︰建議使用電腦開啟檔案,而且解析度不要太低(如1200x900以上)

上載成功後會多了一個"App"
點擊進入App後就看到四個頁面
左手方提供了Filter選擇國家、省(僅限中國大陸)和日期(綠圈),選擇了的選項會在上方顯示(紅圈),圖表便會因應選項而更新。左下角則提供一些快速選擇鍵(藍圈),如最多確診/死亡案例的8個國家

如果發現數據未能更新,可以按左上角的"Clear all"清除選項,又或重新載入App應可解決問題。

圖表右上角可以切換不同頁面,有興趣的朋友也可以按Edit進入編輯頁面改動圖表或自行設計新的圖表。

如何更新數據

本來Qlik Sense是支援直接讀取網頁數據的(至少我工作用的版本便可以),這樣我便可以直接匯入github的csv檔,但來到試用版後便發現沒有了閱讀網頁的功能,我亦不太熟習github的功能,結果我只好用Wget + Windows Scheduler定期地從github上抓取三個相關的csv檔落電腦,然後再用Dropbox之類的Cloud Storage同步上傳,並設定Qlik Sense讀取這些雲上的csv檔。如果各位高手有更佳的方法請分享。

如果你不介意手動更新數據,那只要在Google Drive或Dropbox上開啟一個"Coronavirus 2019"資料夾(這很重要,不然便要改動loading script),然後放入這三個github csv檔,之後打開Qlik Sense App,開啟Data load editor︰

點選APP左上角的目錄,然後按Data load editor

當看到長長的programming script後可以直接跳過(笑),點選最右邊的"Create new connection":

點選"Create new connection"(紅框)
選擇Google Drive / Dropbox
看到這個畫面後按"Authenticate"

這時Browser會開啟新tab進入Dropbox / Google Drive的畫面(如果你未登入便需要先登入),要求你准許Qlik Sense讀取Dropbox / Google Drive的資料:

看到這畫面便要按"Allow"
然後Browser會給你一堆長字串,按"Copy to clipboard"複制

之後返回Qlik Sense的Data loading editor畫面,貼上已複製的字串,然後按"Verify",成功的話會看到底下的"Name"顯示Dropbox / Google Drive 的戶口名,這時務必將名字改為"Data source"(不改的話便又要改loading script了),請留意大小寫必須完全一致,完成後可以按"Test connection"試一下,如果成功便按"Create"。

以上步驟只要設定一次便可,之後按右上角的Load data便會讀取更新的數據。

日後更新時只需要登入Qlik Sense,按App右下角的"...",然後選擇Reload。若果你有設定自動更新Dropbox / Google Drive的csv檔案,也可以設定"Schedule reload"定期更新Qlik Sense App。

武漢肺炎疫情實時數據資訊

登入發表評論

看不過癮?

馬上加入全球最高質量華語創作社區,更多精彩文章與討論等著你。