ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • R로 웹 애플리케이션 만들기, R Shiny의 기본
    R 프로그래밍 2023. 2. 28. 20:38
    반응형

    R Shiny 기본 활용법

    R Shiny는 R 언어를 이용하여 대화형 웹 애플리케이션을 만들 수 있는 패키지입니다. R 언어를 이용하여 데이터 분석을 수행하고, 이를 웹 상에서 보여줄 수 있습니다. R Shiny를 사용하면 대용량 데이터셋을 쉽게 탐색하고, 데이터 분석 결과를 공유할 수 있습니다.

    1. Shiny App 생성

    Shiny App을 생성하기 위해서는 shiny 패키지를 설치해야 합니다. 설치가 완료되면, runApp() 함수를 이용하여 애플리케이션을 실행시킬 수 있습니다. 예를 들어, 다음과 같이 간단한 Shiny App을 만들 수 있습니다.

    library(shiny)
    
    ui <- fluidPage(
       titlePanel("Hello Shiny!"),
       sidebarLayout(
          sidebarPanel(
             sliderInput("obs",
                 "Number of observations:",
                 min = 0,
                 max = 1000,
                 value = 500)
          ),
          mainPanel(
             plotOutput("distPlot")
          )
       )
    )
    
    server <- function(input, output) {
       output$distPlot <- renderPlot({
          hist(rnorm(input$obs))
       })
    }
    
    shinyApp(ui = ui, server = server)
    

    위 코드는 "Hello Shiny!"이라는 제목이 달린 Shiny App을 생성하는 코드입니다. 애플리케이션은 sidebarPanel에 위치한 sliderInput을 조정하면 mainPanel에 위치한 plotOutput을 업데이트합니다. 위 코드에서는 서버 부분에서 입력값을 이용하여 정규분포에서 생성한 데이터를 히스토그램으로 시각화합니다.

    2. Reactive Programming

    R Shiny에서는 Reactive Programming이라는 개념을 이용하여 애플리케이션을 구현합니다. Reactive Programming은 사용자 입력에 따라 반응하는 컴퓨터 프로그래밍 패러다임입니다. Shiny App에서는 사용자가 입력한 값이나 선택한 옵션 등이 변경되면, 이에 따라 애플리케이션이 반응하여 변경된 값을 처리하고, 새로운 출력 결과를 생성합니다. 이러한 기능은 reactive() 함수를 이용하여 구현합니다. reactive() 함수는 입력 값을 받아 처리하고, 결과 값을 캐싱합니다. 결과 값을 사용하는 부분에서는 reactive() 함수를 호출하면 결과 값을 가져옵니다. 이를 이용하여 애플리케이션의 출력 결과를 업데이트합니다.

    3. Shiny Widgets

    Shiny App에서는 다양한 Widget을 이용하여 사용자 입력을 받을 수 있습니다. Shiny Widgets은 사용자 입력을 받아 처리하고, 결과 값을 생성하는 기능을 수행합니다. Shiny App에서 가장 많이 사용되는 Widget은 다음과 같습니다.

    • textInput : 텍스트를 입력할 수 있는 입력 창
    • selectInput : 선택할 수 있는 드롭다운 메뉴
    • checkboxInput : 체크박스
    • radioButtons : 라디오 버튼
    • sliderInput : 슬라이더

    각 Widget은 다음과 같이 구성됩니다.

    widgetInput("widgetID", "Widget Label", defaultValue)

    예를 들어, 다음과 같이 selectInput을 이용하여 데이터를 선택할 수 있는 Widget을 만들 수 있습니다.

    selectInput("dataset", "Choose a dataset:", 
                  choices = c("iris", "mtcars", "ChickWeight"))

    4. Shiny Output

    Shiny App에서는 출력 결과를 생성하기 위해 다양한 Output을 사용할 수 있습니다. Output은 다음과 같은 종류가 있습니다.

    • plotOutput : 그래프 출력
    • tableOutput : 테이블 출력
    • textOutput : 텍스트 출력
    • uiOutput : 동적 UI 출력
    • verbatimTextOutput : 텍스트 출력(백업 모드)

    각 Output은 다음과 같이 구성됩니다.

    output$outputID <- renderOutput({ code to generate output })

    예를 들어, 다음과 같이 plotOutput을 이용하여 그래프를 출력할 수 있습니다.

    output$distPlot <- renderPlot({
       hist(rnorm(input$obs))
    })

    5. Shiny Layout

    Shiny App에서는 출력 결과를 배치하기 위해 다양한 레이아웃을 사용할 수 있습니다. 가장 기본적인 레이아웃은 fluidPage와 sidebarLayout입니다. fluidPage는 전체 페이지를 사용하는 레이아웃으로, sidebarLayout은 사이드바와 메인 화면을 각각 배치하는 레이아웃입니다. 또한, tabPanel을 이용하여 탭을 생성하여 출력 결과를 배치할 수도 있습니다.

    예를 들어, 다음과 같이 sidebarLayout을 이용하여 레이아웃을 구성할 수 있습니다.

    ui <- sidebarLayout(
       sidebarPanel(
          selectInput("dataset", "Choose a dataset:", 
                      choices = c("iris", "mtcars", "ChickWeight"))
       ),
       mainPanel(
          plotOutput("distPlot"))
    )

    또는, 다음과 같이 fluidPage를 이용하여 레이아웃을 구성할 수 있습니다.

    ui <- fluidPage(
       titlePanel("My Shiny App"),
       sidebarLayout(
          sidebarPanel(
             selectInput("dataset", "Choose a dataset:", 
                         choices = c("iris", "mtcars", "ChickWeight"))
          ),
          mainPanel(
             plotOutput("distPlot")
          )
       )
    )

    탭을 이용하여 출력 결과를 구성하는 경우에는 다음과 같이 구현할 수 있습니다.

    ui <- fluidPage(
       titlePanel("My Shiny App"),
       tabsetPanel(
          tabPanel("Plot", 
                   sidebarLayout(
                      sidebarPanel(
                         selectInput("dataset", "Choose a dataset:", 
                                     choices = c("iris", "mtcars", "ChickWeight"))
                      ),
                      mainPanel(
                         plotOutput("distPlot")
                      )
                   )
          ),
          tabPanel("Table", 
                   sidebarLayout(
                      sidebarPanel(
                         selectInput("dataset", "Choose a dataset:", 
                                     choices = c("iris", "mtcars", "ChickWeight"))
                      ),
                      mainPanel(
                         tableOutput("table")
                      )
                   )
          )
       )
    )

    6. Shiny App 실행하기

    Shiny App을 실행하기 위해서는 runApp() 함수를 이용합니다. runApp() 함수에는 ui와 server 객체를 인자로 전달합니다.

    shinyApp(ui, server)

    예를 들어, 다음과 같이 Shiny App을 실행할 수 있습니다.

    shinyApp(ui = fluidPage(
       titlePanel("My Shiny App"),
       sidebarLayout(
          sidebarPanel(
             selectInput("dataset", "Choose a dataset:", 
                         choices = c("iris", "mtcars", "ChickWeight"))
          ),
          mainPanel(
             plotOutput("distPlot")
          )
       )
    ), 
    server = function(input, output) {
       output$distPlot <- renderPlot({
          hist(rnorm(input$obs))
       })
    })

     

    Shiny는 R 언어로 웹 어플리케이션을 개발하는 것을 가능케 하는 패키지입니다. Shiny를 사용하면 R 언어로 만들어진 다양한 분석 결과물을 웹에서 쉽게 공유할 수 있습니다. 본 포스트에서는 Shiny App의 기본적인 구성 요소와 실행 방법에 대해 살펴보았습니다. 이를 바탕으로 Shiny App을 더욱 효과적으로 개발할 수 있을 것입니다.

    반응형

    댓글

Designed by Tistory.