カテゴリー別アーカイブ: 5.R言語

パッケージインストール方法

パッケージインストール方法

TERRに関して

Spotfireに標準搭載されているTERR(TIBCO Runtime for R)はTIBCOが独自で開発したR言語の実行エンジンです。

TIBCOは元々S-Plusと言う統計解析ソフトの開発元です。
S-PlusはS言語というR言語の元になった言語なので長い開発実績があります。
しかしS-Plus自体かなりデザインが古くなったり、世間的にはR言語の方がメジャーになってきているので、
TERRとして刷新してSpotfire上に実装しています。

動作は高速なのでRのパフォーマンスに不満がある方は使ってみるといいと思います。

splus
※S-Plusの画面

TERRはTIBCO独自の開発ですが、Rと同じようにCRANからパッケージを追加して使うことができます。
勿論全てのパッケージに完全対応している訳ではありませんが、メジャーなものは大体使う事ができます。

動作確認リストはこちらから取得できます。
(一番下にあるWindows、Linux、Macなど書いてあるリンクから)

パッケージの追加方法

7.0以降であれば「ツール」の中に「TERRツール」というメニューがあるのでそちらから実行します。
3

TERRツールの「パッケージ管理」タブからインストール済みのパッケージ一覧が確認できますし、
足りないものは利用可能なパッケージから選択して「インストール」する事ができます。

4

RのパッケージもCRANに登録してあるものだけでなく、
個人で配布しているようなパッケージを使用したい場合は
ローカルファイルからインストールする必要があります。

その場合はコンソールから実行します。

5

今回は普通にinstall.packagesコマンドでインストールしてみました。
7

Spotfireのバージョンが7以前の場合はTERRツールメニューがないので
直接TERRのエンジンを実行してinstall.packagesコマンドを使います。

エンジンの場所はデスクトップ版であれば

C:\Users\ユーザー名\AppData\Local\TIBCO\Spotfire Desktop\XXX\Modules\TIBCO Enterprise Runtime for R_XXXX\engine\bin

Analyst版であれば

C:\Program Files (x86)\TIBCO\Spotfire\XXXX\Modules\TIBCO Enterprise Runtime for R_XXXX\engine\bin

内にあります。Modulesディレクトリが隠しディレクトリになっているので表示する設定にするか、DOSプロンプトから直接移動する必要があります。
8

TERR.exeを実行すると、コンソールが立ち上がるので、コマンドからパッケージをインストールしてください。
6

選択データのみ縦変換

時系列項目がカラムとしてまとめられているのをよく見ます。

1

縦軸に識別子、横軸が時系列のサマリーとして表現されているので、
人間が読むには非常にわかりやすいのですが、コンピュータに制御させる場合は色々問題があります。

このデータをラインチャートでName別に表示しようとすると
横軸に(カラム名)縦軸に時間のパラメータをすべて入力し、
色の基準でNameにすると表現できます。
2

ただし、横軸の並びはアスキー順になるのでカスタムの並び替えにしなければならなかったり、そもそも文字列扱いされているので、時間として扱う事ができません。

データの縦変換

このような場合にデータを縦変換すると便利です。

以前データ変換でピボットの解除の方法をご紹介したのですが、
ピボットの解除は横データを縦型に変換するため、時間もかかりデータのボリュームも膨れ上がります。
今回のデータも横に18パラメータあるので、100行あった場合は1800行になります。

しかもピボットの解除はデータテーブルを一括変換する事しかできないので
元データが数万行あった場合は時間もリソースも無駄に消費します。

必要なデータだけ縦変換する方法として、TERRを使用する方法を紹介します。

TERRスクリプト

3

「ツール」→「データ関数を登録」を選択
名前は任意でOKですが、reshape2パッケージを使用しますので
パッケージの欄に”reshape2″と入力してください。

※reshape2は標準パッケージではないので初回使用時にはダウンロードして追加する必要があります。
こちらを参考にパッケージを追加してください。

スクリプトに下記スクリプトを記入してください。

outdata <- melt ( indata , id = c("Name" , na.rm=TRUE ) 

idの項目はキーとして保持するカラム名のリストを設定してください。

4

ここではindataを入力として縦変換(melt)したデータをoutdataとして受け取ります。
indataとoutdataの定義もしていきます。

パラメータの入力

入力パラメーターとしてindataを定義します。
「追加」から「入力パラメータ」indata
「タイプ」は「テーブル」
「使用可能なデータ型」は「すべて」を選択して下さい。
5

出力パラメータ

出力用にoutdataを定義します。
「追加」から「結果パラメータ」outdata
「タイプ」は「テーブル」を選択してください。
6

準備が完了したので実行してみます。

実行

右上にある実行ボタンを押してスクリプトを実行します。
7

実行時のパラメータとデータの割り当てを設定します。
入力パラメータは、マークした範囲のデータを変換したいので
indataは「カラム」で検索式’*’にしておきます。これでカラムが可変になった場合でも対応できます。
「制限の基準」で「マークされたロー」のチェックを忘れないでください。
今回のキモです。これを設定しないと全データが一度に渡されるので元も子もないです。
8

出力の設定です。
outdataをSpotfire側で扱う方法を選択します。
データテーブルで「新しいデータテーブルの作成」を選択します。
9
「OK」を押すと実行されます。

動作確認

元データ(一行)を選択するとoutdataには18行作成されることが分かります。
10

Bを選択するとoutdataが更新されます。
11

ちなみにvariableカラムが文字列型なのでminutesカラムを計算カラムとして追加しました。
式は下記のとおりです。

integer ( left ([variable]  , find ( "分" ,[variable]  ) -1 )  ) 

(勿論R言語側で処理してもいいのですが、忘れました。。。。)

このように複数行を選択した場合でも適時データが更新されます。
大量データを扱っていて、必要な箇所だけ縦変換する事ができました。
12
横軸を時間で取り、色別に回帰を取りました。

パッケージがない場合

reshape2は標準パッケージではないので初回使用時にはダウンロードして追加する必要があります。
こちらを参考にパッケージを追加してください。

パッケージがない場合、左下のステータス表示にエラーが表示されます。
1

2

16進数から10進数へ変換

16進数から10進数への変換

装置などから出力されるデータの中に16進数の文字列が含まれていることがあります。

Spotfireで扱える型は文字列型、数値型などがありますが、
16進数文字列はあくまで文字列としてしか扱えないため、一度10進数に変換する必要があります。
ただ、Spotfireの関数では16進→10進の変換関数はありません。

1
↑16進だと文字列扱いになるので10進変換しないと計算ができない。

このような時にはデータ関数の登録機能で関数を追加すると便利です。

データ関数の登録

データ関数の登録機能を使うと、R言語を使用して独自の関数を定義できます。

「編集」→「データ関数の登録」を選択し、
2

新規ボタンをクリック
3

式の関数画面が開くので
名前と説明、登録する関数のカテゴリと戻り型を定義します。
4
スクリプトは下記のように記載します。

output <- as.integer(as.hexmode( input1 ))

式の関数の場合は
入力カラムはinput1、出力カラムはoutputと記載する約束事になります。

これで登録は完了です。

計算カラムで確認

「挿入」→「計算カラム」で確認してみましょう。
5
計算の関数の中に確かに登録したhextodecが追加されています。
これで通常の関数と同じように使う事ができます。

6

勿論計算カラムだけでなくカスタム演算式内でも使用できます。

複数計算カラムを追加

計算カラムを一気に追加したい

データの中に複数パラメータ分の測定値と基準値があり、
これらの差分を計算したい場合、計算カラムが便利です。

ただし、計算カラムは一度に1カラムしか追加できないため、
32カラム分集計したい場合は32回同じ作業をする必要があります。

このような場合はTERRを使用し、R言語で一気に処理をしてしまいましょう。
今回の例では縦が100行、横が64列のテーブルを作成し、

  • 1カラム目から33カラム目を引いた結果
  • 2カラム目から34カラム目を引いた結果
  • 3カラム目から35カラム目を引いた結果
  • 。。。

という作業で32カラム分の結果を作成します。

mc1

テストデータの作成

せっかくのR言語課題なので、テストデータもR言語で作成しましょう。

横64カラムで縦100行のデータテーブルを作成します。

データ関数の登録

「ツール」→「データ関数を登録」を選択し
「スクリプト」に下記スクリプトを記載して下さい。
a <- matrix ( rnorm ( 100 * 64) , 100 , 64 ) mc2

R言語に関しては詳しく説明しませんが、
rnormという関数で乱数を100×64個作成し、
それをmatrixという関数で縦100、横64のテーブルのようなものを作成してaに格納しています。

出力設定

「出力パラメータ」タブを選択し、
作成したa を「テーブル」として登録してSpotfire側で受け取れるようにします。
mc3

設定が終わったら右上の「実行」を押します。
mc4

実行時の設定

「パラメータの編集」という画面がでます。
これはaというR言語が出力したデータをSpotfire側でどのように扱うか設定します。
テーブルとして使いますので、データテーブルを選択してください。
mc5

a.1~a.64という64個の列を持つaというテーブルができます。
mc6

これでテストデータができました。

計算カラムの作成

ここからが本番です。
それでは計算したカラムを追加してみましょう。
1カラム目から33カラムを引いて、2カラム目から34カラムを引いて、、、、
という一連の計算はR言語では非常にシンプルに記述できます。

データ関数の登録

今度は計算カラムを追加するためのスクリプトを追加します。
再度「ツール」→「データ関数を登録」を選択し
「スクリプト」に下記を記載して下さい。
ret <- a[1:32]-a[33:64] 内容としてはaのテーブルを最初の32個のテーブルと、33個以降のテーブルに分けて、それぞれ引き算しています。 これで32個分のカラムが一気に算出できます。 R言語のベクトル演算の得意とするところです。 mc7

入出力設定

今回は出力パラメータだけでなく、入力パラメータも設定する必要がありますので、
「パラメータの入力」タブで「追加」を押して、aを定義します。
mc8

mc9

また、「出力パラメータ」で計算したretを定義します。
複数カラムありますので「タイプ」はテーブルにします。
mc10

計算の実行

「実行」ボタンを押すと入力と出力のパラメータを設定する画面が表示されます。

実行時の設定

入力はaテーブルを渡しますので、カラムを選択して全カラムを指定して下さい。
mc11

出力は元のaテーブルに結果カラムとして追加したいので「カラム」を選択してください。
mc12

ちなみに別に結果テーブルとして保存したい場合は「データテーブル」を選択するとretというテーブルが新規作成されます。

結果としてa.1(2)などの新規カラムが32個追加されていると思います。
mc13

今回は簡単に引き算にしましたが、これ以外に様々な集計方法も設定できますし、
カラムの並びも測定値32個、基準値32個だけでなく、偶数奇数並びの場合もR言語を少し変更すれば対応できます。
スクリプトを記載する事でかなり柔軟なデータ変換が可能になります。

R言語:SpotfireとTERR連携

SpotfireにはTERRと呼ばれるR言語のランタイムエンジンが搭載されているので、
単体でR言語を走らせることができます。

フリーのRと完全にコンパチではないですがCRANからライブラリを取得することもできますし、
実行速度はフリーRよりはるかに高速です。

ただし、グラフを描画する機能は使用できないので、Spotfireの裏で動作するデータ処理エンジンとして使用してください。

SpotfireへのR言語の実装方法をこちらにまとめましたので、ご覧下さい。