利用R Shiny 製作儀表板Dashboard

閱讀時間約 11 分鐘

前言

今天想做一些紀錄,幫助自己未來若忘記這些專案功能時,可以再回來review一下。會有這個專案動機其實是我所在的公司,偏向非營利的機構,但又時候可能有一些客戶(民眾)來申請資料,或者我們也有些業務需對一些特定民眾進行處置,老闆因為需要管理很多業務,我想說我在該機構負責統計規劃,應該可以在不花錢的前提下(如果有錢我直接買Tableau或Power BI直接結案),做一個簡單的儀表板(Dashboard)。
本文的重點並非是怎麼設計儀表板,那個比較偏重UI/UX專業,且不同的公司情境/老闆,所需要的排版及呈現也會有所差異,故本文著重是設計這個儀表版時,要用到的程式有哪些,大概需要做怎麼樣的前置設定才可以完成。

程式語言

統計軟體

本專案會用到的語言為統計的R語言,其實我想用Python,感覺未來在很多效能維護的部分會方便許多,但因為目前寫這篇文章時,我的Python還沒到很熟練,所以先用R shiny來執行,但未來應該會採用Python來改寫。

資料庫軟體

因本機構N年前資料庫就是採用SQL Server 2016,所以我就跟前人用這個軟體,所以本文就採用這個軟體。

網路儲存伺服器

其實我猜一般公司如果弄R shiny dashboard,應該不需要用到這個才對,但是因為我這邊資安有點嚴格,SQL主機資料庫採斷網,所以我中間有使用S牌的NAS。

Linux

Linux的版本很多一開始我是想用CentOS,但有一些新聞表示後續不維護,為了怕麻煩我直接用ubuntu server,因為筆者本身屬於統計背景,很多資工的東西其實真的沒碰過,所以在ubuntu的設定上是請IT同事協助,但要特別注意我聽說ubuntu 18跟20有些差異,類似網路或防火牆設定等,所以在下載時要注意一下,另外有些資安比較嚴格的地方,在安裝Linux可能會有錯誤,我們猜測可能是Linux安裝時會從網路抓很多mirror檔,但有時防火牆會檔下來,這也是在下載須注意的部分,如果資安很嚴格,可以直接下載完整版。

建置儀表板

指標(Metrics)設計

製作指標這件事,除非你是非常有經驗的人,或者是你是天生聰明的人,不然指標製作從零到有非常麻煩,如果你公司員工很少,沒有什麼人可以討論,我猜你需要在這一節花很久時間,如果很多人的話,直接問一下單位senior/PM,或者其他業務部門同事應該就解決了吧(其實人多只是找盲點快一點,但實務上還是要經過多輪討論),通常我不建議一開始直接找老闆,因為許多老闆根本不知道他要什麼,表面上他好像會是最關心指標數值的人,但很多老闆看到的都是結果,他們壓根不知道原因在哪,所以此時會需要儀表板的建立,用來幫助老闆釐清每個指標定義的先後順序。
首先,製作指標前,你需要先了解到底指標跟KPI有什麼不一樣,以及拆解指標的作法,在這裡我推薦North Star Metric(北極星指標),網路上有非常多資料可參考,我個人是推薦Mr. PM 下午先生,我覺得他很多資料都很完整,或者是他的朋友,Peter的文章也有稍微提到,大家也可以去參考一下,我整個專案裡面溝通協調還有指標設計,大概佔我快6-7成的時間,剩下撰寫R shiny、SQL等等反而不會花太多時間。

SQL Server 設定

SQL在這裡扮演一個非常重要的角色,需要每日定期幫我產製資料到特定位址的NAS資料夾,後續讓我的R Shiny可以抓取,這裡我採用微軟的sqlcmd公用程式去處理,如果要用BCP去處理應該也可,但我沒試過,希望有會得人可以教我一下,我的目標是每天早上5點執行一隻sqlcmd,而這隻sqlcmd需要執行4隻SQL code,我的做法是
  1. 先寫好4隻code.sql 儲存在C:\A資料夾
  2. 先新增一個txt檔,輸入我的sqlcmd如下:(記得改為自己的IP)
@echo off
echo (1)Delete file yesterday 
del \\192.168.1.1\dashboard\績效.csv
(192.168.1.1是我的NAS位置)
echo (2) Get the data
sqlcmd -S 192.168.1.2 -U Willy999 -P 123456qwe -d ABC123 -s "," -i "C:\A\績效.sql" -o "\\192.168.1.1\dashboard\績效_test.csv"
(192.168.1.2SQL的位置,Willy999我的帳號,123456qwe是我的密碼,ABC123你想要執行的SQL資料庫或資料庫快照集的名稱,執行我放在C:\A\績效.sql,產製出來的檔案放在\\192.168.1.1\dashboard\績效_test.csv)
echo (3) Remove hyphen line
findstr /R /C:"^[^-]*$" \\192.168.1.1\dashboard\績效_test.csv > \\192.168.1.1\dashboard\績效.csv
echo (4) Delete file 
del \\192.168.1.1\dashboard\績效_test.csv
3. 在記事本撰寫之後,另存新檔為bat檔(也可以直接改副檔名)
4. 使用Windows工作排程器,設定每天幾點開始執行,或者執行幾次bat檔等細節

R Shiny安裝在Linux設定

本節大概是最重要跟麻煩的,會有很多細節設定問題需要處理,只要有一點沒注意,整個Shiny都會無法使用。
  1. 照R Studio Shiny的官網先執行Ubuntu Packages for R裡面所有的指令,再開始執行下面這些指令(這是在Linux的介面執行)
#step1
sudo su - \
-c "R -e \"install.packages('shiny', repos='https://cran.rstudio.com/')\""
#Step2
sudo apt-get install gdebi-core
wget https://download3.rstudio.org/ubuntu-14.04/x86_64/shiny-server-1.5.17.973-amd64.deb
sudo gdebi shiny-server-1.5.17.973-amd64.deb
2. 接著要先確認剛剛安裝的Shiny Server是否成功,可用以下指令確認
#啟動Shiny Server(基本上只有第一次需要而已,除非你後來有重開Linux)
sudo systemctl start shiny-server
# 查看狀態(應該會顯示綠色的running,右邊會有開啟的時間)
systemctl status shiny-server
#重新啟動(Restart the server)
sudo systemctl restart shiny-server
# 關閉
systemctl stop shiny-server
3. 基本上很多網路資料大概到這邊都成功,但我運氣真的很差,又多遇到了很多問題,我猜很多人都需要安裝很多pkg在R Linux上面,我主要有遇到httr pkg安裝失敗,後來有找到方法解決,其實還有一些pkg一直安裝失敗,但要下一堆Linux指令,做一堆麻煩設定才能解決
4. 另外安裝所有想要的R pkg時,我發現在Linux要用root權限執行R,接著在執行,我一開始不知道,全部用user權限安裝完,發現完全都沒安裝成功,導致Shiny執行時根本吃不到pkg
5. 另外我有在Linux開一個NAS資料夾的權限(不過這邊就不多談了),方便我的R script指定路徑
6. 字形問題要特別留意,我自己環境測試的電腦是Win10,在上面執行R script預測字型是CP950,換到Linux預設字型會是UTF-8檢視,另外如果是在R Linux讀取SQL產出的csv,且有出現中文時,可能read.csv需要額外下
fileEncoding = "BIG5"
7. 最重要的是如果出現錯誤不要慌,要看Linux路徑向下的Log檔錯誤訊息為何
/var/log/shiny-server.log

Linux設定

