본문 바로가기

R

SHINY 해체

728x90
반응형

Rshiny 사용방법

 

https://shiny.rstudio.com/gallery/

 

 

 

R shiny 무엇인가

R 강력한 그래픽 기능과 통계 분석 능력을 이용하고,

사용자 상호작용을 쉽게 만들 있는 언어를 말한다.

 

샤이니 패키지를 이용해서 편하게 사용자 인터페이스(User Interface)

이용할 있다.

 

 

 

■ R 샤이니 기본 골격

유져 인터페이스           서버

                            

       frontier                            backend tier

 

 

 

 

샤이니 기본 예제1

install.packages("DT")

library(DT)

library(shiny)

library(ggplot2)

head(mpg)

str(mpg)

summary(mpg)

 

 

# A tibble: 6 x 11
  manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class 
  <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr> 
1 audi         a4      1.8  1999     4 auto(l5)   f        18    29 p     compact
2 audi         a4      1.8  1999     4 manual(m5) f        21    29 p     compact
3 audi         a4      2    2008     4 manual(m6) f        20    31 p     compact
4 audi         a4      2    2008     4 auto(av)   f        21    30 p     compact
5 audi         a4      2.8  1999     6 auto(l5)   f        16    26 p     compact
6 audi         a4      2.8  1999     6 manual(m5) f        18    26 p     compact

 

 

 

샤이니의 기본 골격

 

1. 화면개발

ui   <- ......

 

2. 서버단 개발

server <- .......

 

3. 실행하는 명령어

shinyApp(ui = ui, server = server)

 

 

 

 

# Define UI ----

ui <- fluidPage(

  titlePanel("Basic DataTable"),

 

  # Create a new Row in the UI for selectInputs

  fluidRow(

    column(4,

           selectInput("man",

                       "Manufacturer:",

                       c("All",

                         unique(as.character(mpg$manufacturer))))

    ),

    column(4,

           selectInput("trans",

                       "Transmission:",

                       c("All",

                         unique(as.character(mpg$trans))))

    ),

    column(4,

           selectInput("cyl",

                       "Cylinders:",

                       c("All",

                         unique(as.character(mpg$cyl))))

    )

  ),

  # Create a new row for the table.

  DT::dataTableOutput("table")

)

 

 

)

 

# Define server logic ----

server <- function(input, output) {

  # Filter data based on selections

  output$table <- DT::renderDataTable(DT::datatable({

    data <- mpg

    if (input$man != "All") {

      data <- data[data$manufacturer == input$man,]

    }

    if (input$cyl != "All") {

      data <- data[data$cyl == input$cyl,]

    }

    if (input$trans != "All") {

      data <- data[data$trans == input$trans,]

    }

    data

  }))

 

 

}

 

# Run the app ----

shinyApp(ui = ui, server = server)

 

 

 

 

 


 

코드로 emp 적용시키기

#install.packages("DT")

 

#library(DT)

library(shiny)

library(ggplot2)

 

emp <- read.csv("D:\\data\\emp.csv", header=T)

 

# Define UI ----

ui <- fluidPage(            # 골격만드는 함수 fluidPage

  titlePanel("EMP DataTable"),   # 페이지네이밍. 이름 한글로 바꿔도 상관없음

 

 

  # Create a new Row in the UI for selectInputs

  fluidRow(    # 샤이니 페이지의 상단 카테고리들. (All있는 부분들)

    column(4,  # 숫자 4 All 부분의 크기. 1 하면 작아진다

           selectInput("job",  # job: ALL있는 부위를 지칭. 하단 서버단에서 쓰인다.

                       "job:",    # All콘솔창 있는 부분. 역시나 한글 아무거나 써도 된다.

                       c("All",

                         unique(as.character(emp$job))))  #직업을 출력하는데, 중복제거.

# "All" unique 컴바인 시켰다.

    ),

    column(4,

           selectInput("deptno",

                       "deptno:",

                       c("All",

                         unique(as.character(emp$deptno))))

    ),

    column(4,

           selectInput("sal",

                       "sal:",

                       c("All",

                         unique(as.character(emp$sal))))

    )

  ),

  # Create a new row for the table.

  DT::dataTableOutput("table")   # "table" 아래 output에서 그대로 쓰여야함.

# 명칭이 일치해야 .

 

)

 

 

)

 

