データ解析(チャート描画の事前準備)
まずは、属性名に'.'(ピリオド)が含まれていると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 (省略)
結果が出ました。クラスタ1が48個、クラスタ2が52個、クラスタ3が50個の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を使ってチャートを作成する方法について紹介します。


