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 78767
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95516
26 감석분석 작업 로그 : 감성분석(Sentiment Analysis) - 깔끔한 텍스트 방식(tidytext) : xwMOOC 자연어 처리 졸리운_곰 2019.12.24 1243
25 '애자일과 데이터 관리의 결합'··· '데이터옵스'의 정의와 주요 기술 file 졸리운_곰 2019.11.17 1684
24 데브옵스와 분석의 결합··· ‘데이터옵스’를 아시나요? file 졸리운_곰 2019.11.17 1232
23 데이터옵스(DATAOPS) 란 무엇일까? file 졸리운_곰 2019.11.17 1636
22 데이터옵스는 단순히 데이터에 대한 데브옵스가 아님니다. DataOps is NOT Just DevOps for Data file 졸리운_곰 2019.11.17 1636
21 R에서 파이썬까지…데이터과학 학습 사이트 8곳 file 졸리운_곰 2019.04.21 1758
20 [통계] prediction VS forecast file 졸리운_곰 2019.04.03 1571
19 forecast 와 prediction의 차이를 아시나요? 졸리운_곰 2019.04.03 896
18 10분만에 끝내는 데이터분석 file 졸리운_곰 2019.04.03 1866
17 처음으로 케글 데이터분석에 도전하기 : Competing on kaggle.com for the First Time file 졸리운_곰 2019.01.27 4405
16 데이터 과학자가 갖춰야 할 5가지 스킬셋 file 졸리운_곰 2018.11.11 1374
15 데이터 사이언스 괜찮은 강의들 리스트 1 file 졸리운_곰 2018.11.11 2456
14 데이터 사이언스 학습 안내 졸리운_곰 2018.11.11 1666
13 Prophet: Automatic Forecasting Procedure 자동 예측 프로시져 프로그램 /데이터분석 / 데이터 과학 file 졸리운_곰 2018.09.04 1311
12 데이터 분석 어디에 집중할 것인가? 가장 먼저 실험에 집중하라 file 졸리운_곰 2018.02.06 1398
11 빅데이터 융합기획전문가 1기 교육 표창장 file 졸리운_곰 2018.01.03 1312
10 빅 데이터 기획에 대한 이해 file 졸리운_곰 2017.12.09 2014
9 분야별 빅데이터 애널리틱스 적용 사례 및 성공의 비결 file 졸리운_곰 2017.12.08 2149
8 하둡 에코시스템을 활용한 Hybrid DW 구축 사례 file 졸리운_곰 2017.12.08 2002
7 gmail 수신 메일로 워드클라우드 생성 : Creating a gmail wordcloud 졸리운_곰 2017.11.20 1888
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED