shiny를 통한 R 웹 프로그래밍

R을 가지고 웹 프로그래밍은 하는 방법은 이전부터 많이 시도되어 왔다. shiny 이전까지는 Rook이라는 프레임웍이 있었고, 나름 웹 프로그래밍 다운 코딩을 할 수 있는 환경을 가져다 주었지만 사실 R을 전적으로 웹 프로그래밍을 하는데 쓰기 보다는 플로팅한 결과를 효과적으로 보여주기 위한 목적이 많았는데, 그 목적에는 잘 부합하지 않았다. 한마디로 R로 모든 웹 프로그래밍을 하길 원하기 보다는 시각화나 데이터를 웹으로 보여주는 용도를 더 필요로 했던 것이다.

이런 상황에서 RStudio에서 대단한 패키지 하나를 베타 공개했다. 바로 shiny이다.

흡사 닷넷으로 웹 애플리케이션 코딩을 하는 것과 유사하게 시각화 재료들을 컴포넌트화 했고, 웹 소켓을 이용해서 굉장히 빠른 속도로 시각화 객체들을 디스플레이 해주는 장점을 가진 웹 애플리케이션 패키지이다.  가장 간단한 것들을 심지어 HTML이나 자바 스크립트를 몰라도 코딩이 가능할 정도이다.

이 패키지를 보고 가장 먼저 생각한것은 통계 교육쪽에서의 활용이었고, 그 다음은 웹 기반으로 한 인터렉티브 시각화 애플리케이션 개발이었다.

아직까지는 베타이고 이를 활용한 완전한 웹 애플리케이션 개발은 어렵겠지만, 시작점 치고는 상당히 대단한 패키지가 아닐 수 없다.

아래는 유가가 기록되기 시작한 때부터 2012.11.09일 까지 주유소 각 유종을  리터별 단가의 평균값을 가지고 필자가 만들어본 예제 코드이다.  데이터 출처는 Opinet이다. 오피넷에서 API를 공개한다면 정말 하나의 완전한 애플리케이션으로 발전 가능한데, 불행히도 데이터를 가져오는 인터페이스가 매우 불편해 현재까지의 전체 레코드만을 가져왔다.

 

  library(shiny)
  library(ggplot2)
  library(reshape2)
  library(scales)
   
   
  #data load from dropbox
  load(url("http://dl.dropbox.com/u/8686172/oil_price.RData"))
   
   
  shinyServer(function(input, output) {
   
  output$oilPlot <- reactivePlot(function() {
  kinds <- c()
  if(input$p_gasolin == TRUE){
  kinds <- c(kinds, "premium gasolin")
  }
  if(input$gasolin== TRUE){
  kinds <- c(kinds, "gasolin")
  }
  if(input$diesel== TRUE){
  kinds <- c(kinds, "diesel")
  }
  if(input$kerosene== TRUE){
  kinds <- c(kinds, "kerosene")
  }
   
  if(length(kinds) == 0) stop(enc2utf8("최소 하나의 유종을 선택하세요!"))
   
  oil_price_tail <- tail(oil_price, input$obs)
  oil_reshpae <- melt(oil_price_tail, id.vars=c("date"))
  names(oil_reshpae) <- c("date", "kind", "price")
   
  oil_subset <- subset(oil_reshpae, kind %in% kinds )
   
  oil_subset$kind <- factor(oil_subset$kind, levels=c("premium gasolin","gasolin", "diesel","kerosene"),
  labels=enc2utf8(c("고급휘발유", "보통휘발유", "경유", "등유")))
   
  p <- ggplot(oil_subset, aes(date,price)) + geom_line(aes(colour=kind)) +
  scale_x_date(breaks = date_breaks("3 month")) +
  theme(axis.text.x=element_text(angle=45)) + scale_color_discrete(enc2utf8("유종")) +
  xlab(enc2utf8("날짜")) + ylab(enc2utf8("가격(원)"))
  print(p)
  })
   
  })
   
   
