SHOEISHA iD

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

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

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

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

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

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

データ解析(チャート描画の事前準備)

 まずは、属性名に'.'(ピリオド)が含まれているとRで適切に扱えないので、事前に除去しておきます。

> names(iris) = gsub("\\.", "", names(iris)) # 属性名からピリオドを除去して上書き更新

 準備ができたので、クラスタ分析を行います。kmeans関数にデータとクラスタ数を指定します。なお、今回結果を単純に2次元平面(x=花びらの長さ,y=花びらの幅)に描画することにし、花びら(Petal)の情報のみでクラスタ分析します。がく片(Sepal)の情報は使いません。

 今回は最終的に分類するクラスタの数(k)は、実際の品種の数に合わせて3クラスタとします。Rでkmeans法でクラスタ分析を行うには、kmeans関数を使います。

> iris.km <- kmeans(iris[, 3:4], centers = 3) # 特徴として花びらの長さ、幅を使う 
> iris.km # クラスタ分析結果の概要を表示させます
K-means clustering with 3 clusters of sizes 48, 52, 50

Cluster means:
  PetalLength PetalWidth
1    5.595833   2.037500
2    4.269231   1.342308
3    1.462000   0.246000

Clustering vector:
  [1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 [66] 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1
[131] 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1

(省略)

 結果が出ました。クラスタ148個クラスタ252個クラスタ350個の3つのクラスタに分類されました。分析結果としての予測値は、1個目のアヤメから、150個目のアヤメまで順にClustering vector:に記載されている通りのクラスタ1~3に分類されました。

 きれいに50個ずつの3クラスタに分類されなかったことから、どうやら実際の品種どおりには分類されていないようです。この分析結果を描画します。描画の準備として、分類されたクラスタ情報を付与したデータフレームを作成しておきます。

> iris.result <- data.frame(iris, cluster = iris.km$cluster) # iris にクラスタ情報を付加

R標準のplotで描画

 クラスタ分析結果をplotで描画します。それぞれ、分類されたクラスタごとに色を変えます。

> plot(PetalWidth ~ PetalLength, data = iris.result, col = cluster)

 carsの散布図と同様の手順で結果をplotします。すると、irisの属性情報によって3つのクラスタに分類されたことがはっきり分かります。

rCharts(Polychart)のrPlotで描画

 そして今度は、rChartsのPolychartで描画します。

 ここでplotされる点がもともと、何番目のアヤメだったか識別するためにname列を追加し、列番号を格納しておきます。そして、rPlotを呼びして、チャートを生成します。さらに、チャート上のプロットされた点をマウスオーバーした際に表示させるtooltipに表示させる内容を、rPlotの引数に、直接JavaScriptで記述します。

 # 列番号の追加
> iris.poly <- data.frame(name = 1:nrow(iris.result), iris.result)
> p2 <- rPlot(PetalWidth ~ PetalLength, data = iris.poly, type = 'point', 
        size = list(const = 5), color = 'cluster', 
        tooltip="function(item){return 'Cluster: '+ item.cluster +'\n' + item.name}")
> p2 # クラスタ分析結果の描画

 クラスタ分析結果をrChartsで描画してみました。簡単なJavaScriptを直接記述することで、応用的なチャートを描画することもできました。

作成したチャートを公開

 rChartsで生成したチャートは、簡単にGitHub(gist)RPubsで公開することができます。

 さあ、作成したチャートを公開してみましょう。

rChartsを使ってGitHub(gist)に公開

 データ解析結果のrChartsで描画したチャートを公開してみましょう。

 ここでは、回帰分析結果を公開してみます。

 すでに、回帰分析結果のチャートは変数h1に格納していましたね。公開手順としては、回帰分析でhPlotの結果を格納している変数h1に対してpublishを呼び出すだけです。publishの引数のhostの値には、公開先('gist' or 'rpubs')を指定します。

 以下のコマンドを入力してみてください。

> h1$publish('MyChart', host = 'gist') # タイトルと公開先を指定 

 入力した直後にGitHubへの接続を試み、初回接続のタイミングで、github usernameとpasswordを聞かれます。自分のアカウント情報を入力し、ユーザ認証が通れば、公開は完了です。自分のgistページにHTMLファイルがアップロードされます。公開されたチャートの確認にはRのコンソールに戻ってきたURLにアクセスしてください。

まとめ

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

 rChartsに関しては日本語の情報も少なく、網羅的なドキュメントも存在しません。さらに、rChartsはまだまだ開発中のツールでうまく動作しないものもあります。

 一方、Rにはplot関数以外にも強力なチャート描画パッケージのggplot2も用意されています。ggplot2に関しては実績もあり、ドキュメント、書籍もそれなりに見つけられます。

 とは言っても、ブラウザでレポートを提供できるのは魅力的です。インタラクティブなチャートを不特定多数に向けて発信することも可能です。

 手間の部分を考慮すると、自分だけの検証用チャートとしては向いていません。効果的な場面で、rChartの表現できるパターンを把握して、活用すべきところで活用するのがよいでしょう。今後の開発に期待したいところです。

 さて、次回の「Tech-Sketch」出張所は、今回に引き続き可視化というテーマについて、直接JavaScriptからD3.jsを使ってチャートを作成する方法について紹介します。

参考にした情報

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
近未来の技術トレンドを先取り! 「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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー