Tableau + R 連携を使いこなそう! その2 - K-meansクラスタリングに挑戦

23:16 Tableau Japan 0 Comments



RとTableau連携を使いこなしたい! の2回目です。

前回は簡単な足し算をRに実行させてみましたが、今回はもう少しリアルなケースとしてk-meansクラスタリングを取り上げ、Tableau+R連携の中で何をしているのか考察してみましょう。

まずはRを使ってk-meansの意味するところを理解します。

Rに含まれているirisサンプルデータ(アイリスの花弁の標本データ)を使ってk-meansクラスタリングを行ってみましょう。 アイリスの花弁とガク片の長さ、幅が分かればk-meansクラスタリングを使ってその花の種類ガ大体わかる・・・というのが主旨です。

3種類のアイリス(setosa/versicolor/verginica) の花の花弁とガク片の長さ、幅の4種類のデータ標本を取ったもので、Fisherの研究で使われた有名なデータセット iris を利用しましょう。









Rのコンソールで 
>iris
と打てば iris のサンプルデータを見ることができます。 


> plot(iris)


と打てば散布図が表示されます。
k-meansクラスタリング(K平均法)の詳細については、他の文献を参照いただきますが、
ザックリと書くと標本の属性値から標本を意味のあるグループに機械的に分類するという仕組みです。
この場合は、アイリスの花弁とガク片の長さ、幅 から標本を属性の似ているグループに分類します。

以下のコマンドをRコンソールから実行してみます。
※ K-meansを利用できるように事前に"plyr"パッケージをインストールください。
install.packages("plyr")

# iris の1列目から4列目のデータをベクトルとして格納
.arg1 <- iris[,1]
.arg2 <- iris[,2]
.arg3 <- iris[,3]
.arg4 <- iris[,4]

#データフレーム(※)にまとめる
 d<-data.frame(.arg1,.arg2,.arg3,.arg4)

{※ 数値ベクトル、文字ベクトルを集めた2次元行列 data.frame(ベクトル1, ベクトル2・・・で作成する。)

cluster <- kmeans(d,3) #k-meansの実行。クラスタ数は3に指定。<- d="" font="" k-means="" kmeans="">
cluster #k-means の結果表示

result <- km$cluster #クラスタリング結果の抽出
result #クラスタリング結果の表示


これで150の標本が3つのクラスターに分類され、それぞれに1,2,3というクラスター番号が割り振られているのがわかるかと思います。

---------------------------------------------------------
次に、これと同じことをTableauからデータを与えてRに実行させてみたいと思います。
まずはデータの準備から。

> d<-iris
> write.table(d,file="c:/iris")

でirisのデータがCSVに落とせますので、これをTableauから読み込みます。
列の名前は図のように指定します。

次にSCRIPT_INTを使ってRスクリプトを含む計算式"Cluster" を作ります。

---- 計算式の中身 ----

SCRIPT_INT(
'
set.seed(42);
d<-data.frame(.arg1,.arg2,.arg3,.arg4)
result <- kmeans(d, 3);
result$cluster;
', 
SUM([Petal.Length]), SUM([Petal.Width]),SUM([Sepal.Length]),SUM([Sepal.Width]))


---- ---- ---- ---- ---- 

Tableauからデータを入れるところ以外は先ほどRコンソールから実行したコマンドとほとんど一緒なので、今度は、中で何をしているか気持ちは分かるような気がしませんか??

そしてこの関数の結果が整数型のベクトルとなることも理解できると思います。
クロス表にすると、各標本データに対して計算されたクラスター番号が割り振られているのが分かります。
ここまでくれば、あとはTableauの世界で自由にビジュアライゼーションを行えます。
花の花弁とガク片の長さ、幅の4種類のデータ標本を散布図にしてクラスターを色にドラッグして見ましょう。標本が3種類のクラスターに分類されていることが分かります。
※ K-meansを利用できるように事前に"plyr"パッケージをインストールください。

install.packages("plyr")


実際の花の種類(Setosa,Versicolor,Virginica)の分類と比べて見ます。
ほとんど変わりませんね。k-meansのクラスタモデルが実際のアイリスの花の種類をうまく分類できていることが分かります。


応用編として、パラメータの数を自由に指定できるようにすれば、より細かに標本を分類することができますし、もしかしたら、同じ品種の中でも新たなクラスターを発見することができるかもしれませんね。Tableauであればマウスを当てればすぐに何番の標本がどのクラスターに属するか一発でわかるので便利ですよね!

------------------------------------------------------------------------------------------------

今回はTableauR連携の仕組みを理解するためにk-meansを取り上げてみましたが、
実はTableau 10 ではk-meansクラスタの機能をTableau自体が既に取り込んでいるんですね。

ただ、k-means以外のモデリング技法(階層型クラスタリング、EMアルゴリズム、はたまた今話題の機械学習などなど・・・)Rが提供する先進的なアルゴリズムを利用するには、これからもR連携が必要になります。

Tableauだったら、可視化のプログラミングを考えることなく、データからもっと簡単に自由な発見を得ることができるのがスゴイところだと思います。

Tableau+Rの連携でデータサイエンティストとデータアーティストのコラボレーションが進んだらオモシロイことが起きそうですね。

以上、ご参考になれば幸いです。

※ ワークブックのダウンロードはこちらからどうぞ。(文末にワークブックの添付があります)
Tableau Community Japan: 
Tableau + R 連携で知っておきたいこと
https://community.tableau.com/docs/DOC-10017

※ 尚、Tableau+R連携におけるRのコードスクリプティングについては、サポートの範囲外となりますので、ご了承ください。





0 コメント: