R Shiny를 이용하면 탐색적 데이터 분석(Exploratory Data Analysis)을 할 때 요약 통계량, 그래프를 변수, 기간, 통계량, 그래프 종류 등을 자유롭게 조건 선택하고 조합하여 편리하게 사용할 수 있습니다. 

 

이번 포스팅에서는 R Shiny로 DataFrame 의

(1) 특정 연속형 변수를 선택하고 

(2) 분석하고 싶은 요약 통계량을 선택했을 때 

(3) 요약 통계량 결과를 interactive하게 볼 수 있는 웹 애플리케이션을 만들어보겠습니다. 

 

Output Image는 아래와 같습니다. 

 

[ R Shiny 를 활용한 연속형 변수 요약 통계량 조회 웹 애플리케이션 화면 ]

R Shiny - Summary Statistics

 

먼저 R Studio 에서 'File > New File > Shiny Web App' 을 선택해주세요. 

 

 

다음으로, (a) 애플리케이션의 이름, (b) 애플리케이션 유형 (간단한 것이면 하나의 파일에 UI와 Server를 함께 만드는게 편하구요, 복잡한 것이면 ui.R, server.R 의 두 개의 파일로 분리하는 것이 편리함), (c) 애플리케이션 저장 경로 (위치)를 지정해주고, Create 해줍니다. 

 

 

이제 R Shiny 코드를 짜볼 텐데요,

먼저 UI 부분에서는 (a) 왼쪽 사이드바에서 분석 대상이 되는 변수를 콤보 박스로 선택하는 화면, (b) 왼쪽 사이드바에서 요약 통계량을 선택하는 체크 박스 화면, (c) 중앙 메인 패널에서 보여줄 제목과 요약 통계량 테이블을 지정해줍니다. 

 

그리고 Server 부분에서는 (a) MASS 패키지의 Cars93 데이터 프레임으로 부터 일부 6개의 연속형 변수 데이터 읽어오기, (b) 요약 통계량 계산하기 (단, 결측값은 제외하기), (c) 요약 통계량들을 하나의 데이터 프레임으로 만들기, (d) 데이터 프레임 테이블을 렌더링 해줍니다. 

 

#------------------------------------------------------------------ 
# Summary Statistics of a Continuous Variable using RShiny 
#------------------------------------------------------------------

library(shiny)

# Define UI for application that calculate summary statistics
ui <- fluidPage(
   
   # Application title
   titlePanel("Descriptive Statistics of Automobiles"),
   
   # select Input from lists 
   sidebarPanel(
     selectInput("var", "Select a Variable to Analyze", 
                 choice = c("Price"=1, 
                            "MPG.city"=2, 
                            "MPG.highway"=3, 
                            "EngineSize"=4, 
                            "Horsepower"=5, 
                            "RPM"=6), 
                 selectize = F), 
     
     checkboxGroupInput("checked", "Check summary statistics", 
                        list(mean = "mean", 
                             std_dev = "std_dev", 
                             median = "median", 
                             min = "min", 
                             max = "max", 
                             obs_num = "obs_num", 
                             quartile_1 = "quartile_1", 
                             quartile_3 = "quartile_3"), 
                        selected = "mean")
   ), 
   mainPanel(
     h4("Summary Statistics of a variable"),
     tableOutput("desc_statistics")
   )
)

# Define server logic required to calculate summary statistics
server <- function(input, output) {
  # read dataset
  library(MASS)
  descriptive <- Cars93[,c("Price", "MPG.city", "MPG.highway", "EngineSize", "Horsepower", "RPM")]

  output$desc_statistics <- renderTable({
    # summary statistics
    variable <- colnames(descriptive)[as.numeric(input$var)]
    mean <- mean(descriptive[, as.numeric(input$var)], na.rm=TRUE)
    std_dev <- sd(descriptive[, as.numeric(input$var)], na.rm=TRUE)
    median <- median(descriptive[, as.numeric(input$var)], na.rm=TRUE)
    min <- min(descriptive[, as.numeric(input$var)], na.rm=TRUE)
    max <- max(descriptive[, as.numeric(input$var)], na.rm=TRUE)
    obs_num <- nrow(descriptive)
    quartile_1 <- quantile(descriptive[, as.numeric(input$var)], 0.25, na.rm=TRUE)
    quartile_3 <- quantile(descriptive[, as.numeric(input$var)], 0.75, na.rm=TRUE)
    
    # make a DataFrame
    desc_summary <- data.frame(variable, 
                               mean, std_dev, 
                               median, min, max, 
                               obs_num, 
                               quartile_1, quartile_3)
    
    # render Table
    desc_summary[, c("variable", input$checked), drop = FALSE]
  })
}

 


# Run the application 
shinyApp(ui = ui, server = server)

 

 

마지막으로, shinyApp(ui = ui, server = server) 로 UI와 Server를 지정해주고, 저장한 후에, RStudio 우측 상단의 'Run App' 단추를 눌러서 실행시켜주면 됩니다. 

 

많은 도움이 되었기를 바랍니다. 

 

728x90
반응형
Posted by Rfriend
,