2015年8月8日

Speaker

About me

  • Currently study at NCCU for M.S. degree of statistic
    • data analysis
    • statistical methods
    • research some package application with R
    • learn some visualization skills
    • Familar with R、SQL、basic statistical methods

Outline

  • 套件介紹
    • What is Shiny ?
    • Why Shiny ?
  • 基本架構
    • 前置作業
    • Shiny架構
  • 實例講解
    • 以Hellow shiny為例
    • Code對照
    • 重點摘要
    • 事件驅動
    • 圖解總結
  • ShinyDemo呈現
    • 資料來源&參考依據
  • Next time ?

套件介紹

What is Shiny ?

  • Shiny是R-studio公司在2012年所釋出的套件,截至2013年4月發布0.4.0版
  • A web application framework for R
  • the nice stage for Statistician or some people who are not familar with coding
  • Shiny支援各類型的輸出格式:
    • 文字輸出 (Text output, 即R裡面的cat)
    • R格式輸出 (Printable Output, 即R裡面的print)
    • 表格輸出 (Table output, 即R套件xtable)
    • 圖片輸出 (Plot output, 即R裡面的plot同時支援R套件ggplot2)
  • Shiny支援HTML的表單輸入元件:
    • 諸如文字欄位(input)
    • 下拉式選單(select)
    • 多選核取方塊(checkbox)
    • 單選核取方塊(radio)
    • …etc

Why Shiny ?

  • 我:哥哥好想要有一個自己的網頁呈現自己的作品奧,可是我不會Javascrip也不懂html的語言 :( ,早知道考資工所 MTF ….
  • :廢欸,叫你好好寫R你就不聽!用R就可以寫了,你每次都把我的話當耳邊風,哀… 我命賤
  • :哀~不意外…
  • :教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~~教我辣~

So ?

Shiny的設計目標是希望不懂網頁設計的R使用者,可以在短時間內就能呈現自己的分析解果在網站上並使得使用者能以互動的方式去理解分析。

  • 建構一個app只需要短短幾行的程式碼
  • 不需要懂Javascrip
  • 不需要懂CSS
  • 不需要懂html
  • 支援了線上許多熱門套件包括(ggplot、plotly、googlevis…etc)
  • R使用者只要透過Shiny就能夠將你的分析結果、視覺化圖形、報表、模型、預測結果等等以互動網頁的方式呈現
  • 履歷、個人網站 Why not ?

基本架構

前置作業

  • 先到CRAN下載Shiny來安裝,並且試著執行範例(請一定要在本機上執行,在遠端伺服器上執行會出錯)
library(shiny)
#runExample("01_hello")
  • 在電腦隨意一個位置創建一個資料夾,此資料夾將是你的shinyap驅動的來源
  • 建立兩個新的r.scrip之後將這兩個scrip個別命名為ui.rserver.r,此時你會發現介面有所改變
  • 在命名玩的r.scrip出現了一個runApp,接下來的app內容都在此檔案下撰寫

Shiny架構

  • Shiny網頁架設共分為兩個部分且此兩個部分是同步的
  • User在瀏覽器看到的網頁,這部份的程式碼放在ui.R。實際上網頁的呈現,以及互動式的效果,都是由瀏覽器所執行。
  • 背景執行的R,這部份的程式碼放在server.R。這裡的R 是由開發者於佈署網頁應用時就啟動的,並靜靜地等待瀏覽器傳送參數。

實例講解

以Hellow shiny為例

Code對照

重點摘要

library(shiny)
str(pageWithSidebar)
## function (headerPanel, sidebarPanel, mainPanel)
  • UI.R
    • 當使用者打開瀏覽器瀏覽時,R 會將shinyUI的參數轉換成瀏覽器中的網頁元件
    • shinyUI的參數都對應到一個網頁元件,而這些物件的參數又分別對應到元件中的元件,形成一種巢狀結構
    • InputID是瀏覽器跟Server.R溝通的依據,不可缺少
    • headerPanel對應到標題部份的網頁元件,也就是 Hello Shiny!
    • sidebarPanel對應著控制面板(輸入)部份的網頁元件,也就是網頁灰色區塊,為input部分
    • mainPanel對應著顯示面板(輸出)部份的網頁元件,若沒設定sidebarPanel,可直接設在此處, 此處為灰色以外的設計部分

事件驅動

library(shiny)
str(shinyServer)
## function (func)
  • Server.R
    • server.r只有一個函數:function(input, output) { 所有伺服器供應內容皆寫在這裡面 }
    • Input代表使用者看網頁時點選輸入的參數,此參數會傳送給Server.R
    • Output代表Server.r接收到參數設定後經過運算重新得到的數據,傳送給Output,output再傳送至使用者畫面(UI)

圖解總結

ShinyDemo呈現

資料來源&參考依據

Next time ???