利用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
留言分享你的想法!
avatar-img
Willy的沙龍
0會員
1內容數
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
這篇文章介紹瞭如何撰寫KPI報告,包括如何呈現數據、重視形式、蹭熱度、提高總結的格局、靈活運用圖表等建議。同時強調瞭如何將問題轉化為挑戰、改革和試錯的方式進行表達,並提出了合理認錯、展現潛力等建議。
Thumbnail
這篇文章介紹瞭如何撰寫KPI報告,包括如何呈現數據、重視形式、蹭熱度、提高總結的格局、靈活運用圖表等建議。同時強調瞭如何將問題轉化為挑戰、改革和試錯的方式進行表達,並提出了合理認錯、展現潛力等建議。
Thumbnail
去年的職涯歷程由「一人行銷」晉階帶領新人,同時也帶領大專院生參與電商大賽並獲獎。這段過程有很多收穫和啟發。原本自己一個人可以從頭到尾,把一件事情完整執行,轉變為必須建立系統方法,才能把已知的事務傳遞給新手,並且協助他們也把事情做好。 這段過程,發現建立順暢的工作流程和文件,相當重要。
Thumbnail
去年的職涯歷程由「一人行銷」晉階帶領新人,同時也帶領大專院生參與電商大賽並獲獎。這段過程有很多收穫和啟發。原本自己一個人可以從頭到尾,把一件事情完整執行,轉變為必須建立系統方法,才能把已知的事務傳遞給新手,並且協助他們也把事情做好。 這段過程,發現建立順暢的工作流程和文件,相當重要。
Thumbnail
此篇文章我整理了一點日常工作小貼士,不是那種:如何開好會議、如何製作簡報,這種主題明確、有很完整的工作重點、技巧分享,就是幾點小小的我自己的體會。
Thumbnail
此篇文章我整理了一點日常工作小貼士,不是那種:如何開好會議、如何製作簡報,這種主題明確、有很完整的工作重點、技巧分享,就是幾點小小的我自己的體會。
Thumbnail
自今年起,我開始接手了公司的GLP規範之章程的建立,從零開始,到今年也建構了一年,過程中也對流程建立也有些心得,也深刻理解這不是件容易的事情,一方面需要釐清目標與現況資源的差距,在有意義的規範下河有限的資源創造出最可行的規範,是一門專業。此篇跟大家聊聊,如何從零到有。
Thumbnail
自今年起,我開始接手了公司的GLP規範之章程的建立,從零開始,到今年也建構了一年,過程中也對流程建立也有些心得,也深刻理解這不是件容易的事情,一方面需要釐清目標與現況資源的差距,在有意義的規範下河有限的資源創造出最可行的規範,是一門專業。此篇跟大家聊聊,如何從零到有。
Thumbnail
本文是給想用R shiny建立儀表板給大家看,但不知道如何開始的新手
Thumbnail
本文是給想用R shiny建立儀表板給大家看,但不知道如何開始的新手
Thumbnail
雖然標題是產品經理,但我想大家可能對專案開發比較有興趣。 為了讓整篇的含金量高一點,我會放入一些系統工程相關的東西 一般產品開發可能不需要到這麼嚴格。 專案管理及匯報 專案採購和產品採購 小趣談
Thumbnail
雖然標題是產品經理,但我想大家可能對專案開發比較有興趣。 為了讓整篇的含金量高一點,我會放入一些系統工程相關的東西 一般產品開發可能不需要到這麼嚴格。 專案管理及匯報 專案採購和產品採購 小趣談
Thumbnail
很多人其實並不知道如何正確設計學習指標,其實指標的意義並不僅僅是一個數字;好的指標設計是可以協助我們理解現況、找出問題並校正方向,本篇的閱讀與理解可能會花上30分鐘,但如果你有文中提到的一些管理問題,相信你會有所收穫。
Thumbnail
很多人其實並不知道如何正確設計學習指標,其實指標的意義並不僅僅是一個數字;好的指標設計是可以協助我們理解現況、找出問題並校正方向,本篇的閱讀與理解可能會花上30分鐘,但如果你有文中提到的一些管理問題,相信你會有所收穫。
Thumbnail
商業分析最重要的不是看數據說話,而是沿著人性的毛順順地摸下去。 好多年前的某個夜晚,大約半夜 12 點多的時候,我獨自一個人坐在公司 8 樓夾層的大會議室窗戶旁邊,看著窗外的街道,靜靜地抽著煙。
Thumbnail
商業分析最重要的不是看數據說話,而是沿著人性的毛順順地摸下去。 好多年前的某個夜晚,大約半夜 12 點多的時候,我獨自一個人坐在公司 8 樓夾層的大會議室窗戶旁邊,看著窗外的街道,靜靜地抽著煙。
Thumbnail
將使用者需求轉換成功能的步驟與方法,我們稱之為「product planning」(產品規劃)或「feature planning」(功能規劃);這可是個大學問,即使我自己經驗再豐富,也很難用三言兩語講得清楚。在本文中,先來談談將「大量而片段的資訊」收斂成「系統與概念」的步驟。
Thumbnail
將使用者需求轉換成功能的步驟與方法,我們稱之為「product planning」(產品規劃)或「feature planning」(功能規劃);這可是個大學問,即使我自己經驗再豐富,也很難用三言兩語講得清楚。在本文中,先來談談將「大量而片段的資訊」收斂成「系統與概念」的步驟。
Thumbnail
工作上推薦的生產力工具有哪些(電腦版雲端應用工具)? 從哪些管道學習生產力,和提昇工作效率的新知? 〔本篇文章原討論出自職場丼友:侯智薰〕
Thumbnail
工作上推薦的生產力工具有哪些(電腦版雲端應用工具)? 從哪些管道學習生產力,和提昇工作效率的新知? 〔本篇文章原討論出自職場丼友:侯智薰〕
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News