Publish A Interactive Data Visualization Dashboard On A Website

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

目錄

    原始文章

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


    前情提要

    事情是這樣的,這個網站是用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的方式嵌入在網頁中。

    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上非常不方便(或是我又沒有找對方法?)。

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

    PythonAnywhere – 專業的Python網頁應用程式解決方案

    評估過繼續使用虛擬主機可能會有的風險後,我考慮過使用個人主機,或是GCP(Google Cloud Platfrom)或是Azure之類的選項,費用相對高不說,想到還要自己搞定一堆複雜的技術問題就讓人頭痛。同時,我也不禁懷疑,現在要做數據分析的人那麼多,應該會有公司針對這些人提供專屬的解決方案才對啊,然後我找到了針對Pyhon網頁應用程式提供主機管理服務的PythonAnywhere

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

    各種方案與價錢

    PythonAnywhere的費用其實也不貴,最低階的付費方案為USD$5/月,而且你可以根據自己的需求客製化方案(我要的就是這個!)。目前我已經成為付費會員,並成功將Plotly互動式儀表板部署到主機上,可以參考教學影片〈在PythonAnywhere佈署Python Dash儀表板〉及專案成果。

    PythonAnywhere
    PythonAnywhere

    發展性與穩定性

    2022年6月,Anaconda宣佈買下PythonAnywhere,這讓我對PythonAnywhere的未來發展與穩定度更有信心了呢。詳細內容請參考Business Wire上的 Anaconda Acquires PythonAnywhere to Expand Python Team Collaboration in the Cloud

    專案成果

    〈Google Trends Enhanced 搜尋趨勢分析威力加強版〉
    〈調香秘策 – 知名品牌香水調性分析與搭配〉
    〈台股歷史股價與趨勢預測〉



    推薦文章

    Aron

    搭載商業思維的資料科學家,工業設計系畢業,曾任職知名品牌行銷企劃。下班後寫機器學習模型,寫網站,也寫文章。興趣是把Side Project當成創業題目來玩,把人生當成遊戲破關。

    facebook telegram

    推薦書單

    禁咒師 卷壹〈新裝版〉
    禁咒師 卷壹〈新裝版〉 ⭐⭐⭐⭐⭐
    研究生完全求生手冊:方法、秘訣、潛規則
    研究生完全求生手冊:方法、秘訣、潛規則 ⭐⭐⭐⭐⭐
    人生複本
    人生複本 ⭐⭐⭐⭐⭐
    阿共打來怎麼辦
    阿共打來怎麼辦 ⭐⭐⭐⭐

    發佈留言

    • * 表示必填欄位
    • 您填寫的電子郵件不會被公開
    • 請確認您的電子郵件正確無誤,當您的留言收到新的回覆時,我們會寄送通知信件給您

    發佈留言必須填寫的電子郵件地址不會公開。