1. 上傳檔案:如果你是本來Linux就很熟悉的人那應該怎麼做都沒關係,但如果是初學者,我會建議直接使用圖形化介面去傳輸檔案,我是用WinSCP來做,如果要用FileZilla也行
2. 資料夾權限:我第一次用WinSCP上傳產生失敗(被擋),後來發現是權限問題,ui.R跟server.R要同時放置在sample-apps向下的資料夾,所以要先開啟Linux的這個資料夾權限
cd /opt/shiny-server/samples/
#willy999是我的Linux user帳號
sudo chown willy999 sample-apps
3. 在sample-apps底下設定一個資料夾叫做"dashboard"(當然你要設置其他名稱也行),最後在瀏覽器key以下網址,應該就可以看到自己的作品了(3838 port 預設應該是打開才對)
#192.168.1.3是我的Linux IP
http://192.168.1.3:3838/sample-apps/dashboard/
4. 其實做到前面就完成了,但我執行Shiny有時候會遇到資料沒update在儀表板的問題,就是我每天早上自動用sqlcmd將csv檔放置在特定資料夾,可是儀表板上面的數字還是昨天的metrics,這種情形很少發生,但可能就是一個月一次,但是是不定期的,也就是可能20幾天,會有某一天儀表板的數字還是昨天的,我發現只要重新啟動R shiny Server就可以了,所以我後來乾脆每天早上重開,我使用Linux crontab自動排程這樣就可以了(如果有更好的解決方式 歡迎提供討論)
#每天早上6點使用開指令(要先進入root權限,不然重開Shiny server要輸入密碼,user權限不行)
crontab -e
0 6 * * * systemctl restart shiny-server

後記

