[데이터 통계분석 R언어] Shiny 웹앱 개발

 

1. 최종 Shiny 응용프로그램 모습

정규분포에서 표본을 추출해서 히스토그램을 화면에 출력하는 간단한 예제다. 히스토그램 간격(bin)을 조절하는 제어 변수를 추가하고 슬라이더바(Sliderbar) 사용자 인터페이스를 통해 제어한다. 최종적으로 개발하려고 하는 shiny 웹앱은 다음과 같다.

히스토그램 Shiny 응용프로그램

인터랙티브 실습 코드가 필요한 경우 shiny-app-interactive.Rmd 파일을 다운로드 받아 사용한다. yaml 헤더에 runtime: shiny가 추가되어 있다.

 

2. Shiny 응응프로그램 개발 순서

아무것도 없는 shiny 템플릿을 가지고 차근히 시작한다. fluidPage()에 인자를 요소로 추가하고 Input() 함수로 반응형 입력을 만들고 Output() 함수로 반형형 출력결과를 생성한다. 마지막에 서버함수를 통해 입력과 출력을 조립한다.

Shiny 응응프로그램 5단계 개발 순서

 

2.1. 템플릿(Template)으로 시작

uiserver 템플릿을 지정하여 실행시키면 아무것도 보이지 않지만 정상적으로 실행되고 있는 것이다. 다음 코드에서 shinyApp()을 제거하고 shinyApp(ui = ui, server = server)을 추가해서 app.R로 저장하고 실행하게 되면 된다. 이하 아래 공통.

shinyApp()을 코드에 추가하고 shinyApp(ui = ui, server = server)을 제거한 이유는 rmarkdown 파일에서 shiny 앱을 올리기 위한 것이니 shinyApp() 내부 uiserver만 집중하자.

ui <- fluidPage()
server <- function(input, output) {}
shinyApp(ui = ui, server = server)
 

2.2. fluidPage()에 인자로 요소를 추가

ui <- fluidPage("데이터 과학에 오신 것을 환영합니다!!!")
server <- function(input, output) {}
shinyApp(ui = ui, server = server)
 

2.2.1. 개발 스텁(stub) 생성

본격적인 shiny 프로그래밍을 시작하기에 앞서 작성할 코드 내용을 다음과 같이 주석으로 처리하여 채워넣는다.

ui <- fluidPage(
  # *Input() functions,
  # *Output() functions
)
server <- function(input, output) {
  # output$
  # render*()
  # input$
)
shinyApp(ui = ui, server = server)
 

2.3. Input() 함수로 반응형 입력 생성

본격적으로 입력을 sliderInput()함수로 입력 인터페이스를 정의하자. inputId를 지정하여 입력값을 server() 함수에서 사용할 수 있도록 지정한다.

ui <- fluidPage(
       sliderInput(inputId = "num",  
                   label = "구간크기 숫자를 선택하세요 (Choose a number): ",  
                   value = 25, min = 1, max = 100) 
)

server <- function(input, output) {
    # output$
    # render*()
    # input$
}
shinyApp(ui = ui, server = server)
 

2.4. Output() 함수로 반응형 출력결과 생성

plotOutput() 함수로 ui 인터페이스에 출력값을 지정한다.

ui <- fluidPage(
       sliderInput(inputId = "num",  
                   label = "구간크기 숫자를 선택하세요 (Choose a number): ",  
                   value = 25, min = 1, max = 100),
       plotOutput("hist")
)
server <- function(input, output) {
    # output$
    # render*()
    # input$
}
shinyApp(ui = ui, server = server)
 

2.5. 서버 함수에서 입력과 출력을 조립

입력값을 출력에 전달하여 server() 함수에서 조립한다.

Shiny 응응프로그램 서버 개발 프로세스

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

2.5.1. output$ 화면에 출력할 객체를 저장

output$ 화면에 출력할 객체를 저장한다.

ui <- fluidPage(
       sliderInput(inputId = "num",  
                   label = "구간크기 숫자를 선택하세요 (Choose a number): ",  
                   value = 25, min = 1, max = 100),
       plotOutput("hist")
)
server <- function(input, output) {
        output$hist <- # 코드 
}
shinyApp(ui = ui, server = server)
 

2.5.2. render*() 함수로 화면에 출력할 객체를 만듬(build)

output$ 화면에 출력할 객체를 저장한다. 히스토그램을 출력하는 함수만 자리를 잡았기 때문에 renderPlot() 아무것도 나타나지 않는다.

ui <- fluidPage(
       sliderInput(inputId = "num",  
                   label = "구간크기 숫자를 선택하세요 (Choose a number): ",  
                   value = 25, min = 1, max = 100),
       plotOutput("hist")
)
server <- function(input, output) {
    output$hist <- renderPlot({
    })
}
shinyApp(ui = ui, server = server)
 

2.5.3. input$ 변수로 입력값 접근

ui <- fluidPage(
       sliderInput(inputId = "num",  
                   label = "구간크기 숫자를 선택하세요 (Choose a number): ",  
                   value = 25, min = 1, max = 100),
       plotOutput("hist")
)
server <- function(input, output) {
    output$hist <- renderPlot({
        title <- "정규분포 난수 100개 값 분포"
        hist(rnorm(input$num), main = title)
    })
}
shinyApp(ui = ui, server = server)

Shiny 응용프로그램 클라우드 RStudio 개발화면

 

3. Shiny 응응프로그램 저장

app.R을 포함하는 디렉토리를 생성하고, 데이터셋, 이미지, css, 도움말 등을 함께 저장한다. /srv/shiny-server/ 디렉토리가 Shiny 서버 응용프로그램을 배포하는 디렉토리다.

 

3.1. shinyapp.io 배포

https://www.shinyapps.io/에 Shiny 응용프로그램을 배포하는 경우 app.R로 한통으로 개발한 프로그램을 향후 유지보수를 위해 두개 ui.Rserver.R로 분리하는 것도 추천된다.

app.R 한 파일

ui <- fluidPage( 
  sliderInput(inputId = "num",              
        label = "숫자를 선택하세요
                (Choose a number): ",
        value = 25, min = 1, max = 100),
  plotOutput("hist")
)
server <- function(input, output) {         
  output$hist <- renderPlot({
    title <- "정규분포 난수 100개 값 분포"  
    hist(rnorm(input$num), main = title)    
  })
}                                           
shinyApp(server = server, ui = ui)          

ui.R과 server.R 두 파일

# ui.R 
library(shiny)                                  
fluidPage(                                      
  sliderInput(inputId = "num",                  
        label = "숫자를 선택하세요              
        (Choose a number): ",                   
        value = 25, min = 1, max = 100),        
  plotOutput("hist")                            
)
# server.R                                      
library(shiny)                                  
function(input, output) {                       
  output$hist <- renderPlot({                   
    title <- "정규분포 난수 100개 값 분포"      
    hist(rnorm(input$num), main = title)        
  })                                            
}               

Shiny 서버에 응용프로그램 배포

 

[출처] 데이터 제품 (statkclee.github.io)

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86818
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 79109
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95868
138 [tensorflow] TensorFlow 2.x 에서 1.x 코드 사용하기 졸리운_곰 2022.08.07 1296
137 [tensorflow] 텐서플로 - TF 1.*버전 vs 2.*버전 file 졸리운_곰 2022.08.07 1246
136 [python][tensorflow - gpu] [파이썬] 텐서플로(TensorFlow) 설치하는 방법, 딥러닝 환경 구축하기 file 졸리운_곰 2021.08.17 1150
135 [tensorflow 설치] windows에서 tensorflow-gpu 1.x 버전 설치, python - 이전 버전의 Tensorflow GPU 설치 졸리운_곰 2021.08.17 960
134 [한글 처리][tensorflow] 한글 자연어처리를 위한 도구들, 자료들, 정보들을 정리해 보았습니다. 졸리운_곰 2021.08.11 1412
133 [딥러닝] [텐서플로우][SSAC X AIFFEL] 작사가 인공지능 만들기 file 졸리운_곰 2021.07.10 1004
132 [모바일 머신러닝 라이브러리 및 자료] Awesome-Mobile-Machine-Learning 졸리운_곰 2021.01.14 1908
131 머신 딥러닝 관련 개발 프로세스 file 졸리운_곰 2021.01.06 1989
130 텐서플로우 소스 구조 분석 (TensorFlow Internal) file 졸리운_곰 2021.01.05 1285
129 [러닝 텐서플로]Chap07.2 - 텐서플로 추상화와 간소화, TFLearn 졸리운_곰 2021.01.03 805
128 [러닝 텐서플로]Chap07.1 - 텐서플로 추상화와 간소화, Estimator file 졸리운_곰 2021.01.02 947
127 [러닝 텐서플로]Chap06 - 텍스트2: word2vec, Bidirectional RNN, GRU, 임베딩 시각화 file 졸리운_곰 2020.12.28 1289
126 [러닝 텐서플로]Chap05 - 텍스트 1: 텍스트와 시퀀스 처리 및 텐서보드 시각화 file 졸리운_곰 2020.12.28 1060
125 [러닝 텐서플로]Chap04 - 합성곱 신경망 CNN file 졸리운_곰 2020.12.28 1148
124 Making TensorFlow Models Portable Using ONNX file 졸리운_곰 2020.12.24 4435
123 [러닝 텐서플로]Chap03 - 텐서플로의 기본 이해하기 file 졸리운_곰 2020.12.24 1476
122 [러닝 텐서플로]Chap02 - 텐서플로 설치 및 실행 file 졸리운_곰 2020.12.24 851
121 [러닝 텐서플로]Chap01 - 텐서플로 란? file 졸리운_곰 2020.12.24 1279
120 러닝 텐서플로 - 0 file 졸리운_곰 2020.12.24 1798
119 [tensorflow] 텐서플로로 음악 작곡 : Generate Music in TensorFlow 졸리운_곰 2020.09.27 1124
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED