在網頁上發佈資料視覺化圖表 - 方案評估與技術問題全記錄

ARON HACK 亞倫害的
·
·
IPFS
·
事情是這樣的,這個網站是用WordPress建置,本來放在GoDaddy虛擬主機上,當時的方案簽了三年,在大約一年半的時候,我決定把網站搬到SiteGround上。為了不讓GoDaddy的主機空轉,剛好我也想做些Side Projects,試著在網站上建立數據儀表板,GoDaddy的主機剛好可以拿來跑自動化程式或是儲存資料。


前情提要

事情是這樣的,這個網站是用WordPress建置,本來放在GoDaddy虛擬主機上,當時的方案簽了三年,在大約一年半的時候,我決定把網站搬到SiteGround上。為了不讓GoDaddy的主機空轉,剛好我也想做些Side Projects,試著在網站上建立數據儀表板,GoDaddy的主機剛好可以拿來跑自動化程式或是儲存資料。

我在主機、伺服器管理方面並不是專家,但我認為資料的自動化抓取與運算需要花費較高的主機資源,因此把資料運算用的主機和架站用主機分開可能也是好事,避免前者不小心資源超量時,部落格也跟著一起掛掉。

另一個好處是資料備份。拿來做數據儀表板的資料很多都是公開而且免費的數據,就算資料弄丟,只要重新下載就好,因此根本不需要備份,如果有code的話在本機上用GitHub備份就可以了。相反,我的網站資料每天都會自動備份,小心駛得萬年船。

本文主旨

如果要在自己的電腦,也就是所謂的本機端(Local)執行數據儀表板專案,難度還算相當低,但當要把這個專案放到網站上,問題會複雜很多。以下的內容是關於我在初期遇到的種種困難,我找到可行的解決方案,以及我最後定案的方式。

我寫這篇文章的時候,我的數據儀表板專案已經有點頭緒,但還沒有具體的成果,若有新的進度與解法都會更新在這篇文章中,也期待你的意見與回饋。

另外,另然本機這個詞聽起來有點工程宅,但為了方便敘述,以下會繼續稱自己使用的電腦為「本機」,和網站的「主機」是兩個相對的概念。

專案規劃

要開始一個Side Project,你自己一定會有些想法。像我的第一個題目想做農產品市場行情的互動式儀表板,在政府資料開放平台上面有json格式的資料源可以使用,取得歷史資料的方式也很簡單。

雖然我的第一個專案的資料源很容易取得,但我相信第二個、第三個專案一定不會都那麼幸運,一定會遇到一些資料要透過爬蟲才能抓下來。先預設最壞的情況一定會發生,這樣在建立自己的SOP時才能保留足夠的彈性與擴充性,也方便日後其他小專案直接套用。

Python或R

數據分析最知名的程式語言是Python和R,除了數據分析外,也都可以做資料視覺化,網路上的資源和相關套件都算多,這部份可以說是難分軒輊。學習成本方面,我兩者都略懂,所以也不是我的主要考量。最後,在通用性這點上,我毫不猶豫選了Python。

什麼是通用性?首先,如前面提到的,某些時候我們一定會需要寫爬蟲來抓網路上的資料,而爬蟲本來就是Python的強項,R雖然也有相關套件,但網友們的評價似乎都不太優,有些事還是交給專業的來比較好。

其次是使用層面。R通常只會拿來做統計或數據分析,雖然我也聽過有人用R寫貪食蛇或踩地雷,但請不要把才能放在奇怪的地方。相反,Python除了數據分析外,工程師也會拿來寫app或網頁,使用層面更多,潛力無窮。

在以上兩次對決中,Python明顯占了上風,於是我毫無懸念的選了Python,下面的說明也會以Python為主。

你要把作品放在哪裡

我一開始就打算放在自己的網站上,所以這一項完全沒有考慮,但還是特別寫出來,讓大家的思考流程更清析。

如果你要把作品放在網站上,你當然要先有一個網站,要搞定網站管理、主機運作等麻煩事。如果你沒有網站,那可以放慮放在免費或付費空間上。以R來說,你可以上傳到RPubs上,像是我同事製作的COVID-19疫情狀況。Python的部份我沒有找過,但我相信有類似的資源可用。

流量控管

如果你把儀表板放在像RPubs的網路空間中,那你完全不用在乎流量問題,但假使你和我一樣想放在自己的主機上,這點你一定要注意。

某些時候,你使用的資料源檔案可能很大,到幾十MB甚至破百。當使用者瀏覽網頁時,你的檔案有多大,你的主機就必須傳送多大的流量出去,這很可怕。如果哪天你的作品不小心紅了,有大把大把的網友前來朝聖,你的主機流量會先爆掉,然後你會收到主機商的關切信,問你要不要花更多的錢升級方案。如果你擺爛裝死,那你的網站可能會被直接關掉。

啊,你說你的主機方案寫不限流量?那個看看笑笑就好了。

整體來說,我覺得流量問題是這個SOP規劃裡面最麻煩的部份,它也會影響視覺化工具的挑選。

選擇視覺化方案

雖然Python本身視覺化套件可以使用,像是Plotly,但是在流量考量下,我本來預期最理想的方案是Power BI。結果,人算不如天算。

Power BI

Power BI是微軟的視覺化工具,這邊我就不多作介紹。

在我原本的構想中,我打算把Python程式寫好後掛到主機上,讓它每天自動更新,並將資料儲存在主機資料庫中。同時,讓Power BI連線到主機的資料庫,一樣每天自動更新資料源。更新後,Power BI會將資料儲存在微軟的資料庫中,由於每天只更新一次,一個100MB的檔案一個月也才3GB左右,流量完全不是問題。最後,我再用Power BI製作互動式儀表板,並且使用Publish to web(public)功能,以iframe的方式嵌入在網頁中。


到ARON HACK網站看完整文章〈在網頁上發佈資料視覺化互動圖表 — 方案評估與技術問題全記錄〉

CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!