Tech Sketch Bucket of Technical Chips by TIS Inc.

rChartsを使ってR言語のデータ分析結果を可視化する

Pocket

最近、ビッグデータ、データサイエンティストという言葉を耳にする機会が増えてきました。そして、統計解析向けプログラミング言語である R にも注目が集まっています。R を使って、データ解析したいというニーズも増えてきています。今回、そのR で簡単なデータ解析した結果を、オープンソースパッケージのrCharts を使って可視化してみたいと思います。

統計解析向けプログラミング言語 R とは

Rlogo.png

R はオープンソースの統計解析向けのプログラミング言語であり、その開発実行環境でもあります。R が、他のプログラミング言語と大きく違う点は、統計解析に特化したプログラミング言語であるということです。統計解析に特化した言語には、SAS、SPSS、S-PLUS など、有償のものが多い中、R は無償で使うことができます。そのため、R は多くのユーザーに支持されています。

R 本体や各種パッケージをダウンロードするためのWeb サイトである CRAN では4,000 を超えるR のパッケージが公開されています。CRAN 以外で公開されているパッケージも数多くあります。これらのパッケージの多くが統計解析を行うためのものになります。
例えば、R 本体や、パッケージの中には、回帰分析や、主成分分析や、クラスタ分析といった統計解析手法を簡単なコマンドで実行したり、グラフ描画したりするための関数が用意されています。

rCharts とは

rCharts とは、最も注目されているR の可視化パッケージの1つで、rCharts という名前から想像できる通り、R からチャート(図表、グラフ) を扱うパッケージです。

rCharts では、シンプルな関数を呼び出すことで、鮮やかなグラフを生成することができます。生成されたグラフはブラウザ上に表示することができ、R をインストールしていないユーザーへ対する分析結果の公開も簡単に行える機能が備わっています。

rCharts は、Ramnath Vaidyanathan によってオープンソースソフトウェアとして開発され、GitHub で公開されています。オープンソースソフトウェアライセンスはMIT LICENSE 。公式サイトは こちら で、ソースコードが GitHub 上で公開されています。

描画できるグラフのイメージは、 チュートリアルページ にサンプルがいくつかあり、そこで確認することができます。rCharts を利用する前に一度、目を通すことをおすすめします。

rCharts を使った、より高度なグラフィックスについては、例えば、ニューヨークタイムスの記事のグラフをrCharts で置き換えた以下の2つの事例が参考になります。それぞれ、オリジナルの図表と、rCharts で置き換えた図表を、見比べて見ると面白いでしょう。

rCharts の仕組み

rCharts はrPlot などの関数の引数でデータを渡すことで、グラフを描画するHTML ファイルを生成します。グラフィカルなグラフの実現のために、rCharts はJavaScript の可視化ライブラリを用いています。可視化ライブラリでは、 JSON フォーマットなどでデータを用意すれば簡単に、インタラクティブでダイナミックなグラフを生成することができます。

rCharts で使える様々なJavaScript 可視化ライブラリ

rCharts からは、以下の複数のJavaScript 可視化ライブラリが使用できます。JavaScript ライブラリは、それぞれ特徴があり、実際に使用する場合、各ライブラリについての知識が必要です。さらに、ライセンスも基本的にはrCharts とは別になるため、ライセンスを確認した上で使用してください。

今回、これらの中からいくつか試してみたいと思います。本記事で主に紹介しているのは以下の2つのJavaScript ライブラリになります。

以下のライブラリは今回紹介していませんが、上記同様rCharts から利用することができます。

実際にR からグラフを描画するためのコマンド例が以下のフォルダの各JavaScript ライブラリフォルダに格納されています。(無いライブラリもあります。)
https://github.com/ramnathv/rCharts/blob/master/inst/libraries/

例えば、Highchats の場合は、コマンド例は以下のファイルの中に記述されています。
https://github.com/ramnathv/rCharts/blob/master/inst/libraries/highcharts/examples.R

やってみよう

データ分析を行い結果を、R の標準機能と、rCharts の機能、それぞれの描画機能で比較してみましょう。

R のインストール

R Project サイト のdownload R のリンクから、一番近いCRAN ミラーサイト(日本からだと、東京、筑波、兵庫のいずれか) を選んで、R 本体をダウンロードしてください。(記事執筆時点での、R の最新バージョンは 3.0.1 です。本記事で行った検証については、このバージョンを使用しています。)

詳細なインストール方法の説明は省略します。 インストール方法の説明が必要な場合、 こちらのサイト を参考にしてください。

rCharts のインストール

devtools というR の開発ツールを使って、開発者のGitHub のリポジトリから直接インストールします。R のコンソールより、以下のコマンドを実行して、rCharts をインストールしてみましょう。

エラーが発生していなければ、rCharts のインストールは完了です。

なお、rCharts は開発中のツールになります。注意事項として、本記事執筆時点からrCharts の内容が変更になる可能性があります。その結果、本記事のコマンドは期待通りの動作をしなくなる可能性があります。

rCharts で回帰分析

基本的なデータ解析手法である回帰分析の結果をrCharts でグラフに描画してみたいと思います。

回帰分析とは、とある説明変数を用いて目的変数を説明する統計モデルを、データセットから求める分析手法です。
今回は1つの説明変数を扱う単回帰分析を、R 標準添付のサンプルデータセットであるcars を使って行います。

なお、cars データセットとは、以下の2つの属性を持つシンプルなデータセットです。speed が説明変数、dist が目的変数となります。

  • speed: 車の速度 (m/h)
  • dist: その速度のときに、ブレーキをかけて止まるまでに要した距離 (ft)

実際のサンプルデータcars の中身はコンソールから、cars と入力するだけで、確認することができます。

speed dist
1 4 2
2 4 10
3 7 4
4 7 22
(中略)
47 24 92
48 24 93
49 24 120
50 25 85

データ解析 (グラフ描画の事前準備)

グラフを生成する前に、R のlm 関数で回帰モデルを計算しておきます。

なお、データ解析については、本記事では詳しく説明しません。詳細な説明が必要な方は、参考文献の「Rによるデータサイエンス - データ解析の基礎から最新手法まで」を参考にしてください。

Call:
lm(formula = dist ~ speed, data = cars)

Residuals:
Min 1Q Median 3Q Max
-29.069 -9.525 -2.272 9.215 43.201

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -17.5791 6.7584 -2.601 0.0123 *
speed 3.9324 0.4155 9.464 1.49e-12 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 15.38 on 48 degrees of freedom
Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438
F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12

上記の "(Intercept)""speed""Estimate" が、解析結果としての回帰直線の切片と傾きになります。故に、回帰モデルは以下の通りになります。

dist = -17.5791 + 3.9324 * speed

上式の意味するところは、説明変数speed が1 増えると、ブレーキをかけてから止まるまでの距離dist は3.9324 増えるということになります。さらに、speed が0 のときはdist は-17.5791 となります。

ブレーキをかけてから止まるまでの距離dist が負の値を取るということは、現実的にはあり得ませんが、今回採用した線形モデル(dist がspeed の1次式に比例する) によると、こういう結果になりました。今回は、このまま描画することにします。

R 標準のplot 機能で描画

まずは、R の標準機能で描画します。plot 関数で散布図を描画し、abline 関数で回帰直線を描画します。

plot_cars_lm.png

標準のplot でも、情報量としては不足はありませんが、少し素っ気無い気もしますね。

Polychart で描画

続いて、Polychart で描画してみます。Polychart は、rPlot 関数で呼び出すことができます。

散布図と回帰直線をひとつの図に描くために、Polychart では、散布図の図上に、回帰直線の図を重ねることを考えます。それぞれの図が別々のレイヤーに配置され、レイヤーを重ね合わせるイメージになります。
やり方は散布図のrPlot 関数の結果を一旦、変数 p1 に格納します。そして、その図上に回帰直線をlayer として重ねて描画します。

rPlot_cars_lm.png

なんとか、グラフィカルな回帰直線を描画できました。R 標準のlm 関数の結果を渡せば回帰直線を描いてくれるabline 関数のような機能が、rCharts には無いので、お手軽とはいえません。少し手間ですね。
なお、上記は画像イメージですが、実際に出力されたHTML 上では、マウスオーバーすれば座標を返してくれたりしてくれます。

Highchart で描画

最後にHightchart で描画して見たいと思います。Highchart は、hPlot 関数で呼びすことができます。

Highchart は、rPlot とは異なり、layer を使ってグラフを重ねることはできません。
ただし、hPlot で複数種類の情報をもったデータを一気に指定することで、複数種類のチャートを1つの図上に、描画することができます。つまり、回帰分析においては、hPlot 関数の引数として、散布図用の実データと、回帰直線用の予測データを指定することで、散布図と、回帰直線を同じ図の上に描画できます。やり方として、事前に散布図用データと、回帰直線用データを、1つにまとめたデータフレームを作成する作業が必要になります。

hPlot_cars_lm.png

ダイナミックなグラフが描画できましたが、データフレームを準備するのに手間がかかってしまいましたね。

まとめ

今回試してみたrCharts ですが、場面によっては、ダイナミックなグラフを描画できることはわかりましたが、R の標準のplot 関数に比べると、適用できる場面はまだまだ限られています。応用的なグラフを描画をしようとすると急に難しくなり、JavaScript 可視化ライブラリごとの呼び出し方の知識も必要になります。

rCharts に関しては、日本語の情報も少なく、網羅的なドキュメントも存在しません。さらに言うと、rCharts はまだまだ開発中のツールで、上手く動作しないものもあります。
一方、R には、plot 関数以外にも強力なグラフ描画パッケージのggplot2 も用意されています。ggplot2 に関しては実績もあり、ドキュメントもそれなりに見つけることができます。

とは言っても、ブラウザでレポートを提供できるのは魅力的です。インタラクティブなグラフを不特定多数に向けて発信することも可能です。一方、自分だけの検証用チャートとしては向いていません。効果的な場面で、rChart の表現できるパターンを抑えて、活用すべきところで活用するのがいいでしょう。

今後の開発に期待したいところです。

参考にした情報

エンジニア採用中!私たちと一緒に働いてみませんか?