はじめに
今回も始まりました。やってみよう分析!シリーズ
前章から引き続きScalaを活用した簡易分析環境の構築方法を紹介します。本章でも __Windows 7 Professional__上に環境を作っていきます。
Pythonはライブラリが充実していて、特にmatplotlibという強力なプロット機能を持つライブラリが存在します。一方ScalaはPythonと異なりプロット機能がデフォルトでは充実いていません。そこで本章ではひとつの方法として、R を使います。 R は統計処理を行うソフトウェアとして有名ですが、ここではScalaからRを呼び出し、データプロットするために使います(R はデータの可視化にも優れています)。もちろんプロットだけではなく、様々なデータ分析をEclipse上でRと連携させて実行することが可能です。
※Java/R Interface と RCaller について※
本文ではJava/R Interfaceを使ったJavaとRの連携方法の紹介をしています。この文章を書いた後で RCaller と呼ばれる別の連携用モジュールを見つけました。少しいじっただけなのですが、こちらも非常に使いやすいようですので興味のある方は参考にしてみてください。
Scalaのインストール
Java JDKのインストール
Scalaをインストールするためには __JavaのJDK__を先にインストールしておく必要があります。最新のJDKはこちらのサイトから入手することが可能です。インストールファイルをダウンロードしてから実行しインストールを完了させます。インストールが完了したらbinフォルダへパスを通します。環境変数のシステム環境変数を編集し、javaのbinフォルダの場所を指定します。例えば、C:\Program Files\Java\jdk1.7.0_51\bin; のようにです。設定が完了したらコマンドプロンプトからjava -version
と入力しJavaのバージョン情報が出力されれば完了です。
Scalaのインストール
Scalaのこのページからインストールファイルをダウンロードして実行します。インストールが完了したら環境変数のシステム環境変数のPathにScalaのbinフォルダを指定します。例えば __C:\scala\bin;__を追加します(C:\scalaの直下にbinがある場合)。設定が完了したらコマンドプロンプトを起動して __scala -version__と入力します。バージョン情報が出力されれば問題ありません。
Scala IED for Eclipseのインストール
Eclipseが既にインストールされているものとします(8章参照)。Eclipseを起動します。 __Help➞Install New Software➞Add__と進み、こちらからScala IDE for EclipseをダウンロードするためのURLを取得、Locationに貼り付けます(ここでNameはScala IDE for Eclipseとしました)。貼り付けたらOKします。
Scala IDE for Eclipseにチェックを入れてNextで進みインストールを完了させます。 __Window➞Open Perspective➞Other__と進み、Scalaを選択してOKします。
Eclipse上でScalaのコーディングをするためにPerspectiveをScalaに切り替えます。
__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です。
Rのインストール
次はEclipse上でRを使うための設定を紹介していきます。ここではhamadakoichi blogの次の2つのページを参考にしました。
- [R][統計解析][データマイニング] R を Eclipse で使う
- [R][統計解析][データマイニング] Java R Interface (JRI) を用い 統計解析環境 R を Java から使用する
Rのインストール
Rをインストールあするためにここのページからインストール用ファイルをダウンロードして実行します。
WalWareのインストール
Rのインストールが完了したら次はEclipseの設定に移ります。Eclipse Plug-inとしてWalWareを使います。Eclipseを起動させ、 __Help➞Install New Software➞Add__から
- Name:WalWare
- Location:http://download.walware.de/eclipse-4.3
と入力してOKします(LocationのURLはEclipseのバージョンに依存しています。詳しくはWalWareのサイトを参照指定ください。)。
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
)
次に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と出力されます。
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
)。
つぎにC:\Program Files\R\R-3.1.1\library\rJava\jri\x64
にあるjri.dllをコピーしてtestRプロジェクトアイコン上でペーストします。さらにプロジェクト配下にScala Object(ここでnameはtest)を作ります。
__Run➞Run Configurations➞Scala Applicationをダブルクリック➞New Configuration__を作成。NameをtestRに変更しEnviromentタブを開きます。さらに__New➞Variable➞Edit Variables__を選択し下記4つを設定します。
- 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()
で終了。
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()
}
うまく実行されると波形プロットが出力されます。
使用した感想としては、JavaからRを立ち上げた時のプロセスの挙動がちょっと不安定な気もしますが、とりあえずローカルでさくっと分析結果を可視化させたいときに重宝すると思います。
===========================================
こちらもよろしくおねがいいたします。
入門編
第1部イントロダクション
第2部エクセルで学ぶ分析入門
- 第3章:ExcelとMySQLの連携
- 第4章:ExcelとMySQLの連携2 csvデータのimport
- 第5章:Excelの分析ツールとソルバーの活用(回帰、最小2乗法)
- 第6章:Excelソルバーの応用(ポートフォリオ最適化)
- おまけ 2 - 1: Excel VBAで強化学習(Q-learning, ε-greedy / softmax 行動選択)
- おまけ 2 - 2: Excel VBAでモンテカルロ・シミュレーション(メトロポリス法:2次元イジングモデルの例)
第3部 データ可視化(ビッグデータに限らない)
実践編
第4部 Python/Scalaで分析ことはじめ
Appendix
==================