SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

近未来の技術トレンドを先取り! 「Tech-Sketch」出張所

rChartsでR言語のデータ解析結果をダイナミックに可視化しよう

近未来の技術トレンドを先取り! 「Tech-Sketch」出張所 第7回

rCharts(Polychart)で描画

 rChartsからrPlot関数でPolychartを呼び出し、描画してみます。

 散布図と回帰直線を1つのチャートとして描くために、Polychartでは、散布図の図上に回帰直線の図を重ねることを考えます。それぞれの図が別々のレイヤーに配置され、レイヤーを重ね合わせるイメージになります。

 やり方は散布図のrPlot関数の結果をいったん、変数p1に格納します。そして、その図上に回帰直線をlayerとして重ねて描画します。

> p1 <- rPlot(dist ~ speed, data = cars, type = 'point', size = list(const = 5), 
            color = list(const = 'grey'))
> p1  # 散布図のみの描画
> cars.lines <- data.frame(cars['speed'], dist = predict(cars.lm)) # 回帰直線データ
> p1$layer(dist ~ speed, data = cars.lines, type = 'line', 
            color = list(const = 'blue'), copy_layer = T)
> p1  # 散布図と回帰直線を重ね合わせた図の描画

 なんとか回帰直線のチャートを描画できました。R標準のabline関数のように、回帰直線を描画してくれる機能がrChartsにはないので、お手軽にとはいえません。少し手間がかかりますね。

 なお、上記は画像イメージですが、実際に出力されたHTML上ではマウスオーバーすれば座標を返してくれます。

rCharts(Highcharts)で描画

 回帰分析の最後に、hPlot関数でHighchartsを呼び出して描画してみたいと思います。

 HighchartsはrPlotとは異なり、layerを使ってチャートを重ねることはできません。

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

 # 散布図用データとしてtype 列を追加し、固定値 'scatter' を設定
> cars.scatter <- data.frame(cars, type = 'scatter') 
 # 回帰直線用データのtype 列は、固定値 'regression line' を設定
> cars.line <- data.frame(cars.lines, type = 'regression line') 
 # 散布図用データと回帰直線用データを上下に結合(rbind)
> cars.scatter_and_line <- rbind(cars.scatter, cars.line) 
 # type に複数のタイプを指定する。
> h1 <- hPlot(dist ~ speed, data = cars.scatter_and_line, group = 'type',
            type = c('line', 'scatter'), radius = 5)
> h1$colors('blue', 'grey')
> h1

 回帰直線が描画できましたが、データフレームを準備するのに手間がかかってしまいましたね。Highchartsは、完全に表示されるまでにアニメーションのあるチャートを描けるのが特徴です。

 さらに、凡例中のオブジェクトをクリックすることで、動的にチャートの表示/非表示を切り替えることができます。具体的には、scatterをクリックすると、以下のとおり散布図が非表示になり、回帰直線のみにフォーカスできます。

 Polychart、Highchartsそれぞれ、似たような見た目のチャートを描画することができますが、回帰直線を描画するまでのアプローチがまったく異なります。rChartsでは、使いたいJavaScriptライブラリごとに操作方法を覚える必要があるということになります。

クラスタ分析

 今度は、クラスタ分析した結果をrChartsで描画してみたいと思います。

 cars同様にR標準のサンプルデータセットであるiris(アヤメの花)を使います。irisにおいてクラスタ分析を行い、irisの特徴から花の品種を予測します。

 クラスタ分析とは、与えられたデータの特徴から、似ているグループ(=クラスタ)にまとめて、グルーピング(クラスタリング)する方法です。数あるクラスタ分析方法の中でも今回はkmeans法(k平均法)という方法を用います。kmeans法とは、クラスタの平均を用いて計算を繰り返しながら、与えられた数K個の適切なクラスタに分類する方法です。詳しく知りたい方は、Wikipedia(K平均法)をご参照ください。

 irisデータセットには以下の5つの属性があります。

  • Sepal.Length:がく片の長さ
  • Sepal.Width:がく片の幅
  • Petal.Length:花びらの長さ
  • Petal.Width:花びらの幅
  • Species:アヤメの品種(setosa、versicolor、virginica)の3種類

 このデータセットはすでに品種が判明しておりSpecisという属性もありますが、今回のクラスタ分析では、この属性は使わずに分析を行います。

 irisデータの中身の確認をします。それぞれの3品種のデータが連続して50件ずつ、150件からなるデータセットです。1~50件目がsetosaという品種、51~100件目がversicolorという品種、101~150件目がvirginicaという品種になります。

> iris    # iris のデータの中身を表示
      Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1            5.1         3.5          1.4         0.2     setosa
2            4.9         3.0          1.4         0.2     setosa
3            4.7         3.2          1.3         0.2     setosa
4            4.6         3.1          1.5         0.2     setosa
(中略)
74           6.1         2.8          4.7         1.2 versicolor
75           6.4         2.9          4.3         1.3 versicolor
76           6.6         3.0          4.4         1.4 versicolor
77           6.8         2.8          4.8         1.4 versicolor
(中略)
147          6.3         2.5          5.0         1.9  virginica
148          6.5         3.0          5.2         2.0  virginica
149          6.2         3.4          5.4         2.3  virginica
150          5.9         3.0          5.1         1.8  virginica

次のページ
まとめ

この記事は参考になりましたか?

近未来の技術トレンドを先取り! 「Tech-Sketch」出張所連載記事一覧

もっと読む

この記事の著者

白石 康司(TIS株式会社)(シライシ コウジ)

TIS株式会社 コーポレート本部 戦略技術センター所属。現在、機械学習技術の研究、機械学習をベースとしたアプリケーションの企画・開発を、PythonやR言語をベースに行っている。 機械学習その他に関する社内研修やオープンな技術勉強会(Tech-Circle)の企画運営にも従事。 もともと、金融系基幹Webシステム開発でのアプリケーションアーキテクチャ/データモデル設計、データベース(Oracle)担当を経...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7383 2013/09/26 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー