04-30 02:19
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

[Data Visualisation] rCharts / rPlot 본문

Data Science/Data Visualisation

[Data Visualisation] rCharts / rPlot

cinema4dr12 2014. 12. 28. 20:18

이번 글에서는 R의 데이터 시각화 패키지인 rCharts를 이용하여 데이터를 시각화하는 방법에 대하여 알아보도록 하겠다.

첫번째 순서로 rPlot을 이용하여 scatter plot을 그려보도록 한다.



[데이터 가공]

우선 공공데이터 포털(www.data.go.kr)로부터  데이터 시각화를 위한 테스트 데이터를 얻는다. 얻고자 하는 데이터는 "국가별 경제지표 중 2010년 이후 지역별 수출선행지수 분기별 추이"이다.

직접 사이트를 방문하여 데이터를 다운로드하여도 되고 다음 링크를 클릭하여 다운로드 해도 된다.

지역별 수출선행지수 분기별 추이.csv

데이터를 살펴보면 다음과 같다:

,2012 Q1,2012 Q2,2012 Q3,2012 Q4,2013 Q1,2013 Q2,2013 Q3,2013 Q4,2014 Q1,2014Q2,2014Q3,2014Q4 유럽,47.2,46.3,44.5,45.6,42.8,48.1,50.8,51.1,53.1,54,50.6,53.9 북미,59.8,54.7,56.4,52.9,56.3,59.1,60.6,54.5,54.6,55.9,51.9,56.9 아시아,50.9,50.9,57.9,55.6,51.1,60.2,57.2,48.9,52,52.3,52.6,51.9 일본,50.8,49.1,53.6,46.4,47.7,46.2,42.2,41.7,45.4,43.3,42.6,45.2 중국,49.6,54.1,56.2,44.7,55.9,55.8,59,54.7,52,54.2,57.1,54.5 중남미,48.2,57.9,52.7,55.4,53.2,52,54.9,49.1,52.9,50.7,50.5,48.6 중동아,53.1,54,58.1,54.5,57.7,56.4,58.2,56,53.5,51,49,52.3 CIS,54.2,49.6,61,53.7,55.9,52.2,63,57.7,56.9,40.7,48.8,44.4


R의 read.csv 명령을 통해 데이터의 형태를 살펴보자.

> mydata = read.csv("지역별+수출선행지수+분기별+추이.csv")
> head(mydata)
       X X2012.Q1 X2012.Q2 X2012.Q3 X2012.Q4 X2013.Q1 X2013.Q2 X2013.Q3 X2013.Q4 X2014.Q1 X2014Q2
1   유럽     47.2     46.3     44.5     45.6     42.8     48.1     50.8     51.1     53.1    54.0
2   북미     59.8     54.7     56.4     52.9     56.3     59.1     60.6     54.5     54.6    55.9
3 아시아     50.9     50.9     57.9     55.6     51.1     60.2     57.2     48.9     52.0    52.3
4   일본     50.8     49.1     53.6     46.4     47.7     46.2     42.2     41.7     45.4    43.3
5   중국     49.6     54.1     56.2     44.7     55.9     55.8     59.0     54.7     52.0    54.2
6 중남미     48.2     57.9     52.7     55.4     53.2     52.0     54.9     49.1     52.9    50.7
  X2014Q3 X2014Q4
1    50.6    53.9
2    51.9    56.9
3    52.6    51.9
4    42.6    45.2
5    57.1    54.5
6    50.5    48.6


데이터를 살펴보면 column에 각 분기로 정리되어 있는데 이는 R에서 일반적으로 처리하는 형태가 아니다. 따라서 취급하기 편리하도록 column을 지역별로 row를 분기별로 정리하는 것이 좋다. 이를 위해서는 transpose 명령을 이용한다:

> mydata = t(mydata)
> head(mydata)
         [,1]   [,2]   [,3]     [,4]   [,5]   [,6]     [,7]     [,8]  