# Define server logic ----

server <- function(input, output) {

  # Filter data based on selections

  output$table <- DT::renderDataTable(DT::datatable({

    data <- emp

    if (input$job != "All") {

      data <- data[data$job == input$job,]  # 조건만 지정, 열조건 없으니 전부 가져옴

    }

    if (input$deptno != "All") {

      data <- data[data$deptno == input$deptno,]

    }

    if (input$sal != "All") {

      data <- data[data$sal == input$sal,]

    }

    data

  }))

 

 

}

 

# Run the app ----

shinyApp(ui = ui, server = server)

 

 


 

 

 

 

 

문제109. 샤이니의 기본 화면을 실행하시오

(선생님이 주신 lesson_2 활용)

 

library(shiny)

 

# Define UI ----

ui <- fluidPage(

 

)

 

# Define server logic ----

server <- function(input, output) {

 

}

 

# Run the app ----

shinyApp(ui = ui, server = server)

 

기본골격. 아무것도 없음

 

 

 

 

문제110. ui 아래의 내용을 추가하시오

 

  library(shiny)

 

# Define UI ----

ui <- fluidPage(

  titlePanel("title panel"),

 

  sidebarLayout(

    sidebarPanel("sidebar panel"),

    mainPanel("main panel")

  )

)

 

# Define server logic ----

server <- function(input, output) {

 

}

 

# Run the app ----

shinyApp(ui = ui, server = server)

 


 

 

 

 

문제111. "sidebar panel" 오른쪽에 나오게 하시오.

  library(shiny)

 

# Define UI ----

ui <- fluidPage(

  titlePanel("title panel"),

 

  sidebarLayout(position = "right",    # mainPanel 이동안됨!

                sidebarPanel("sidebar panel"),

                mainPanel("main panel")

  )

)

 

# Define server logic ----

server <- function(input, output) {

 

}

 

# Run the app ----

shinyApp(ui = ui, server = server)

 

 

 

 

 

문제112. header 출력하시오


library(shiny)

 

# Define UI ----

ui <- fluidPage(

  titlePanel("My Shiny App"),

  sidebarLayout(

    sidebarPanel(),

    mainPanel(

      h1("First level title"),

      h2("Second level title"), 

      h3("Third level title"),

      h4("Fourth level title"),

      h5("Fifth level title"),

      h6("Sixth level title")

    )

  )

)

 

# Define server logic ----

server <- function(input, output) {

 

}

 

# Run the app ----

shinyApp(ui = ui, server = server)

 

글자크기는 명령어 적히는 순서에 따라 정해진다.

h6 h1 아래에 오면 2번째로 크게 출력된다.

 

 

이하 다음 기본 예제들(참고하시오)

 

  library(shiny)

 

# Define UI ----

ui <- fluidPage(

  titlePanel("My Star Wars App"),

  sidebarLayout(

    sidebarPanel(),

    mainPanel(

      h6("Episode IV", align = "center"),

      h6("A NEW HOPE", align = "center"),

      h5("It is a period of civil war.", align = "center"),

      h4("Rebel spaceships, striking", align = "center"),

      h3("from a hidden base, have won", align = "center"),

      h2("their first victory against the", align = "center"),

      h1("evil Galactic Empire.")

    )

  )

)

 

# Define server logic ----

server <- function(input, output) {

 

}

 

# Run the app ----

shinyApp(ui = ui, server = server)

 

 

 


문제6 . 아래와 같이 글씨의 색깔도 출력되게 하시오

library(shiny)

 

# Define UI ----

ui <- fluidPage(

  titlePanel("My Shiny App"),

  sidebarLayout(

 

    sidebarPanel(),

    mainPanel(

      p("p creates a paragraph of text."),

      p("A new p() command starts a new paragraph. Supply a style attribute to change the format of the entire paragraph.", style = "font-family: 'times'; font-si16pt"),

      strong("strong() makes bold text."),

      em("em() creates italicized (i.e, emphasized) text."),

      br(),

      code("code displays your text similar to computer code"),

      div("div creates segments of text with a similar style. This division of text is all blue because I passed the argument 'style = color:blue' to div", style = "color:blue"),

      br(),

      p("span does the same thing as div, but it works with",

        span("groups of words", style = "color:blue"),

#연속된 문장안에서 포인트 주고싶을 span 사용한다

        "that appear inside a paragraph.")

    )

  )

)

 

# Define server logic ----

server <- function(input, output) {

 

}

 

# Run the app ----

shinyApp(ui = ui, server = server)

 

 

문제7. 아래와 같이 이미지가 출력되게하시오 !

*mainPanel 이미지 불러오는 src 넣어서

이미지 추가도 가능하다

 

  library(shiny)

 

# Define UI ----

ui <- fluidPage(

  titlePanel("My Shiny App"),

  sidebarLayout(

    sidebarPanel(),

    mainPanel(

      img(src = "rstudio.png", height = 140, width = 400)

    )

  )

)

 

# Define server logic ----

server <- function(input, output) {

 

}

 

# Run the app ----

shinyApp(ui = ui, server = server)

 

 

 

 

 

문제113.

shiny 에서 모든걸 다룰 있는 필요기능 구현코드 확인하시오

 

  library(shiny)

 

# Define UI ----

ui <- fluidPage(

  titlePanel("Basic widgets"),

 

  fluidRow(

   

    column(3,

           h3("Buttons"),

           actionButton("action", "Action"),

           br(),

           br(),

           submitButton("Submit")),

   

    column(3,

           h3("Single checkbox"),

           checkboxInput("checkbox", "Choice A", value = TRUE)),

   

    column(3,

           checkboxGroupInput("checkGroup",

                              h3("Checkbox group"),

                              choices = list("Choice 1" = 1,

                                             "Choice 2" = 2,

                                             "Choice 3" = 3),

                              selected = 1)),

   

    column(3,

           dateInput("date",

                     h3("Date input"),

                     value = "2014-01-01"))  

  ),

 

  fluidRow(

   

    column(3,

           dateRangeInput("dates", h3("Date range"))),

   

    column(3,

           fileInput("file", h3("File input"))),

   

    column(3,

           h3("Help text"),

           helpText("Note: help text isn't a true widget,",

                    "but it provides an easy way to add text to",

                    "accompany other widgets.")),

   

    column(3,

           numericInput("num",

                        h3("Numeric input"),

                        value = 1))  

  ),

 

  fluidRow(

   

    column(3,

           radioButtons("radio", h3("Radio buttons"),

                        choices = list("Choice 1" = 1, "Choice 2" = 2,

                                       "Choice 3" = 3),selected = 1)),

   

    column(3,

           selectInput("select", h3("Select box"),

                       choices = list("Choice 1" = 1, "Choice 2" = 2,

                                      "Choice 3" = 3), selected = 1)),

   

    column(3,

           sliderInput("slider1", h3("Sliders"),

                       min = 0, max = 100, value = 50),

           sliderInput("slider2", "",

                       min = 0, max = 100, value = c(25, 75))

    ),

   

    column(3,

           textInput("text", h3("Text input"),

                     value = "Enter text..."))  

  )

 

)

 

# Define server logic ----

server <- function(input, output) {

 

}

 

# Run the app ----

shinyApp(ui = ui, server = server)

  

 

 

 

 

 

 

이미지를 넣고 맞추는 샤이니

 https://aidencahn.shinyapps.io/cifar10_densenet/

 

 


728x90
반응형

'R' 카테고리의 다른 글

그래프(산포도, 구글 그래프)  (0) 2019.03.09
그래프(원형,막대)  (0) 2019.03.09
SQL과 R과 비교(서브쿼리)  (0) 2019.03.09
SQL과 R과 비교(조인)  (0) 2019.03.09
SQL과 R과 비교(그룹함수)  (0) 2019.03.09