view raw server.R hosted with ❤ by GitHub
  library(shiny)
   
  # bugs on label on checkboxInput to display Korean
  # a<-enc2utf8("고급휘발유")
  # b<-enc2utf8("보통휘발유")
  # c<-enc2utf8("자동차경유")
  # d<-enc2utf8("실내등유")
   
  shinyUI(pageWithSidebar(
  headerPanel(enc2utf8("유가 시계열 그래프(2008.4.14 ~ 2012.11.08")),
   
  sidebarPanel(
  sliderInput("obs",
  enc2utf8("관측수(마지막 n개):"),
  min = 7,
  max = 1670,
  value = 670),
   
  wellPanel(p(strong(enc2utf8("유종"))),
  checkboxInput(inputId = "p_gasolin", label = "Premium Gasolin", value = FALSE),
  checkboxInput(inputId = "gasolin", label = "Gasolin", value = TRUE),
  checkboxInput(inputId = "diesel", label = "Diesel", value = TRUE),
  checkboxInput(inputId = "kerosene", label = "Kerosene", value = FALSE)
  )),
   
  mainPanel(
  plotOutput("oilPlot")
   
  )
  ))
view raw ui.R hosted with ❤ by GitHub

 

 

위 코드의 실행 애플리케이션은 필자의 가정용 서버에 올려두어서 아래 링크에서 사용 가능하다.

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

유가 시계열 그래프 Shiny 예제

데몬이나 서비스로 올려두지 않아서 둘째가 서버 전원버튼을 눌러버리면 볼 수 없는 링크니 나오지 않더라도 이해해 주길 바란다. 

아직 한글 윈도우에서는 실행에 오류가 있는데, 리눅스 머신이나 맥을 사용하고 있다면 shiny를 설치하고 아래 명령으로 실행하면 본인의 머신에서 아래 한줄로 코드 실행이 가능하다.

패키지에서 한글을 사용하는데 몇몇 버그가 있지만 앞으로 고쳐질 거라 생각한다. 

 

runGist(“4054309”)

 

개인적으로 이 패키지를 보면서 R을 상용화 하는데, RA(REvolution Analytics)보다는 RStudio가  더 성공을 하지 않을까 하는 생각이 들었다.

 

[출처] http://freesearch.pe.kr/archives/3155

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86112
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78623
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95337
52 10분 만에 살펴보는 R 기초문법 file 졸리운_곰 2018.12.20 1538
51 R 기술통계 함수 mean(), median(), range(), sd(), var(), min(), max(), IQR(), diff(), length(), rank() file 졸리운_곰 2018.12.20 1504
50 [초보자가이드] 통계언어 R로 하는 웹 스크래핑 / 크롤링 / 데이터 수집 :Beginner’s Guide on Web Scraping in R (using rvest) with hands-on example file 졸리운_곰 2018.12.20 1512
49 [ R Lang] 데이터 유형의 우선순위 졸리운_곰 2018.12.11 1272
48 [ R lang] 데이터 유형 알아내기 졸리운_곰 2018.12.11 927
47 [ R lang] 특수 형테의 데이터 유형 졸리운_곰 2018.12.11 1388
46 Learn R in 15 Minutes file 졸리운_곰 2018.08.14 1593
45 R 프로그래밍 - 한국어 자연어 처리(KoNLP) 패키지 소개 file 졸리운_곰 2018.07.13 1535
44 RStudio Server: 서버 구성과 관리 졸리운_곰 2018.07.09 1142
43 RNN을 이용한 한글 자동 띄어쓰기 졸리운_곰 2018.07.06 1883
42 R로 만들어본 자동 띄어쓰기 알고리즘 졸리운_곰 2018.07.06 1390
41 딥러닝(Deep learning)을 R로 구현하기 – Prediction Model file 졸리운_곰 2018.05.30 1768
40 R로 하는 텍스트마이닝(2016_08_15 대통령 광복절 기념사 분석) file 졸리운_곰 2018.03.17 1272
39 한글 텍스트 마이닝 : Text Mining For Korean 졸리운_곰 2018.03.17 1980
38 R plot으로 그래프 그리기: 점 여러 개 찍기 ๑•‿•๑ file 졸리운_곰 2018.02.21 1808
» shiny를 통한 R 웹 프로그래밍 file 졸리운_곰 2018.01.22 1401
36 분석언어 R 기초 (KODATA한국 데이터 진흥원) 사이버 교육 file 졸리운_곰 2017.12.29 1384
35 kodb R 데이터 실습 1강 졸리운_곰 2017.12.26 1261
34 [빅데이터 아카데미 사전교육 자료] 분석언어 R 기초 file 졸리운_곰 2017.11.26 1132
33 R 자료들 file 졸리운_곰 2017.11.22 1354
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED