Yellowfin7.4からはETL機能が使えるように
いろんなBIツールがRと連携して、その出力結果をレポートの一部として使えるのは知ってたんだけど、
Yellowfinもバージョンアップして、ETLの一部としてRからの戻り値を使うことができるようになったぽい。
なので、RのインストールからETLで使うための手順を残しておきます!
とはいえ、ここに載っているとおりです。
■Rモデル予測
https://wiki.yellowfin.co.jp/pages/viewpage.action?pageId=9732102#R%E3%83%A2%E3%83%87%E3%83%AB%E4%BA%88%E6%B8%AC-%E3%83%91%E3%83%BC%E3%83%881%EF%BC%9AR%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97
Rのインストール
で、どのバージョンを使うかというと、最新のR3.5.0ではなく、R3.4.4を使用します!
最新のR3.5.0のバージョンはRのバグ?らしく、数値型のときにエラーが返ってくるようです。。
https://github.com/s-u/Rserve/issues/102
MacOSの場合
該当バージョンはこちらから
https://cran.ism.ac.jp/bin/macosx/el-capitan/base/R-3.4.4.pkg
パッケージマネージャーで開いて普通にインストールできます。
そのままアプリケーションを開けばRはすぐに使えますが、Yellowfinで使うには外部アクセスに対応しなければならないので、Rserveパッケージをインストールします。
まずRコンソールを開いて、パッケージインストーラを開きます。
その後、検索窓に'Rserve'と入力して一覧を取得ボタンをクリック。するとダウンロードのミラーサイトを選択できるので近そうなところでOK。
依存パッケージも含めるにチェックを入れ選択をインストールボタン。
するとこんな感じの画面が出てきます。
後は手で打つのはこの2行です。
library("Rserve")
Rserve(args='--vanilla')
これでR側の設定は完了です。
windowsの場合
私は実際に環境が用意できませんでしたが、きっとこちらから
https://cran.ism.ac.jp/bin/windows/base/old/3.4.4/R-3.4.4-win.exe
AmazonLinux(AWSの場合)
まずサーバーにRをインストールします。
#ここでR3.4系でなければ、--showduplicateで確認して3.4系を指定でインストールしてください。
yum list -y R
#yum --showduplicate list R.x86_64
sudo yum install -y R
#インストールが完了したらRを起動し、Rserveのパッケージをインストールする
R
Rを起動したら1行だけ打ち込み、Rコンソールから抜ける。
install.packages("Rserve")
q()
再びシェルに戻ってきて、外部からたたけるように下記のコマンドを実行する。
sudo R CMD Rserve --RS-enable-remote --RS-port 6311
#このコマンドで下記のようにRserveが動いていればOK
sudo lsof -i:6311
AWS側のセキュリティグループでポート(この場合は6311)にアクセスできるように設定を追加
会社からのアクセスだけとかしばってね!
Yellowfin側の設定
とりあえず7.4以降の本体と、Rのプラグインが必要なのですが、プラグインはYellowfin Japanのサポートチームに頼むともらえるようなので頼んでGETします。
プラグイン管理の画面からyfpファイルをアップロードします。
トランスフォーメーションフローを作成していきます。
インプットステップから、データのもとになるインプットをドラッグアンドドロップで追加します。
ちなみに元データは数値列のみ
次にトラスフォーメーションステップからRスクリプトをドラッグアンドドロップし、前のステップと矢印でつなぎます。
ローカルにあるRserveを使用する場合
Rserveへ接続をクリックし、正常につながると、下記画面のようになります。
Rスクリプトはファイルを用意し、濃いグレーの部分をクリックすることでアップロードできます。
中身ですが、outDataが出力変数名、yfDataが入力変数名です。これは画面上の表示と合わせてください。
入力変数名は、$カラム名で直接参照できるほか、yfData[1]などでインデックス指定できます。
#地味にlogで返すだけの関数
outData<-data.frame(log(yfData$tid))
適用ボタンをクリックし、実行。先程のtidカラムの対数が返ってきました(ぱっと見あってるかわからないな・・)
これで複雑な機能もRスクリプトを使って処理した結果を使うことができそうですね!
サーバーへ繋ぐ場合
外部接続のスイッチをいれ、ホストにIPを入力します。この時http://などはいらないようです。
Rserveのサービスが上がっていない場合
アクセスできない旨のメッセージが表示されます。