KNIMEによる消費者行動予測-作成したworkflowを持ち運べるようにする


前回のエントリで設定した問題の解決法について述べていきます。今回は

  1. 学習したモデルを保存して再利用する
  2. 作成したworkflowを持ち運べるようにし、さらに環境に依存する設定情報を外部化する←ここ
  3. メモリに載るだけのレコードに分割して処理する

について説明します。

動機・着想

KNIMEには作成したワークフローをzip形式でインポート/エクスポートする機能があります。エクスポートしたzipファイルを配布すれば、「複数の実行環境で使用する」ことが可能になります。ただし、実行環境毎に変更しなければならない設定情報がある場合、いちいち変更して回るのは大変です。本記事では、データソースとなるRDBの場所がKNIMEの実行環境により異なるケースへの対処法を説明します。

KNIMEには、ノードの設定を動的に変更するためにflow variableという仕組みがあります。Database Readerの接続先RDBの場所をflow variableで指定することを考えます。さらに、このflow variableの値がワークフローのエクスポートファイルに含まれないように、設定ファイルなど外部からflow variableとして読み込むことが出来れば良いです。

ワークフローの説明

metanode左図はワークフローの一部で、上記を実現している部分です。(ワークフローの全体像は次の記事で説明します。)「Database Reader」と「メタノード」が赤い線でリンクされています。赤い線はflow variableの受け渡しを表わします。つまり「メタノード」の下に書いてあるとおり、設定ファイルから接続先情報を読み込んでflow variableに設定し、それを「Database Reader」が利用しているという構造です。

flow variableによる設定

次にflow variableによって接続先RDBの場所を指定する方法を説明します。

下図はDatabase Readerの設定画面です。画面下にThe "database" parameter controlled by variable.とありますが、この状態がflow variableによって設定が変わったことを示しています。
dbreadersetting

続けて、設定画面をFlow Variablesに切り替えてみたのが次の図です。
flowvariables
並んでいるのはDatabase Readerに設定できる項目です。各項目の右にはそれぞれプルダウンボックスとテキストボックスが配置されます。databaseという項目に注目するとpgurlという値が選択されていますが、これがflow variableの名前です。つまり項目の横のプルダウンボックスにはこのノードから参照出来るflow variableが列挙されており、これを選択することで設定項目に反映することが出来るという訳です。
ノードから参照出来るflow variableは以下のいずれかで、pgurlは3番目に該当します。

  1. KNIME全体で共通のもの。起動時に設定するワークスペースのパスがknime.workspaceで参照出来ます
  2. ワークフロー共通のもの。KNIMEの画面左側にあるworkflow projectsでワークフローを選択し、コンテキストメニューのWorkflow variables...からflow variableを登録出来ます。作成後はワークフロー上のどのノードからも参照出来るようになります。
  3. ノードのFlow Variable Portを通じて別のノードから渡されたもの。Flow Variable Port(ノードから突き出た赤いアイコン)はほとんどのノードでは最初非表示に設定されていますので、まず利用側のノードを選択してコンテキストメニューを呼び出し、Show Flow Variable Portsを指定しておく必要があります。

メタノードとは

Database ReaderのFlow Variable Portsは「メタノード」とつながっており、pgurlはここから流れてきます。これはKNIMEのMeta Nodeという機能で作られたもので、複数のノードをまとめたものです。今回Meta Nodeを使ったのは

  • 設定情報を設定ファイルから読み込むために二つノードが必要だった
  • 設定情報を読み込むという部分はワークフローの本筋からは外れるので、他のノードたちと切り分けたい
  • ワークフローをまたがってノードをコピーすることが出来るが、一箇所にまとめておくとそれがし易い

という理由です。Meta Nodeをダブルクリックすると下図のように展開表示されます。ノードの下に書いてあるようにFile Readerを使ってファイルを読み込み、TableRowToVariableがそこから変数を取り出すという流れです。
metanode_config

flow variableの作り方

ファイルの形式は単純なテキストファイルで、1行目に変数名、2行目に値を書きます。pgurlを設定するためのファイルは

pgurl
http://192.168.3.115:5432/postgres

という内容だとします。

File Readerの設定では、read column headersにチェックを入れます。これにより以下のような表形式でデータが読み込まれます。

pgurl
http://192.168.3.115:5432/postgres

TableRowToVariableは入力された表の1行目を読み込み、列名と同じ名前のflow variableを定義するノードです。これによりflow variable

pgurl = "http://192.168.3.115:5432/postgres"

が定義されました。これがメタノードの外に流れていき、Database Readerに入力されます。

まとめ

今回は以下の内容を説明しました。

  • flow variableとは何か。どう使うか
  • flow variableを外部ファイルから定義する方法
  • Meta Nodeについて

では続きはまた次のエントリで。


This entry was posted in データマイニング. Bookmark the permalink.