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

在網頁上發佈動態資料圖表 – 方案評估與技術問題全記錄

目錄

原始文章

在網頁上發佈動態資料圖表 – 方案評估與技術問題全記錄


前情提要

事情是這樣的,這個網站是用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上,像是我同事製作的各國武漢肺炎疫情狀況

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的方式嵌入在網頁中。

Publish to web(public)
Power BI

理想雖然豐滿,現實卻總是骨感。在2020年初,Power BI進行了一次更新,一般使用者點擊Publish to web(public)後,會出現Contact your admin to enable embed code creation,必須由管理員啟用你的embed權限後才可以使用。

Power BI-Contact your admin to enable embed code creation

網路上有些教學說,你可以到右上角齒輪的Settings > Admin portal,在裡面開啟一個神密的按鈕後就可以打完收工,問題是這個解法好像只適用於Premium帳號,也就是說一般個人帳號或是Pro帳號都不能再把Power BI報表公開嵌入在網頁上(我的帳號是試用期版的Pro),但在更新前已產生的嵌入碼則可以繼續使用。

Power BI-Admin portal

網友們原本以為這是更新後的bug,但看完這篇文章下方的留言後,微軟好像是有計畫性的執行這項政策,可能他們也是因為流量吃太兇,不得已只好拿免費使用者開刀吧。期望未來微軟會進一步讓Power BI Pro的使用者也可以使用此功能,一個月NT300也不算貴,但也只能期望。總之,此路不通。

Tableau

Tableau是另外一套知名的BI(Business intelligence)軟體,經常被拿來和微軟的Power BI作比較。先不管它們到底哪個比較好用,Tableau的價格對個人型使用者來說很不親民,打叉。

Tableau

Grafana Labs

在兩個最知名的解決方案都宣告無望後,我繼續尋找與前兩者類似,但相對規模與知名度都比較小的方案。

Grafana Labs是提供開源(Open Source)的產品,目前看起來只對企業收費,一般使用者可以限制條件下免費使用,並且可以選擇放在自己的主機,或是放在Grafana的主機上,由他們代管,但最多只能建立五個Dashboard。

Grafana Labs

另外,我在接觸新的品牌或產品時,習慣用SimilarWeb偷看一下他們的網站流量,避免不小心挑了一間隨時會消失的公司。Grafana Labs在這部份表現良好,每個月有近70萬的訪次。

Grafana Labs

評估之後,我將Grafana Labs列為可行選項之一,打勾。

freeboard

freeboard和Grafana有點像,但必須付費,最低階的方案每月12塊美金,不算貴。但它在網站上沒有提到資料能不能放在他們的主機,不過freeboard提供了30天的試用期,如果需要的話可以自己試試看。

freeboard

流量部份,freeboard在SimilarWeb上顯示不出數據,代表流量過少。以我的經驗,只要每月訪次超過50000就會在SimilarWeb上顯示數據。

整體來說,freeboard的流量還不多,但似乎也是個可行的方案。雖然主機問題我還沒搞清楚,但先收著當備案,打勾。

freeboard

在虛擬主機上安裝Python與套件

選定視覺化解決方案後,我打算開始在我的GoDaddy主機上安裝Python,結果在安裝套件這一關就出了問題。

Godaddy_Python_App

Error
Could not open requirements file: [Errno 2] No such file or directory: ‘python/pip’ You are using pip version 9.0.1, however version 20.0.2 is available. You should consider upgrading via the ‘pip install –upgrade pip’ command.

我根據以上錯誤訊息upgrade pip,結果還是失敗。

我不確定我的執行方式完全正確,可能是指令輸入錯誤或其他技術問題,這已經超出我的理解範圍,但這也帶出了另一個隱憂:我的GoDaddy方案是Linux虛擬主機,只能操作cPanel,沒有根目錄(root)的權限,就算我這一關打通了,在虛擬主機的限制下,未來可能會有其他未知的問題發生。

另外,根據我的理解,我把Python檔案上傳到主機上後,好像只能全部執行,不能像是在編輯器(IDE)或是IPython Notebook一樣執行其中幾行,這在程式的測試與Debug上非常不方便(或是我又沒有找對方法?)。

總之,我又開始尋找新的解決方案,無奈地踏上全新的旅程。

以大部份的主機商來說,他們都說我的主機上可以安裝Python喔,你用了我的主機後,不管要裝網站或是Python應用程式,所有願望一次滿足。但我認為,Python畢業不是這些主機商的主力業務,所以在技術支援上不一定這麼完善。這也是我後來放棄GoDaddy,選擇把網站移到SiteGround的原因,因為後者很明確的專注於WordPress上,而且他們在客服方面真的沒話說。

各種方案與價錢

PythonAnywhere的費用其實也不貴,最低階的付費方案為USD$5/月,而且你可以根據自己的需求客製化方案(我要的就是這個!)。

目前我已經成為付費會員,並成功將Plotly互動式儀表板部署到主機上,可以參考教學影片〈在PythonAnywhere佈署Python Dash儀表板〉及專案成果。

PythonAnywhere
PythonAnywhere

專案成果

〈台股歷史股價與趨勢預測〉

A
Aron

以前用MIX這個名字在網路打滾,後來改為Aron。工業設計系畢業,曾任職知名品牌行銷企劃,做點設計,寫文案也寫網站;目前擔任零售業數據分析師。最近開始練格鬥和Python量化投資。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *