時系列項目がカラムとしてまとめられているのをよく見ます。
縦軸に識別子、横軸が時系列のサマリーとして表現されているので、
人間が読むには非常にわかりやすいのですが、コンピュータに制御させる場合は色々問題があります。
このデータをラインチャートでName別に表示しようとすると
横軸に(カラム名)縦軸に時間のパラメータをすべて入力し、
色の基準でNameにすると表現できます。
ただし、横軸の並びはアスキー順になるのでカスタムの並び替えにしなければならなかったり、そもそも文字列扱いされているので、時間として扱う事ができません。
データの縦変換
このような場合にデータを縦変換すると便利です。
以前データ変換でピボットの解除の方法をご紹介したのですが、
ピボットの解除は横データを縦型に変換するため、時間もかかりデータのボリュームも膨れ上がります。
今回のデータも横に18パラメータあるので、100行あった場合は1800行になります。
しかもピボットの解除はデータテーブルを一括変換する事しかできないので
元データが数万行あった場合は時間もリソースも無駄に消費します。
必要なデータだけ縦変換する方法として、TERRを使用する方法を紹介します。
TERRスクリプト
「ツール」→「データ関数を登録」を選択
名前は任意でOKですが、reshape2パッケージを使用しますので
パッケージの欄に”reshape2″と入力してください。
※reshape2は標準パッケージではないので初回使用時にはダウンロードして追加する必要があります。
こちらを参考にパッケージを追加してください。
スクリプトに下記スクリプトを記入してください。
outdata <- melt ( indata , id = c("Name" , na.rm=TRUE )
idの項目はキーとして保持するカラム名のリストを設定してください。
ここではindataを入力として縦変換(melt)したデータをoutdataとして受け取ります。
indataとoutdataの定義もしていきます。
パラメータの入力
入力パラメーターとしてindataを定義します。
「追加」から「入力パラメータ」indata
「タイプ」は「テーブル」
「使用可能なデータ型」は「すべて」を選択して下さい。
出力パラメータ
出力用にoutdataを定義します。
「追加」から「結果パラメータ」outdata
「タイプ」は「テーブル」を選択してください。
準備が完了したので実行してみます。
実行
実行時のパラメータとデータの割り当てを設定します。
入力パラメータは、マークした範囲のデータを変換したいので
indataは「カラム」で検索式’*’にしておきます。これでカラムが可変になった場合でも対応できます。
「制限の基準」で「マークされたロー」のチェックを忘れないでください。
今回のキモです。これを設定しないと全データが一度に渡されるので元も子もないです。
出力の設定です。
outdataをSpotfire側で扱う方法を選択します。
データテーブルで「新しいデータテーブルの作成」を選択します。
「OK」を押すと実行されます。
動作確認
元データ(一行)を選択するとoutdataには18行作成されることが分かります。
ちなみにvariableカラムが文字列型なのでminutesカラムを計算カラムとして追加しました。
式は下記のとおりです。
integer ( left ([variable] , find ( "分" ,[variable] ) -1 ) )
(勿論R言語側で処理してもいいのですが、忘れました。。。。)
このように複数行を選択した場合でも適時データが更新されます。
大量データを扱っていて、必要な箇所だけ縦変換する事ができました。
横軸を時間で取り、色別に回帰を取りました。
パッケージがない場合
reshape2は標準パッケージではないので初回使用時にはダウンロードして追加する必要があります。
こちらを参考にパッケージを追加してください。
パッケージがない場合、左下のステータス表示にエラーが表示されます。