其實在整個專案,學到最多的是應該是指標拆解的方法(或者Linux!?),其實筆者以前就學過很多統計方法、以及很多機器學習模型參數優化技術,但發現有時候要落實到第一線業務人員,讓大家看得懂的方法,應該是先做出圖表,找出大家真正重視的東西後,再來建模預測等等,我想會更適合。
    avatar-img
    0會員
    1內容數
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    你可能也想看
    Google News 追蹤
    Thumbnail
    嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
    Thumbnail
    🎗️本次主題成果展示:人力資訊分析 上集回顧 🔗EXCEL儀表板 | 人力資訊分析儀表板 #1 | 上手等級:入門🔗 🔗EXCEL儀表板 | 人力資訊分析儀表板 #2 | 上手等級:入門🔗 ♐人力資訊儀表板分集 本次人力資訊儀錶板預計分成5集依循漸進逐步完成 資料整
    Thumbnail
    🎗️本次主題成果展示:人力資訊分析 上集回顧 🔗EXCEL儀表板 | 人力資訊分析儀表板 #1 | 上手等級:入門🔗 ♐人力資訊儀表板分集 本次人力資訊儀錶板預計分成5集依循漸進逐步完成 資料整理與人力資訊取得 區域樞紐分析+環圈圖 (本集教學) 性別樞紐分析+圖像
    Thumbnail
    EXCEL設計新思維,即日起新增了一個新的房間【EXCEL儀表板】,什麼是EXCEL儀表板呢? Excel 儀表板是一種視覺化工具,用於展示和分析數據,幫助用戶快速理解和決策。以下是Excel儀表板的主要特點和功能簡介: 特點 視覺化展示: 使用圖表、圖形和表格來直觀展示數據。 常見的圖
    Thumbnail
    透過營運管理報表可以幫助你快速掌握新領域的樣貌與變化。本篇內容分享如何找出營運模式的關鍵構面,以及透過流程拆解、成果反推等方向來架構完整的管理報表,好的指標報表可以讓資料分析順利進行,甚至幫助你追蹤成果以及找到改善的方向。
    Thumbnail
    這篇文章介紹瞭如何撰寫KPI報告,包括如何呈現數據、重視形式、蹭熱度、提高總結的格局、靈活運用圖表等建議。同時強調瞭如何將問題轉化為挑戰、改革和試錯的方式進行表達,並提出了合理認錯、展現潛力等建議。
    Thumbnail
    本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。
    Thumbnail
    在這個星光閃爍的數據宇宙中,SQL是一把鑰匙,開啟了通往知識寶庫的大門。想像一下,每一條SELECT語句都像是一段魔法咒語,喚醒沉睡在數據庫深處的信息。今天,我們就要一起踏上這段探秘之旅,將揭開SQL基本查詢指令的神秘面紗,學習如何巧妙地與數據對話。
    Thumbnail
    本篇文章分享從製作數據分析報告到PPT簡報技巧,內容包括數據分析報告的構成要素、主體的清晰邏輯設定,以及製作精準PPT簡報的方法。提供從製作報告的過程到提升製作效率的建議,適合初入職場的數據分析新人們參考喔~
    Thumbnail
    對於許多企業而言,試算表是日常業務和決策過程中不可或缺的工具。它們被用於各種目的,從財務預算和盈虧分析到庫存管理和客戶數據記錄。然而,隨著業務的發展和數據量的增加,許多人會發現自己面臨著試算表管理和維護的挑戰,這些挑戰可能妨礙效率、準確性和生產力。 1. 數據管理的繁瑣性 試算表中數據的輸入
    Thumbnail
    1.系統開發與創作 1.1「精明管家系統」的「儀表板」功能微調: 排序:除了一個自訂順序的欄位 seq 以外,可以依照「當日漲幅」「持有市值」和「當天損益」等三個欄位排序,點一下欄位標題可正序,倒序切換。 1.2 系統經歷跨年考驗 年度第一個交易日,「儀表板」中未正確抓到「昨日收盤」,所以當
    Thumbnail
    嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
    Thumbnail
    🎗️本次主題成果展示:人力資訊分析 上集回顧 🔗EXCEL儀表板 | 人力資訊分析儀表板 #1 | 上手等級:入門🔗 🔗EXCEL儀表板 | 人力資訊分析儀表板 #2 | 上手等級:入門🔗 ♐人力資訊儀表板分集 本次人力資訊儀錶板預計分成5集依循漸進逐步完成 資料整
    Thumbnail
    🎗️本次主題成果展示:人力資訊分析 上集回顧 🔗EXCEL儀表板 | 人力資訊分析儀表板 #1 | 上手等級:入門🔗 ♐人力資訊儀表板分集 本次人力資訊儀錶板預計分成5集依循漸進逐步完成 資料整理與人力資訊取得 區域樞紐分析+環圈圖 (本集教學) 性別樞紐分析+圖像
    Thumbnail
    EXCEL設計新思維,即日起新增了一個新的房間【EXCEL儀表板】,什麼是EXCEL儀表板呢? Excel 儀表板是一種視覺化工具,用於展示和分析數據,幫助用戶快速理解和決策。以下是Excel儀表板的主要特點和功能簡介: 特點 視覺化展示: 使用圖表、圖形和表格來直觀展示數據。 常見的圖
    Thumbnail
    透過營運管理報表可以幫助你快速掌握新領域的樣貌與變化。本篇內容分享如何找出營運模式的關鍵構面,以及透過流程拆解、成果反推等方向來架構完整的管理報表,好的指標報表可以讓資料分析順利進行,甚至幫助你追蹤成果以及找到改善的方向。
    Thumbnail
    這篇文章介紹瞭如何撰寫KPI報告,包括如何呈現數據、重視形式、蹭熱度、提高總結的格局、靈活運用圖表等建議。同時強調瞭如何將問題轉化為挑戰、改革和試錯的方式進行表達,並提出了合理認錯、展現潛力等建議。
    Thumbnail
    本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。
    Thumbnail
    在這個星光閃爍的數據宇宙中,SQL是一把鑰匙,開啟了通往知識寶庫的大門。想像一下,每一條SELECT語句都像是一段魔法咒語,喚醒沉睡在數據庫深處的信息。今天,我們就要一起踏上這段探秘之旅,將揭開SQL基本查詢指令的神秘面紗,學習如何巧妙地與數據對話。
    Thumbnail
    本篇文章分享從製作數據分析報告到PPT簡報技巧,內容包括數據分析報告的構成要素、主體的清晰邏輯設定,以及製作精準PPT簡報的方法。提供從製作報告的過程到提升製作效率的建議,適合初入職場的數據分析新人們參考喔~
    Thumbnail
    對於許多企業而言,試算表是日常業務和決策過程中不可或缺的工具。它們被用於各種目的,從財務預算和盈虧分析到庫存管理和客戶數據記錄。然而,隨著業務的發展和數據量的增加,許多人會發現自己面臨著試算表管理和維護的挑戰,這些挑戰可能妨礙效率、準確性和生產力。 1. 數據管理的繁瑣性 試算表中數據的輸入
    Thumbnail
    1.系統開發與創作 1.1「精明管家系統」的「儀表板」功能微調: 排序:除了一個自訂順序的欄位 seq 以外,可以依照「當日漲幅」「持有市值」和「當天損益」等三個欄位排序,點一下欄位標題可正序,倒序切換。 1.2 系統經歷跨年考驗 年度第一個交易日,「儀表板」中未正確抓到「昨日收盤」,所以當