R과 Interactive visualization의 문제

R과 관련없이 유명한 상용 Interactive Data Visualization 툴로는 Spotfire가 있습니다.
Spotfire는 그래프를 그리고 그래프의 영역을 계속 마우스로 선택해 나가면서 데이터를 탐색하게 해주는 툴입니다.
이 포스트에서 언급하는 것들은 주로 spotfire같은 것은 인터랙티브하게 반응하는 UI를 말합니다.
Processing이나 Paper.js같은 미디어아트와는 다소 다릅니다.

Interactive Data Visualization이 뭔데?

데이터 분석에서 Interactive Data Visualization 이 필요한 이유는 데이터탐색을 빠르고 직관적으로 하기 위한 것입니다.
엑셀같은 스프레드시트에 수치를 적어넣고 그래프를 다시 그리거나 R같은 곳에서 코드 적어가며 그래프를 완성해 나가는 방법은 탐색을 하는데 있어 시간이 꽤 걸리고 불편하다는 것입니다.

쉽게 할 수 있는 방법이 있다면 쉽게 해야 한다. 그것이 모티브입니다.

Interactive Data Visualization 애플리케이션이 작동하는 방식은 대충 특정 데이터를 로딩한 다음 그것에 대한 기본 그래프(플롯)나 여러 그래프를 나열해 놓고 한쪽에서 마우스로 눈에 띄는 영역이나 다른 영역을 선택하면 다른 플롯에서도 그 부분이 별도로 표시할 수 있고, 확대도 할 수 있고, 다른 플롯으로 다시 그려볼 수도 있게 해줍니다.

이런 과정을 매우 유연하고 편하고 반복적으로 하게 해주는 것을 말합니다.

때로는 애니메이션 기능을 이용해서 움직이게 만드는 것도 이 부류에 넣기도 하는데 애니메이션은 사실 직관을 찾기 위한 용도이지 진짜 탐색을 위한 용도는 아닌 경우가 많지요.  그부분은 다른 포스트에 따로 적기로 하겠습니다.

R과 Interactive Visualization을 말하기 전에 우선 결론적으로

R로 Interactive Visualization을 구현 하는 것이 매우 어렵다.

R을 위한 Interactive Visualization 패키지로는 ggobi, cranvas, iplot(Acinonyx)등이 가장 유명합니다. 그 외에도 다수가 있지만 그렇게 주류로 사용되지 않습니다. 일반적인 플로팅 패키지중에서 비교적 Interactive Visualization에 가까운 것으로는 역시 ggplot2가 있습니다. ggplot2에 대한 내용은 여기서 자세히 얘기하지 않겠습니다.

R로 Interactive Visualization이 잘 안되는 이유들

우선 아예 안되는 것이 아니라 잘 안되는 것이라고 말해둡니다.  오해의 여지를 줄이기 위해서

1. Cross platform을 위한 렌더링 엔진 문제

iplot과 ggobi같은 R 패키지는 GTK를 사용하고 cranvas는 Qt SDK를 interfacing해 놓은 qtbase 라는 R패키지에 강한 의존성을 가집니다. 물론 이 패키지들도 플랫폼에 따라 렌더링 엔진이 조금씩 다르긴 하지만 적어도 Mac OS X와 Linux를 위한 버전은 확실하게 의존성이 강합니다.  이런 패키지들이 렌더링 엔진을 이렇게 지저분하게 선택해야 하는 이유는 당연히 Cross platform 때문인데 대부분의 R사용자들은 Windows를 사용하지만 대부분의 R의 코어나 패키지 개발자들은 Windows를 사용하지 않고 Linux나 Mac을 사용합니다. 그리고 현존 하는 가장 유력한 범용 Cross Platform용 렌더링 엔진은 Qt, GTK, Java 정도입니다.
Java는 렌더링 엔진이 아니지만 어쨌든 크로스플랫폼으로 화면을 제어할 수 있어서 포함했습니다.
그 외에는 Browser기반의 Javascript + HTML5가 고려해 볼만한 대상이 되겠습니다.

대부분 Interactive Visualization 의 경우 여기서부터가 문제가 생깁니다.
Cranvas는 qtbase를 사용하지만 qtbase는 Windows를 지원하지 않으며 QtSdk를 설치하는 것도 매우 귀찮은 일이고
ggobi와 iplot2가 사용하는 GTK는  Qt보다 설치가하기 더 지저분합니다.
Java는 R과 인터페이싱하기가 너무 복잡하다는 문제점이 있습니다.
이 경우에는 rJava를 사용해서 R에서 Java를 제어할 것인지 Rj를 사용해서 Java에서 R을 제어할 것인지도 고민이 됩니다.
또 R의 패키지는 렌더링엔진을 포함해서 배포할 수 없는 구조이고 사용자가 알아서 다 설치해야 한다는 점입니다.

여기까지의 요점은 아래와 같습니다.

  1. Qt나 Qtk관련 패키지들은 설치 자체가 어렵고
  2. Java는 Interfacing 자체가 또 하나의 숙제고
  3. HTML5+Javascript는 매우 복잡하고 지저분하다.
2. 기존 plotting 평션의 재활용 문제

R에는 많은 plotting관련 패키지들이 있습니다. 기본으로 제공하는 것도 물론 매우 훌륭한다. 대부분의 현존하는 모든 형태의 2차원 플롯은 다 지원하고 미려하고 섬세한 표현이 가능하긴합니다.
하지만 사용자마다 쓰는 플롯이 다르고 원하는 바도 많이 다릅니다.

사람의 욕심은 끝이 없어서 이 미려한 R의 플로팅을 인터렉티브 플로팅에서도 보고 싶어하지만
안타깝게도 렌더링할때 때로는 R의 플로팅용 device를 다시 개발해야하는 문제가 있으며 인터랙티브요소 때문에 plotting에 대한 펑션을 다시 제작해야 하는 경우가 대부분입니다.

이런 방식은 기본 플로팅 평션을 그대로 쓸 수가 없다.

결국 포기하고 포팅을 하거나 새로 만들게 되는데 R의 패키지 제작자들이 많아 1 ~ 2명 정도가 대부분인 것으로 볼 때 많은 종류의 플롯을 지원하기가 당연히 어려울 것이다. 완성도가 높을 수가 없습니다.
대충 어렵게 설치해서 Cranvas, iplot등을 어렵게 쓴다고 해도 이 패키지들의 결과물의 상태가 문제점이 많습니다.

그리 빠르지 않다.
그리 예쁘지 않다.
그리 편하지 않다.

실제로는 그리 쓸만하지 않다는 것입니다.

3. HTML5+Javascript을 활용하는 것은 어색하다.

그러면 크로스플랫폼 문제라도 해결하기 위해서 Application based에서 Web based로 전환하면 어떨까? Web based라면 플랫폼문제가 해결되고 기존의 플로팅 펑션을 그대로 활용하는 것은 일단 포기하는 것으로 생각하고 성능과 편리함을 미세하게 조절하고 경쾌하게 움직이는 것도 역시 다소 희생한다고 하면 시도해 볼 수도 있겠습니다.

R이 범용 랭귀지가 아니기 때문에 이 또한 우아하게 해결이 되지 않지만 그래도 할 수는 있습니다. R로 web service를 할 수 있는 잘 알려진 방법은 다음의 두가지입니다.

  • Apache를 설치하고 rApache모듈을 붙여서 R로 CGI 코딩을 한다.
  • Rook 패키지를 설치해서 CGI코딩을 하고 로칼에서 브라우저로 R에 접속한다.

이 외에도 많지만 요즘 대세는 위 두가지입니다.
위의 두가지중 하나를 선택한 후에는 base로 사용할 Javascript framework을 선택해야 하는데
Processing.js, paper.js, hichart, ExtJs등을 선택할 수 있습니다.

그런데 이쯤되면

이걸 왜 R로 해야하지?

라는 의문이 생깁니다.
애초에 R을 이용한 Interactive Visualization을 하고 싶은 이유는 앞에서 말하지는 않았지만
아래와 같은 이유 때문이 많습니다.

  • R의 강력한 플로팅 기능을 그대로 활용
  • R의 다양한 알고리즘, 펑션이나 관련 패키지를 그대로 활용
  • 최대한 R base에서 많은 부분을 할 수 있도록해서 사용성을 높임

어떤 방법을 선택해도 위 문제중 2가지 이상을 쉽게 해결해 주지 못합니다.
첫번째는 기존 플로팅 펑션을 포팅하는 방법외에는 길이 없습니다.
두번째는 R을 베이스로 작동하게 하면 해결되긴 합니다.
세번째가 문제인데
이것을 해결하기 위해서는 너무 많은 삽질이 필요합니다.
지금까지 제 결론은

R의 그래픽 디바이스를 Web 기반으로 작동하게 하나 만들고 그 디바이스를 이용한 플롯펑션을 만들고, 그리고 인터페이스쪽 부분을 Javascript로 떡칠하는 것입니다.

물론 여기까지의 이런 고민들은 Windows라는 OS를 포기하고 나 혼자만 쓰기로 작정하고 Cocoa 기반으로 만들면 됩니다.  하지만 그러기에는 Windows사용자가 너무 많습니다.

더구나 Big Data를 위해서 Hadoop, Hive, RHive 연동까지도 더불어 생각하면 선택의 폭이 더욱더 좁아집니다.

 

One thought on “R과 Interactive visualization의 문제”

  1. 안녕하세요.
    R interactive 에 대해서 google search 하다가 우연치 않게
    엄청 잘 정리해놓으신 블로그를 보게되어 좋은 정보를 얻고 댓글을 남기게 되었습니다.

    국내 블로그에서 다루지 않은 내용을 다루시는 것에 대해서 정말 대단하시다고 느낍니다.

    현재 저는 R에서의 visualization 결과를 java로 개발한 application에 이용하는 수준으로
    사용하고 있습니다. 전공이 통계학이다보니 계속 IT에 대한 것을 스스로 습득하고 있는데, 어려움이 있지만 저와 같은 고민을 하고 계신 분이 있다는 것에 대해 반가움에 댓글을 남기네요~

댓글 남기기