大家還記得鐵人賽一開始介紹使用的user.csv 和orders.csv 嗎? 今天要介紹的內容就是如何將這一整個分析放到shiny 上!,我們會用到的是navbarPage,我們就用範例來解釋吧。
navbarPage("App Title",
tabPanel("Plot"),
tabPanel("Summary"),
tabPanel("Table")
navbarPage第一個參數是標題,後面可以接續許多tabPanel,所以換成我們的例子如下:
shinyUI(navbarPage("Shiny 大雜燴",
tabPanel("地址分析",fluidRow(
column(3,
h4("API抓取經緯度"),
actionButton("request", "取資料"),
hr(),
numericInput("seed", h3("種子碼"), value = 20180112),
numericInput("k_value", h3("k值"), value = 10),
actionButton("do", "執行")
),
column(9,
tabsetPanel(
tabPanel("地址表單", tableOutput('addressTable')),
tabPanel("地址分佈圖", plotOutput("allAddressPlot", height = "800px")),
tabPanel("K-means結果分佈圖", plotOutput("classifiedAddressPlot", height = "800px"))
)
)
)),
tabPanel("訂單分析"),
tabPanel("會員分析")
))
呈現結果如下:
所以直接在tabPanel第二個參數放上原本的畫面配置就可以達到我們的效果了。
再來我們再來寫訂單分析和會員分析的ui,訂單分析就和先前寫的過濾方式一樣。
tabPanel("訂單分析",fluidRow(
column(3,
h4("過濾"),
sliderInput('price', '價格多少以上',
min=0, max=12000, value=300,
step=100, round=0),
selectInput('payment', '付款方式', c("信用卡",
"ATM轉帳",
"貨到付款",
"現金",
"無",
"其他"))
),
column(9,
tableOutput('ordersTable')
)
))
其對應的server程式碼如下:
output$ordersTable <- renderTable({
orders %>%
filter(input$price < PRICE, input$payment == PAYMENTTYPE)
})
再來會員的部分,我希望能做出電話過濾的效果,所以ui部分我這樣子寫。
tabPanel("會員分析",fluidRow(
column(3,
h4("user資料"),
textInput("phone_number", h3("手機號碼"), value = "")
),
column(9,
tableOutput('userTable')
)
))
其對應的server 程式碼為
output$userTable <- renderTable({
if(input$phone_number=="") return(user)
user %>%
filter(str_detect(MOBILE, input$phone_number))
})
這就完成了,另外如果說頁籤太多,我們可以再用navbarMenu將分頁合起來,例如訂單分析和會員分析,我們合稱電子商務分析。
navbarMenu("電子商務分析",
tabPanel("訂單分析",fluidRow(
column(3,
h4("過濾"),
sliderInput('price', '價格多少以上',
min=0, max=12000, value=300,
step=100, round=0),
selectInput('payment', '付款方式', c("信用卡",
"ATM轉帳",
"貨到付款",
"現金",
"無",
"其他"))
),
column(9,
tableOutput('ordersTable')
)
)),
tabPanel("會員分析",fluidRow(
column(3,
h4("user資料"),
textInput("phone_number", h3("手機號碼"), value = "")
),
column(9,
tableOutput('userTable')
)
)
))
所產生的畫面如下:
以上就是今天的介紹,鐵人賽也接近尾聲了,希望這一系列的教學文大家可以接受!
ref:
day28原始碼