やってみよう分析！第9章：Scala, Eclipse(Scala IED for Eclipse), R で作る簡易分析環境 for Windows

#はじめに

今回も始まりました。[やってみよう分析！シリーズ](http://qiita.com/f81@github/items/78c0855408317e83aa66)

前章から引き続きScalaを活用した簡易分析環境の構築方法を紹介します。本章でも __Windows 7 Professional__上に環境を作っていきます。

Pythonはライブラリが充実していて、特にmatplotlibという強力なプロット機能を持つライブラリが存在します。一方ScalaはPythonと異なりプロット機能がデフォルトでは充実いていません。そこで本章ではひとつの方法として、[R](http://www.r-project.org/) を使います。  __R__ は統計処理を行うソフトウェアとして有名ですが、ここではScalaからRを呼び出し、データプロットするために使います(R はデータの可視化にも優れています)。もちろんプロットだけではなく、様々なデータ分析をEclipse上でRと連携させて実行することが可能です。

__※Java/R Interface と RCaller について※__
本文ではJava/R Interfaceを使ったJavaとRの連携方法の紹介をしています。この文章を書いた後で __[RCaller](http://stdioe.blogspot.com.tr/2014/06/rcaller-24-has-just-been-released.html)__ と呼ばれる別の連携用モジュールを見つけました。少しいじっただけなのですが、こちらも非常に使いやすいようですので興味のある方は参考にしてみてください。


##Scalaのインストール

####Java JDKのインストール
Scalaをインストールするためには __JavaのJDK__を先にインストールしておく必要があります。最新のJDKは[こちらのサイト](http://www.oracle.com/technetwork/java/javase/downloads/index.html)から入手することが可能です。インストールファイルをダウンロードしてから実行しインストールを完了させます。インストールが完了したらbinフォルダへパスを通します。環境変数のシステム環境変数を編集し、javaのbinフォルダの場所を指定します。例えば、__C:\Program Files\Java\jdk1.7.0_51\bin;__ のようにです。設定が完了したらコマンドプロンプトから`java -version` と入力しJavaのバージョン情報が出力されれば完了です。


####Scalaのインストール

Scalaの[このページから](http://www.scala-lang.org/download/)インストールファイルをダウンロードして実行します。インストールが完了したら環境変数のシステム環境変数のPathにScalaのbinフォルダを指定します。例えば __C:\scala\bin;__を追加します(C:\scalaの直下にbinがある場合)。設定が完了したらコマンドプロンプトを起動して __scala -version__と入力します。バージョン情報が出力されれば問題ありません。


##Scala IED for Eclipseのインストール

Eclipseが既にインストールされているものとします([8章参照](http://qiita.com/msano/items/e94a641274c5b7f6a75a))。Eclipseを起動します。 __Help➞Install New Software➞Add__と進み、[こちらから](http://scala-ide.org/download/current.html)Scala IDE for EclipseをダウンロードするためのURLを取得、Locationに貼り付けます(ここでNameはScala IDE for Eclipseとしました)。貼り付けたらOKします。

![fig02.png](https://qiita-image-store.s3.amazonaws.com/0/40982/978f2e21-2d93-5363-7ab5-8655cb058c1c.png)

Scala IDE for Eclipseにチェックを入れてNextで進みインストールを完了させます。 __Window➞Open Perspective➞Other__と進み、Scalaを選択してOKします。

![fig03.png](https://qiita-image-store.s3.amazonaws.com/0/40982/01c953ba-f73d-ec18-c6e5-ddc51cb85722.png)

Eclipse上でScalaのコーディングをするためにPerspectiveをScalaに切り替えます。

![fig04.png](https://qiita-image-store.s3.amazonaws.com/0/40982/a1254c49-6f95-56ef-9a52-e8c55d86637d.png)

__File➞New➞Scala Project__としてプロジェクト名を記入してFinishします(ここではscalaTestとしましょう)。scalaTestアイコンの上で右クリックして __New➞Package__でそのままFinishボタンを押します。続いてscalaTest packageアイコンの上で右クリックして __New➞Scala Objec__を選択します。nameはここでも適当にtestとつけておきます。

object testの後ろに __extends App__と付け加え、`print("hello world")`と書き込みます。最後に実行してhello worldと表示されればOKです。

![fig05.png](https://qiita-image-store.s3.amazonaws.com/0/40982/a1a72ec7-92af-0bb7-689a-7ff032024290.png)


##Rのインストール

次はEclipse上でRを使うための設定を紹介していきます。ここでは[hamadakoichi blog](http://d.hatena.ne.jp/hamadakoichi/)の次の２つのページを参考にしました。

* [[R][統計解析][データマイニング] R を Eclipse で使う](http://d.hatena.ne.jp/hamadakoichi/20100110/1263127663)
* [[R][統計解析][データマイニング] Java R Interface (JRI) を用い 統計解析環境 R を Java から使用する ](http://d.hatena.ne.jp/hamadakoichi/20100111/1263227076)

####Rのインストール

Rをインストールあするために[ここのページ](http://cran.md.tsukuba.ac.jp/)からインストール用ファイルをダウンロードして実行します。

![fig06.png](https://qiita-image-store.s3.amazonaws.com/0/40982/3e766969-2f7f-d882-4b70-62f206b0e0ff.png)

####WalWareのインストール

Rのインストールが完了したら次はEclipseの設定に移ります。Eclipse Plug-inとして[WalWare](http://www.walware.de/goto/statet)を使います。Eclipseを起動させ、 __Help➞Install New Software➞Add__から

* Name：WalWare
* Location：http://download.walware.de/eclipse-4.3

と入力してOKします(LocationのURLはEclipseのバージョンに依存しています。詳しくはWalWareの[サイト](http://www.walware.de/goto/statet)を参照指定ください。)。

![fig07.png](https://qiita-image-store.s3.amazonaws.com/0/40982/e27f8f57-ed4b-de89-3a9a-2693f6717150.png)

Eclipseへインストールするプラグインで必要なファイル類にチェックを入れてNextで先に進みインストールを完了させます。 __Window➞Open Perspective➞Other__から __StatET__を選択ししておきます。

####Eclipseの設定

__Window➞Preferences➞StatET➞Run/Debug➞R Enviroments➞Add__で R_HOMEを設定します(ここでは`C:\Program Files\R\R-3.1.1`)

![fig08.png](https://qiita-image-store.s3.amazonaws.com/0/40982/5d39ba31-d949-669f-7797-7631dec212cc.png)

次にR Consoleを設定します。 __Run➞Run Configurations➞R Consoleをダブルクリック➞New Configurations__を選択。Launch typeで「Rterm」を選択します。Applyを押して一度閉じます。

__File➞New➞R Project__を選択（ここではProject nameをtestRとします）。testRアイコンの上で右クリックして __New➞R Script File__を選択。

####RをEclipse上で操作テスト

Rを起動させるために __Run➞Run Configurations➞R console➞New_configuration➞Run__を選択します。Rが起動したら`print("hello world")`と入力して __Run Entire Command in R__を押します。うまくいけばコンソール画面にhello worldと出力されます。

![fig10.png](https://qiita-image-store.s3.amazonaws.com/0/40982/6f3e6766-04db-b3f7-0d0a-b96858ded0e3.png)


##Java/R InterfaceでEclipseとの連携
Scala(またはJava)上でRを呼び出すための設定を行います。Rを起動してコンソール画面上で`install.packages("rJava")`と入力します。インストールが完了したら連携テストを実施します。

連携テストのためにScalaのProjectを生成します。ここではProject nameをtestRとしておきます。Nextボタンを押してLibrariesタブを開きます。Add External JARsを押して`rJava\jri`にあるJRI.jarを指定します(自分の環境では`C:\Program Files\R\R-3.1.1\library\rJava\jri`)。

![fig11.png](https://qiita-image-store.s3.amazonaws.com/0/40982/bedc8ca1-f373-d374-0715-7bcc75bc3451.png)

つぎに`C:\Program Files\R\R-3.1.1\library\rJava\jri\x64`にあるjri.dllをコピーしてtestRプロジェクトアイコン上でペーストします。さらにプロジェクト配下にScala Object(ここでnameはtest)を作ります。

![fig12.png](https://qiita-image-store.s3.amazonaws.com/0/40982/eaf79ea0-2c12-64d3-d5f1-bf869d7b6679.png)

__Run➞Run Configurations➞Scala Applicationをダブルクリック➞New Configuration__を作成。NameをtestRに変更しEnviromentタブを開きます。さらに__New➞Variable➞Edit Variables__を選択し下記４つを設定します。

* Path: C:\Program Files\R\R-3.1.1\bin\x64
* R_DOC_DIR: C:\Program Files\R\R-3.1.1\doc
* R_INCLUDE_DIR: C:\Program Files\R\R-3.1.1\include
* R_SHARE_DIR: C:\Program Files\R\R-3.1.1\share

__※注意※：__使っているRが32bitか64bitかでPathの場所が変わります。

下記のScalaのサンプルコードを実行してScalaとRが連携できているか確認します。使い方のおおまかな流れは __assign__メソッドで変数にデータを格納して、__eval__メソッドでコマンドを実行します。下記のサンプルのフローは以下のようになっています。

* -60から60までの整数を __a__という__Array__に格納。
* 横軸を`a`、縦軸を`sin(a/5)*( 1+sin(a/4) )`として折れ線グラフをプロット(プロットのタイプは`type=\"l\"で指定`)。  
* グラフがすぐ消えないように`readLine`を挟んでコンソール上でエンターが押されたらグラフが消えるようにしています。
* `dev.off()`でグラフの機能を停止させます(これを実行しないと裏でplotのプロセスが生き残ってしまうようです)。
* 最後に`end()`で終了。


```scala
package testR
import org.rosuda.JRI.{ REXP, Rengine }

object test extends App {
	val engine = new Rengine(Array[String]("--no-save"), false, null)
	engine.assign("a", (-60 to 60).toArray )
	engine.eval( "plot(a, sin(a / 5) * ( 1+ sin(a /4) ) ,type=\"l\" )" )
	print("press enter key to end the process")
	readLine	//enter -> end
	engine.eval("dev.off()") 
	engine.end()
}
```

うまく実行されると波形プロットが出力されます。

![fig13.png](https://qiita-image-store.s3.amazonaws.com/0/40982/993495a7-3b13-b0ad-35f8-a0d36de4af06.png)

使用した感想としては、JavaからRを立ち上げた時のプロセスの挙動がちょっと不安定な気もしますが、とりあえずローカルでさくっと分析結果を可視化させたいときに重宝すると思います。

===========================================

##こちらもよろしくおねがいいたします。

* [目次](http://qiita.com/f81@github/items/78c0855408317e83aa66)

###入門編

###第1部イントロダクション
* [第1章：分析技術の活用～ビジネス視点から～](http://qiita.com/msano/items/2f39517b4cd65e14003e)
* [第2章：分析手法を眺めてみよう！](http://qiita.com/msano/items/bfdb3c04d59992c7ebcb)

###第2部エクセルで学ぶ分析入門 
* [第3章：ExcelとMySQLの連携](http://qiita.com/msano/items/fdcc0cbb8e41b988ce2d)
* [第4章：ExcelとMySQLの連携2 csvデータのimport ](http://qiita.com/msano/items/7dff8bc241799875b7e9)
* [第5章：Excelの分析ツールとソルバーの活用(回帰、最小2乗法)](http://qiita.com/msano/items/dc96da37ce8ddd4a7c1d)
* [第6章：Excelソルバーの応用(ポートフォリオ最適化)](http://qiita.com/msano/items/46d92aadbfcb1423e1ec)
* [おまけ 2 - 1： Excel VBAで強化学習(Q-learning, ε-greedy / softmax 行動選択)](http://qiita.com/msano/items/e2df51f514b3ccb375ea)
* [おまけ 2 - 2： Excel VBAでモンテカルロ・シミュレーション(メトロポリス法：2次元イジングモデルの例)](http://qiita.com/msano/items/e6d0f941ba038cc1a62c)


###第3部 データ可視化（ビッグデータに限らない）
* [第7章：Google Charts Sankey Diagramを使ってデータ可視化](http://qiita.com/msano/items/6c3d9d10148a683c0d7b)

###実践編

###第4部 Python/Scalaで分析ことはじめ 
* [第8章：PythonとEclipse(PyDev)で作る分析環境 for Windows](http://qiita.com/msano/items/e94a641274c5b7f6a75a)


###Appendix 
* [Appendix A-1：Windows 7 Professional + Visual Studio Express 2013にCUDA6.5をインストール](http://qiita.com/msano/items/a12c422ed4f6862306a0)


==================
# お知らせ：Fringe81エンジニアチームでは仲間を募集しています！
　<img src="http://www.fringe81.com/images/common/logo_fringe81.png" border="0"><br>
　チームの雰囲気や採用情報については下記ページをご覧下さい。<br>

- [Fringe81エンジニアチームのページ](http://www.fringe81.com/tech.html)
- [採用情報ページ](http://www.fringe81.com/recruit/)