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 86311
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78765
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95513
51 오라클 Select 해서 Update 하기 졸리운_곰 2018.01.22 1214
50 디폴트 세팅의 함정과 오라클 파라미터 file 졸리운_곰 2017.07.15 1687
49 그림으로 배우는 ‘공정쿼리와 인덱스 생성도’ file 졸리운_곰 2017.07.15 1540
48 오라클 랜덤 함수와 사용자 정의 함수 file 졸리운_곰 2017.07.15 3234
47 개발자들이 자주 접하는 오라클 에러 메세지 file 졸리운_곰 2017.07.15 4004
46 오라클 DICTIONARY를 활용한 DB툴 프로그램 ‘FreeSQL’ file 졸리운_곰 2017.07.15 1184
45 알면 유용한 오라클 기능들 file 졸리운_곰 2017.07.15 1565
44 알면 유용한 오라클 기능 ‘GATHER_PLAN_STATISTICS’ file 졸리운_곰 2017.07.15 1859
43 개발자들의 영원한 숙제 ‘NULL 이야기’ file 졸리운_곰 2017.07.15 4346
42 오라클 플랜을 보는 법 file 졸리운_곰 2017.07.15 1882
41 반드시 알아야 하는 오라클 힌트절 7가지 file 졸리운_곰 2017.07.15 1566
40 그림으로 배우는 ‘오라클 조인의 방식’ 이야기 file 졸리운_곰 2017.07.15 1914
39 오라클 옵티마이저 ‘CBO와 RBO’ 이해하기 file 졸리운_곰 2017.07.09 1801
38 만능 쿼리와 한 방 쿼리 file 졸리운_곰 2017.07.09 1515
37 퀴리 최적화 및 튜닝을 위한 오라클 공정쿼리 작성법 file 졸리운_곰 2017.07.09 1591
36 누구도 알려주지 않았던 ‘오라클 쿼리 작성의 비법’ file 졸리운_곰 2017.07.09 1313
35 누구도 알려주지 않았던 ‘오라클 인덱스 생성도’의 비밀 file 졸리운_곰 2017.07.09 1600
34 oracle 패스워드 유효기간 만료 복구 졸리운_곰 2017.05.06 1650
33 Oracle Instant Client 이용하여 Toad 사용하기 file 졸리운_곰 2017.05.06 1221
32 [Oracle] 1. 각 테이블 코멘트 조회하기 / 2. 테이블의 컬럼정보 조회하기 졸리운_곰 2017.04.17 1190
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED