2023年4月30日 星期日

簡單易上手的資料視覺化網站: rawgraphs

用 rawgraphs 畫的 treemap 設定 rawgraphs 的 mapping Rawgraphs 是一套很適合入門者的網頁版資料視覺化自由軟體。 不必下載軟體, 只需要到示範網址 ("Use it now!" 點下去)、 上傳你的 csv 檔、 決定你想畫哪一種圖、 決定要用哪些欄位, 馬上就幫你產生圖形。 這裡 有一篇入門的中文教學, 我就不再重複介紹基本的操作了。 以下是我的一些使用雜記。

一、 隱私 & docker

Rawgraphs 官網強調一切運算都在瀏覽器裡面發生, 你的資料不會被傳到伺服器去。 但如果你的資料高度敏感 (例如客戶的個資), 還可以更進一步下載 Dockerfile、 放在一個空目錄裡、 進入該目錄、 用 docker build -t rawgraphs . 自行在本機建立一個 docker image。 這樣就可以完全離線執行了。 成功之後, 可以用 docker run -d --name rg0 -p 3072:3000 rawgraphs 啟動, 並且將瀏覽器指向 localhost:3072。 啟動的時間有點久。 最終會看到跟示範網址相同的介面。

電腦關機再開之後, 要用 docker start rg0 重新啟動這個 container。

二、 準備資料

即使你沒有自己的資料可以玩, 也可以點 "Try our data samples" 裡面有現成的示範資料。 我自己則最常用 "Upload your data" 上傳 csv 檔。 假設你已按照 試算表的 unpivoting/melting 這篇 產生了 electricity-mix-hierarchy.csv。 接下來可以這樣: ( head -n 1 electricity-mix-hierarchy.csv ; grep ',2020,' electricity-mix-hierarchy.csv ) > em20-hierarchy.csv 只抓出 2020 年的資料, 得到 em20-hierarchy.csv

上傳之後, 在 "Year" 欄位前面有個 "#", 表示 rawgraphs 認為它是個數值欄位。 點下去, 把它改成 "Date" => "YYYY"。 這裡其實沒差啦, 反正 rawgraphs 不論把它當成時間還是數字, 排序都不會出錯, 更何況我們也沒有要用到這個欄位。 但如果你的日期格式是 02-03-2023 之類的, 就必須靠這個動作告訴 rawgraphs 到底資料格式是 日-月-年 還是 月-日-年。

如果資料裡面有空的欄位, 有時 rawgraphs 會罷工。 例如上面如果抓 1980 年的資料, 等一下在做 mapping 時, 就會出錯。 這時可以先在命令列上把空白處都填上 0: perl -pe 's/,,/,0,/g; s/,,/,0,/g; s/,$/,0/' 缺資料.csv > 補滿補好.csv 說明: 這裡的 s/,,/,0,/g 要做兩次, 是因為如果有很多連續的空白處, 有些逗點必須被比對兩次, 一次當 "後逗點", 另一次當 "前逗點"。

三、 mapping

以我們的 hierarchical 類型例子而言, 「圖表類型」 可以選擇 treemap、 treemap (voronoi)、 sunburst、 circle packing 或是 circular dendrogram。 以下以 treemap 為例。 選好圖表類型 之後, 再來就是決定 「欄位」 與 「圖表參數」 之間的對應。 大推 官方的 mapping 文件

Hierarchy 欄位可以塞進 csv 的很多欄, 按照由粗而細的順序放, 例如 「縣市」、「鄉鎮」、 「村里」。 以我們的例子來說, 可以選 continent、 type、 source 共三層。

任何數值欄位 (有 "#" 的欄位) 都會面臨一個問題: 如果有好幾列的資料被塞進圖上的同一塊區域 (或同一條 bar、 同一片 pie、 ...), 那該如何整合這些資料? 官網 mapping 文件中的 「aggregations」 就是在解釋這部分。 最普通最合理, 也是預設的方式, 就是加總: "sum"。 例如圖上最大那一塊 「亞洲-煤礦」 包含很多列 (很多國家的煤礦列), sum 當然是最合理的選擇。

"Label" 欄位也可以填 csv 表格裡的不只一欄。 我這裡先填 continent 跟 source, 自己確認每一大塊是哪一大洲之後, 可以再刪除 Label 底下的 continent、 匯出 svg、 進入 inkscape 編輯、 手動幫每一大塊加上洲名。

四、 其他

  1. 表格裡可以有多餘的欄, 不可以有多餘 (沒用到) 的列。
  2. 目前 bubble chart 沒有支援 logscale。 我已提出建議

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。