Rとウェブの融合(1)ーrChartsの基礎ー

今回からしばらくの間、「Rとウェブの融合」というトピックで連載させて頂きます。また、この他のトピックも随時取り上げる予定です。 お付き合い頂ければ幸いです。

はじめに

世の中はウェブ全盛の時代です。 ありとあらゆるサービスがウェブ上に構築され、ユーザに利便性や感動を提供し続けています。 JavaScriptは「ウェブページを派手に装飾する無意味な技術」という過去の黒歴史を乗り越えて、ウェブ技術を支える中心的な存在となっています。

Rとウェブの融合の中で重要なウェイトを占めるのが、ウェブ上でのデータ可視化(グラフ化)やレポート、プレゼンテーションの作成です。 ウェブ技術の進化に伴いデータ可視化やプレゼンテーションのためのJavaScriptライブラリが数多く開発されています。 このようなライブラリの目的のひとつはデータ解析の結果を他人に公開することなので、データ解析をメインタスクとするRとの親和性が高いことは想像に難くありません。 ところが、Rの解析結果を取り込んで、データ可視化を行うためのHTMLファイルを記述することは非常に面倒です。

このような状況の中で、可視化やプレゼン作成を行うHTMLファイルをR上で作成するためのツールが開発されています。 googleVisrChartsを使うことで、R上のデータ解析とウェブ上での可視化をシームレスに繋ぐことができます。 またknitrslidifyによって、データ解析の結果をHTMLファイルのレポートとして作成し、ウェブ上に公開、共有することができます。

この他にもShinyというウェブアプリケーション作成フレームワークを使うとR上で簡単にウェブアプリケーションを構築できます。 またR上でウェブサーバとの通信を行う、twitterを利用する、オンラインのデータを取得する、ウェブで広く使われているJSON形式やXML形式のデータを処理する、といったことも可能です。 このような最新の技術を取り入れることで、Rを使ったデータ解析・マイニングの幅がグンと広がること間違いありません。

Rとウェブの融合を支えるツール

Rでウェブ技術を使う上で役立つツールをいくつか簡単に紹介します(著者が知らないツールもまだまだあるかもしれません)。 Rとウェブの融合は比較的新しい技術なので、現在鋭意開発中のツールも多数含まれています。 また、CRAN Task ViewのWeb Technologies and Servicesという項目にはウェブ技術に関連するパッケージがリストアップされているので参考にして下さい( http://cran.r-project.org/web/views/WebTechnologies.html )。オンラインで取得できるデータソースなども分野ごとにまとめられています。

可視化・グラフの作成

ウェブレポート作成

ウェブアプリケーションの作成

ウェブとの通信

rChartsパッケージ

rChartsはMcGill大学のRamnath Vaidyanathan博士が開発を手がけているR上でJavaScript可視化ライブラリを利用するためのパッケージです。 github上で開発、公開が行われています(このためRの公式リポジトリであるCRAN上では公開されていません)。

現在、数多くのJavaScript可視化ライブラリが開発されており、ウェブ上で非常に美しい可視化を行うことができるのですが、 利用するためにはHTMLやJavaScriptを習得したり、またライブラリごとに書式が異なるため各ライブラリの書式を調べたりする必要があります。 rChartsを使うと可視化を行うHTMLファイルをR上で作成できるので、HTMLやJavaScriptの習得は不要です。 また異なるライブラリを同じ書式で利用できるように設計されているので、ライブラリごとの書式の違いをあまり気にする必要がありません (但し細かいカスタマイズをするにはHTMLやJavaScriptについて学んだり、各ライブラリの書式を調べたりする必要が出てきます)。

rChartsパッケージの基本的な使い方

rChartsパッケージはdevtools::install_github()によってgithubからインストールします。

> install.packages("devtools")
> devtools::install_github('rCharts', 'ramnathv')

以下の例ではHighchartsという可視化ライブラリを使ってBODデータの可視化を行うHTMLファイルを作成しています。

> library(rCharts)
> # プロットオブジェクトの作成
> p <- hPlot(demand ~ Time, data = BOD)
> # サイズの調整
> p$set(width = 400, height = 200)
> # ウェブページとして保存
> p$save("outp01.html", cdn = TRUE)
> # ブラウザで表示
> browseURL("outp01.html")

ブラウザでの表示例

rChartsパッケージで利用できる可視化ライブラリ

rChartsではプロットオブジェクトを作成する関数(上述の例でのhPlot)を利用する可視化ライブラリに応じて選択します。 主な可視化ライブラリとプロットオブジェクトの作成関数は以下の通りです。

Polychart.jsからRickshawまでは様々な形式のグラフを作成できるライブラリです。それぞれ異なる特色を持っています。 Leafletを使うと地図を利用した可視化を行うことができます。

> p <- Leaflet$new()
> # 中心の指定
> p$setView(c(43.7, 143.5), 7)
> # マーカーを追加
> p$marker(c(43.312799, 142.540444), bindPopup = "麓郷")
> p$marker(c(43.770636, 142.364819), bindPopup = "旭川")
> p$marker(c(44.021876, 145.18962), bindPopup = "羅臼")
> # 地図のサイズを指定
> p$save("outp02.html", cdn=TRUE)

ブラウザでの表示例

DataTablesを使うとソートやフィルタが可能な表を作成できます。

> # あやめデータの表を作成
> p <- dTable(iris)
> p$save("outp03.html", cdn = TRUE)

ブラウザでの表示例

rChartsの可視化をknitrで利用する

knitrパッケージを使うと、マークダウン記法で記述したレポートの中にRのコードを埋め込んで、HTMLファイルのレポートを作成することができます。 knitrパッケージの詳細については本連載第123回、及び2014年6月に刊行予定の拙著「シリーズ Useful R 第9巻 ドキュメント・プレゼンテーション生成」(共立出版)の中でも詳しく解説されていますので参考にして下さい。 HTMLレポートではrChartsによる可視化が可能です。 HTMLレポートとJavaScript可視化ライブラリの組み合わせは非常に強力です。是非試してみてください。

利用方法は簡単で、チャンクオプションでresults="asis"を指定して、作成したプロットオブジェクトに対してshowメソッドを呼び出します。 試しに以下のようなRマークダウンファイル(embed-rcharts.Rmd)からHTMLレポート(embed-rcharts.html)を作成してみます。

embed-rcharts.Rmd

## `BOD`の解析結果

<!-- CSSを使ってスタイルを設定しています -->
<style>
#plot01 { border: solid 2px; }
</style>

このレポートでは`BOD`データについて解析した結果を報告します。

## `BOD`の概要

```{r echo=FALSE}
summary(BOD)
```

## `demand`と`Time`の関係

```{r results="asis", echo=FALSE}
library(rCharts)
p <- hPlot(demand ~ Time, data = BOD)
p$set(width = 400, height = 200)
p$show("inline", chartId = "plot01", include_assets = TRUE, cdn = TRUE)
```

knitrでHTMLレポートを作成します。

> # 必要ならknitrをインストールします。
> # install.packages("knitr")
> library(knitr)
> # HTMLレポートを作成します。
> knit2html("embed-rcharts.Rmd")
> # ブラウザで表示します。
> browseURL("embed-rcharts.html")

なお、windows環境では文字コードに注意する必要があります。Rmdファイルの文字コードがUTF8の時は、開発版のknitrをgithubからインストールしてknit2htmlの引数でencoding="UTF8"を指定して下さい。

> devtools::install_github('knitr, 'yihui')
> knit2html("embed-rcharts.Rmd", encoding="UTF8")

embed-rcharts.htmlの表示例

次回はrChartsを使って色々な種類のグラフの作成例を紹介します。