X        "유럽" "북미" "아시아" "일본" "중국" "중남미" "중동아" "CIS" 
X2012.Q1 "47.2" "59.8" "50.9"   "50.8" "49.6" "48.2"   "53.1"   "54.2"
X2012.Q2 "46.3" "54.7" "50.9"   "49.1" "54.1" "57.9"   "54.0"   "49.6"
X2012.Q3 "44.5" "56.4" "57.9"   "53.6" "56.2" "52.7"   "58.1"   "61.0"
X2012.Q4 "45.6" "52.9" "55.6"   "46.4" "44.7" "55.4"   "54.5"   "53.7"
X2013.Q1 "42.8" "56.3" "51.1"   "47.7" "55.9" "53.2"   "57.7"   "55.9"
> names(mydata)
NULL


Transpose 된 데이터를 살펴보면 데이터의 구조는 row와 column이 성공적으로 교환되었으나, names 명령을 통해 살펴본 결과 각 column 데이터에 대한 name이 assign 되지 않았음을 알 수 있다. 현재 column 데이터에 대한 name은 첫번째 row에 저장되어 있음을 알 수 있다. 따라서, 첫번째 row를 column의 name으로 지정한다:

> colnames(mydata) = as.character(mydata[1,])
> head(mydata)
         유럽   북미   아시아   일본   중국   중남미   중동아   CIS   
X        "유럽" "북미" "아시아" "일본" "중국" "중남미" "중동아" "CIS" 
X2012.Q1 "47.2" "59.8" "50.9"   "50.8" "49.6" "48.2"   "53.1"   "54.2"
X2012.Q2 "46.3" "54.7" "50.9"   "49.1" "54.1" "57.9"   "54.0"   "49.6"
X2012.Q3 "44.5" "56.4" "57.9"   "53.6" "56.2" "52.7"   "58.1"   "61.0"
X2012.Q4 "45.6" "52.9" "55.6"   "46.4" "44.7" "55.4"   "54.5"   "53.7"
X2013.Q1 "42.8" "56.3" "51.1"   "47.7" "55.9" "53.2"   "57.7"   "55.9"


이제 첫번째 행을 삭제한다:

> mydata = mydata[2:dim(mydata)[1],]
> head(mydata)
         유럽   북미   아시아 일본   중국   중남미 중동아 CIS   
X2012.Q1 "47.2" "59.8" "50.9" "50.8" "49.6" "48.2" "53.1" "54.2"
X2012.Q2 "46.3" "54.7" "50.9" "49.1" "54.1" "57.9" "54.0" "49.6"
X2012.Q3 "44.5" "56.4" "57.9" "53.6" "56.2" "52.7" "58.1" "61.0"
X2012.Q4 "45.6" "52.9" "55.6" "46.4" "44.7" "55.4" "54.5" "53.7"
X2013.Q1 "42.8" "56.3" "51.1" "47.7" "55.9" "53.2" "57.7" "55.9"
X2013.Q2 "48.1" "59.1" "60.2" "46.2" "55.8" "52.0" "56.4" "52.2"


사실 첫번째 행을 삭제한다는 것보다는 두번째 행부터 마지막 행까지의 데이터를 취해서 다시 mydata에 대입한다는 것이 보다 정확한 표현일 것이다.


이제 가공된 데이터를 CSV 파일로 저장한다:

> write.csv(mydata, file = "import_data.csv");


현재 working folder에 import_data.csv 파일이 생성되었는지 확인하고 텍스트 편집기를 이용하여 파일을 열어 데이터를 살펴보면 다음과 같다:

"","유럽","북미","아시아","일본","중국","중남미","중동아","CIS"
"X2012.Q1","47.2","59.8","50.9","50.8","49.6","48.2","53.1","54.2"
"X2012.Q2","46.3","54.7","50.9","49.1","54.1","57.9","54.0","49.6"
"X2012.Q3","44.5","56.4","57.9","53.6","56.2","52.7","58.1","61.0"
"X2012.Q4","45.6","52.9","55.6","46.4","44.7","55.4","54.5","53.7"
"X2013.Q1","42.8","56.3","51.1","47.7","55.9","53.2","57.7","55.9"
"X2013.Q2","48.1","59.1","60.2","46.2","55.8","52.0","56.4","52.2"
"X2013.Q3","50.8","60.6","57.2","42.2","59.0","54.9","58.2","63.0"
"X2013.Q4","51.1","54.5","48.9","41.7","54.7","49.1","56.0","57.7"
"X2014.Q1","53.1","54.6","52.0","45.4","52.0","52.9","53.5","56.9"
"X2014Q2","54.0","55.9","52.3","43.3","54.2","50.7","51.0","40.7"
"X2014Q3","50.6","51.9","52.6","42.6","57.1","50.5","49.0","48.8"
"X2014Q4","53.9","56.9","51.9","45.2","54.5","48.6","52.3","44.4"

데이터를 다음과 같이 약간 가공한다:

"날짜","유럽","북미","아시아","일본","중국","중남미","중동아","CIS"
"2012.Q1","47.2","59.8","50.9","50.8","49.6","48.2","53.1","54.2"
"2012.Q2","46.3","54.7","50.9","49.1","54.1","57.9","54.0","49.6"
"2012.Q3","44.5","56.4","57.9","53.6","56.2","52.7","58.1","61.0"
"2012.Q4","45.6","52.9","55.6","46.4","44.7","55.4","54.5","53.7"
"2013.Q1","42.8","56.3","51.1","47.7","55.9","53.2","57.7","55.9"
"2013.Q2","48.1","59.1","60.2","46.2","55.8","52.0","56.4","52.2"
"2013.Q3","50.8","60.6","57.2","42.2","59.0","54.9","58.2","63.0"
"2013.Q4","51.1","54.5","48.9","41.7","54.7","49.1","56.0","57.7"
"2014.Q1","53.1","54.6","52.0","45.4","52.0","52.9","53.5","56.9"
"2014.Q2","54.0","55.9","52.3","43.3","54.2","50.7","51.0","40.7"
"2014.Q3","50.6","51.9","52.6","42.6","57.1","50.5","49.0","48.8"
"2014.Q4","53.9","56.9","51.9","45.2","54.5","48.6","52.3","44.4"




[rPlot을 이용하여 데이터 시각화]

다음과 같이 install_github 명령을 입력하여 rCharts를 다운로드 한다:

> require(devtools);
> install_github('rCharts', 'ramnathv');


다음과 같이 명령을 입력하여 rPlot이 출력될 chart1.html 파일을 생성한다.

> r1 = rPlot(x = "날짜", y = c("유럽"), type = "point", data = mydata, color = "날짜"); > r1$save("chart1.html");


Web Browser에서 chart1.html 파일을 열면 다음과 같은 그래프를 확인할 수 있다:


[shiny app으로 publish]

rCharts는 shiny app의 publish를 지원한다.

Line-by-line 상세한 코드 설명은 생략하기로 하고, 데이터 시각화 결과 및 ui.Rserver.R소스 코드를 포스팅 하도록 하겠다.

(만약 웹 어플리케이션 비활성화 되어 있으면 페이지 새로고침하기 바란다.)

[ui.R]

require(rCharts)
shinyUI(pageWithSidebar(
  headerPanel(h2("rCharts: 2010년 이후 지역별 수출선행지수 분기별 추이 by cinema4dr12")),
  
  sidebarPanel(
    selectInput(inputId = "region",
                label = "지역을 선택하세요",
                choices = c('유럽', '북미', '아시아', '일본', '중국', '중남미', '중동아', 'CIS'),
                selected = "유럽")
  ),
  mainPanel(
    showOutput("myChart", "polycharts")
  )
))

[server.R]

require(rCharts)
shinyServer(function(input, output) {
  output$myChart = renderChart({
    mydata = read.csv("http://gchoi.net/shinydata/import_data.csv")
    r1 = rPlot(x = "날짜", y = input$region, data = mydata, color = "날짜", type = 'point')
    r1$addParams(dom = 'myChart')
    return(r1)
  })
})


Comments