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 86087
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78609
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95325
42 블록체인 기반 플랫폼 비즈니스를 이해하자 졸리운_곰 2017.09.10 1553
41 다운타임 없는 서비스 구현 패턴 file 졸리운_곰 2017.09.10 1229
40 테이블의 수직분할과 수평분할에 대한 이해 file 졸리운_곰 2017.09.10 3908
39 정규화와 응집도에 대한 고찰 file 졸리운_곰 2017.05.28 1782
38 머신러닝 새 도전…“클라우드를 벗어나라" file 졸리운_곰 2017.05.28 1711
37 보안성 높이는 공공 거래장부 블록체인 file 졸리운_곰 2017.05.28 1756
36 디지털, 속도의 전쟁 VS 데이터, 품질의 전쟁 file 졸리운_곰 2017.05.05 1515
35 04. 데이터 모델링의 3단계 진행 file 졸리운_곰 2016.03.15 1659
34 데이터베이스 설계의 기본 원리.pdf file 졸리운_곰 2016.03.15 2353
33 실체유형(Entity Type) 정의 사항 및 도출 file 졸리운_곰 2015.05.21 2196
32 마농의 SQL 백문백답: 단순하고 쉽게 작성하는 SQL 노하우 [1회] file 졸리운_곰 2015.05.21 1829
31 sql개발자-sql전문가자격시험 시험 예제.pdf file 졸리운_곰 2015.02.15 2302
30 데이터베이스 선정에는 비밀이 있다 - 4부 졸리운_곰 2015.01.15 2095
29 데이터베이스 선정에는 비밀이 있다 - 3부 졸리운_곰 2015.01.15 2041
28 데이터베이스 선정에는 비밀이 있다 - 2부 졸리운_곰 2015.01.15 1827
27 데이터베이스 선정에는 비밀이 있다 - 1부 졸리운_곰 2015.01.15 2390
26 지금 우리에게 필요한 것은 데이터베이스 성능 최적화이다 (2부) 졸리운_곰 2015.01.15 1484
25 우리에게 필요한 것은 데이터베이스 성능 (1부) 졸리운_곰 2015.01.15 1773
24 21회 결과 secret 졸리운_곰 2014.11.10 0
23 [데이터아키텍쳐준전문가] 시험 fail 자료 secret 졸리운_곰 2014.08.31 0
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED