目次


アジャイル・データ分析 ― 先進的なワークフローと R の統合

先進的なワークフロー手法と R 統計ツールキットを利用する

Comments

はじめに

アジャイル・データ分析を本番環境で行うには、必要なユーザー操作を最小限に抑えた一連の自動テストを、データの処理に統合する必要があります。この場合、テキスト・ベースの入力と出力は、プログラムによって構成可能でなければなりません。また、さらなる調査が必要かどうかを判断するために、分析結果をグラフィックで視覚的に表す何らかの形のレポート作成機能がすぐに利用できるようになっている必要もあります。

データ分析およびレポート作成のための Eclipse ベースのグラフィカル・ワークベンチである KNIME では、変数、プログラミング・ノード、そしてメタ・ノードを使用したワークフローによって、上記の要件を満たす自動化をサポートしています。

CSV 形式の出力ファイルは扱いやすいとは言え、データをグラフィックで表現することがデータを理解する助けとなる場合があります。KNIME の最新バージョンは、R 分析パッケージと相性良く統合できるようになっており、この 2 つを統合することによって、ワークフローの任意のポイントで、表形式のデータを複合的なグラフィックで表現できるようになります。

本番環境で使用するための先進的な KNIME ワークフロー

プロジェクトは時間が経つにつれて大きくなるため、分析インフラストラクチャーは、要件および運用目標の変化に適応できなければなりません。アジャイルであるためには、ワークフローは変化する環境をサポートできること、さらにはワークフロー自体の複雑化に伴い、スケーリングできることが必要です。

KNIME ワークフローで変数を使用する

この連載の前の記事で定義した、サンプルの Apache アクセス・ログ・ワークフローでは、出力ファイルの名前が「CSV ライター (CSV Writer)」ノード内に静的に定義されています。サンプルでは静的なファイル名を使用しても構いませんが、本番環境で使用するには、出力ファイルの名前に入力ファイルの名前と場所を反映させたほうが実用的です。このような命名規則にすることで、以下に挙げるいくつかの利点がもたらされます。

  • 入力ファイルの名前から、元のデータのソースがわかります。
  • 意味のある名前にすると、以前の分析を削除してしまうリスクを回避しやすくなります。
  • 出力 CSV ファイルの名前は自動的に変更されるため、入力ログ・ファイルに変更があるたびに、自分で出力 CSV ファイルに一意の名前を付ける必要がなくなります。

名前を指定するために変数を使用することを検討してください。KNIMEでは、ワークフロー内で使用する変数のことを「フロー変数 (flow variable)」と呼んでいます。ほとんどのプログラミング言語の場合と同じく、フロー変数は、プログラムの実行時に別の場所で使用される情報に関連付けられるストリングです。

サンプル・ワークフローの柔軟性を向上させる

ノード・モニターを有効にする

KNIME で変数を扱うようになったら、ノード・モニターを有効にすると役に立ちます。ノード・モニターには、各ノードで使用可能な変数の値が表示されます。現時点で、ノード・モニター・ビューが KNIME パースペクティブに表示されていない場合は、メニュー・バーで「View (表示)」 > 「Node Monitor (ノード・モニター)」の順にクリックしてください (図 1 を参照)。ノード・モニターがメニューに表示されていなければ、「View (表示)」 > 「Other... (その他…)」の順にクリックして、ダイアログ・ボックスに表示される「KNIME Views (KNIME ビュー)」から、ノード・モニターを選択します。

図 1. 「KNIME Views (KNIME ビュー)」の下に表示された「Node Monitor (ノード・モニター)」
「Node Monitor (ノード・モニター)」が強調表示された「KNIME Views (KNIME ビュー)」のリストのスクリーンショット

「Weblog Reader (Web ログ・リーダー)」でノード・モニターに表示される変数は、knime.workspace だけです。この変数は、現在のワークスペースが含まれるディレクトリーを表しています。これから、分析対象である access.log ファイルの名前とフル・パスを含める変数を作成します。

分析対象である access.log ファイルの名前とパスを示す変数を作成するには、作業域に「File Upload (ファイル・アップロード)」ノードを配置します。「File Upload (ファイル・アップロード)」ノードには、ノードからのデータ出力を表す小さな三角形の代わりに、小さな赤い点が表示されます。この赤い点は、出力がデータではなく、フロー変数であることを示しています。この赤い点を、「Weblog Reader (Web ログ・リーダー)」ノードのフロー変数入力に接続する必要があります。ノードにたくさんの要素が表示されすぎないように、デフォルトでは、フロー変数入力/出力ポートは非表示になっています。これらのポートを表示するには、「Weblog Reader Node (Web ログ・リーダー・ノード)」を右クリックして、「Show Flow Variable Ports (フロー変数ポートの表示)」をクリックします。この操作によって、赤い 2 つの点が表示されるようになります。これらの点は、フロー変数ポートの場所を示しています。「File Upload (ファイル・アップロード)」ノードのフロー変数出力ノードを、「Weblog Reader (Web ログ・リーダー)」ノードのフロー変数入力に接続してください。

「File Upload (ファイル・アップロード)」構成ダイアログ・ボックスで、「Variable Name (変数名)」accesslog_filename のような名前を定義してから、分析対象の access.log ファイルを参照します。access.log ファイルを選択して保存した後、「File Upload (ファイル・アップロード)」ノードのノード・モニターを調べると、accesslog_filenameaccesslog_filename (URL) という2 つの新しい変数が表示されているはずです。後者の変数は、ファイル名のストリングが URL のフォーマットで設定されたバージョンです。ファイルを指定する際に標準的なディレクトリー・パスではなく、URL を指定する必要があるノードでは、この変数を使用します。

ワークフローで、実行可能なその他のノード (黄信号) を選択してノード・モニターを調べると、これらのノードのすべてで、新しく作成した変数が表示されます。一般に、ワークフローをノード間の情報のフローとして考えた場合、変数は、その起点となる場所からダウンストリーム方向にあるノードで使用可能になります。

accesslog_filename 変数の値が設定するのは、「Weblog Reader (Web ログ・リーダー)」で読み込む Apache の access.log の値です。「Weblog Reader (Web ログ・リーダー)」の「Configure (構成)」パネルで、「Flow Variables (フロー変数)」タブをクリックしてください。このタブには、フロー変数を使用して設定できる、「Input Options (入力オプション)」タブ上のすべての構成設定がリストとして表示されます (図 2 を参照)。

ダイアログ・ボックスで、「sources (ソース)」ノードを展開します。「0」のラベルが付いたソースは、このダイアログ・ボックス上の最初のソースを表しています。ドロップダウン・リストには、このノードで使用できる既知の変数がすべて表示されます。access.log ファイルの名前を格納する変数として、「accesslog_filename (URL)」を選択してください。

図 2. 「Weblog Reader (Web ログ・リーダー)」: 「Flow Variables (フロー変数)」ダイアログ・ボックス
「Weblog Reader (Web ログ・リーダー)」の「Flow Variables (フロー変数)」ダイアログ・ボックスのスクリーンショット
「Weblog Reader (Web ログ・リーダー)」の「Flow Variables (フロー変数)」ダイアログ・ボックスのスクリーンショット

最初の入力ソース・ファイルの値には、現在、「File Upload (ファイル・アップロード)」ノードに指定されているファイル・パスが設定されています。今までの作業で、access.log のパスを表す変数を作成して、「Weblog Reader (Web ログ・リーダー)」でその変数を使用するように指定しました。これで、プロセスの前半は完了しました。プロセスの後半では、この変数に変更を加えて、出力 CSV ファイルの名前を設定したものを使用します。そのための手順は以下のとおりです。

  1. 前に説明した方法を用いて、「CSV Writer (CSV ライター)」に接続されている「Column Filter (列フィルター)」ノードのフロー変数ポートを表示します。
  2. 「CSV Writer (CSV ライター)」のフロー変数ポートを表示します。
  3. 「Java Edit Variable (simple) (Java 変数編集 (簡易))」ノードを選択して、作業域に配置します。
  4. 「Column Filter (列フィルター)」のフロー変数出力と「Java Edit Variable (simple) (Java 変数編集 (簡易))」ノードのフロー変数入力を結ぶ線を引きます。
  5. 「Java Edit Variable (simple) (Java 変数編集 (簡易))」ノードのフロー変数出力と「CSV Writer (CSV ライター)」のフロー変数入力を結ぶ線を引きます。

このプロセス (図 3 を参照) で定義しているのは、「Column Filter (列フィルター)」ノードからと「Java Edit Variable (simple) (Java 変数編集 (簡易))」ノード経由で CSV ライターに変数情報を渡す方法です。出力ファイル名変数は、「Java Edit Variable (simple) (Java 変数編集 (簡易))」ノード内部で accesslog_filename 変数を使用して作成されます。

最後のステップとして、入力 access.log ファイルから出力 CSV ファイル名を派生させる方法を定義します。

図 3. 「Java Edit Variable (simple) (Java 変数編集 (簡易))」ノードを使用したワークフロー
「Java Edit Variable (simple) (Java 変数編集 (簡易))」ノードを使用したワークフローの図
「Java Edit Variable (simple) (Java 変数編集 (簡易))」ノードを使用したワークフローの図

ワークフロー内の「Java Edit Variable (simple) (Java 変数編集 (簡易))」ノードの構成ダイアログ・ボックスを開いて、このダイアログの「Method Body (メソッド本体)」部分 (図 4 を参照) に、リスト 1 に記載するコードを追加します。

リスト 1. メソッド本体に追加するコード
return $${Saccesslog_filename}$$.replace(".log", "_processed.csv");
図 4. ファイル名を変更するコードが含まれる「Java Edit Variable (simple) (Java 変数編集 (簡易))」ノード
ファイル名を変更するコードが含まれる「Java Edit Variable (simple) (Java 変数編集 (簡易))」ノード
ファイル名を変更するコードが含まれる「Java Edit Variable (simple) (Java 変数編集 (簡易))」ノード

メソッド本体の中でフロー変数の名前を指定するには、「Flow Variable List (フロー変数リスト)」で該当する変数をダブルクリックします。この操作により、その変数は特殊なフォーマットで囲まれます。このフォーマットは、KNIME ランタイムに対し、その変数が該当する値に置き換わるフロー変数であることを示しています。新しい output_filename 変数が定義され、ログ・ファイルの .log 拡張子が同じディレクトリー内で _processed.csv に置き換えられて、この新規変数 output_filename に格納されます。このワークフローを実行して、処理済みデータを格納する出力 CSV ファイルの名前が、入力 access.log ファイルの名前とパスを示す変数に変更を加えた形になっていることを確認してください。

KNIME ワークフローでメタ・ノードを使用する

複雑なワークフローを簡素化して、ワークフローのユーザーには役に立ちそうもない実装の詳細を非表示にするには、メタ・ノードを使用します。メタ・ノードとは、ワークフローのサブセットを単一のノードに結合する、ユーザー定義のノードです。

例えば、「Java Edit Variable (Java 変数編集)」ノードは、ワークフローをたまに利用するユーザーにとっては用途が明らかでないことから、このノードをユーザーに表示しないようにするとします。それには、「Java Edit Variable (Java 変数編集)」ノードと「CSV Writer (CSV ライター)」ノードを 1 つのノードに結合し、この単一ノードで CSV に表を出力するようにします。

「Java Edit Variable (Java 変数編集)」ノードを選択してから、Shift キーを押しながら「CSV Writer (CSV ライター)」ノードを選択して、両方とも選択した状態にします。選択したノードを右クリックして、コンテキスト・メニューから「Collapse into Meta Node (メタ・ノードに集約)」を選択します。これにより、メタ・ノードが作成されるので、そのメタ・ノードを選択して「Output CSV file (出力 CSV ファイル)」という名前を設定します。これで、「Java Edit Variable (Java 変数編集)」ノードと「CSV Writer (CSV ライター)」ノードが置き換えられて、変数およびデータ・フローの入力が格納される 1 つのノードになります。このノードで行われる処理は、その名前によって示され、出力ファイル名を作成するために必要な Java プログラミングは隠されます (図 5 を参照)。これらのノードにアクセスしなければならない場合は、メタ・ノードをダブルクリックすると、そこに含まれている特定のノードにアクセスすることができます。メタ・ノードをダブルクリックして表示されるビューで編集すれば、個々のノードをメタ・ノードから取り出さずに更新することができます。

図 5. メタ・ノードを使用したワークフロー
Java 変数編集ノードと CSV ライター・ノードが 1 つのノードに置き換えられたワークフローの図
Java 変数編集ノードと CSV ライター・ノードが 1 つのノードに置き換えられたワークフローの図

R 統合ノード

R では、表形式のデータを保持するために「データ・フレーム (data frame)」と呼ばれる長方形のデータ構造を使用します。KNIME の最近のバージョンでは、「R インタラクティブ (R Interactive)」ノードによって、KNIME から R データ・フレームにデータを渡せるようになっています。

データがデータ・フレームに格納されると、データの処理と分析専用に設計された高級言語の構成体を使用してプログラムで実行できる高度なタスクに、R 言語をフル活用することができます。

この R 統合を利用することで、ggplot2 という名前の R パッケージを使用して、出版物のクオリティーを持つ KNIME データのプロットを生成することができます。

この機能を利用するには、R をダウンロードして、ご使用のシステムにインストールしてください。

図 6 に示されているように、KNIME Labs のノード・グループの中に、完全なインタラクティブ R 環境を提供する一連の R (インタラクティブ) ノードが含まれています。このサンプル・ワークフローでは、「R View (Table) (R ビュー (表))」ノードをワークスペースに配置し、「Column Filter (列フィルター)」の出力から、生成する各プロットの「R View (Table) (R ビュー (表))」ノードの入力までを通常の KNIME 接続で結びます。

図 6. 「R View (Table) (R ビュー (表))」ノードに送信される出力を持つワークフロー
「Output CSV file (出力 CSV ファイル)」と「R View (Table) (R ビュー (表))」が含まれる出力を持つワークフロー
「Output CSV file (出力 CSV ファイル)」と「R View (Table) (R ビュー (表))」が含まれる出力を持つワークフロー

R と ggplot2 についての詳細な説明は、この記事では行いませんが、主要な概念は単純なものです。つまり、プロット用の表示テーマを定義して、ノード入力 (ワークスペース変数 knime.in) からの x 変数と y 変数を定義した後、プロットのタイプとデータの集約方法を定義します。

図 7. KNIME の「R View (Table) (R ビュー (表))」ダイアログ・ボックス
R スクリプトが表示された「R Snippet (R スニペット)」タブ
R スクリプトが表示された「R Snippet (R スニペット)」タブ

更新後のワークフロー (ダウンロードとして入手可能) は、現在 CSV ファイルに保管されているのと同じ処理済みアクセス・ログ・データを基に定義された、3 つのプロットを生成します。各プロットのテーマはほとんど同じですが、プロットのタイプに応じて多少の変更が加えられています。リスト 2、3、4 に、各プロットの R コードを記載します。

リスト 2. リクエスト先 URI ごとに色分けした、国と時刻の散布図
# Using the data from the node input (knime.in) generate a (default) scatter plot.
# Color each of the plotted points based in URI and apply graph theme and display plot
g1<- ggplot(knime.in, aes(x = knime.in$"time diff", y = knime.in$"Country"))
g1<- g1 + geom_point(aes(color=factor(URI))) + graph_theme
g1<
リスト 3. URI に基づく国別のリクエスト数を示す棒グラフ
# Reorder the node input (knime.in) from largest to smallest total counts per country summing the counts from all URIs
# Using the data from the node input (knime.in) generate a bar chart.
# Color each of the bars based in URI, flip graph coordinates and apply graph theme and display plot
knime.in = transform(knime.in, Country=reorder(Country, 1+numeric(dim(knime.in)[1]),  FUN=sum ) )
g1<- ggplot(knime.in, aes(x = knime.in$"Country"))
g1<- g1 +  geom_bar(aes(fill = URI)) + coord_flip() + graph_theme
g1
リスト 4. URI 別のリクエスト合計数を示す棒グラフ
# Reorder the node input (knime.in) from largest to smallest total counts per URI summing the counts from all countries
# Using the data from the node input (knime.in) generate a bar chart.
# Color each of the bars grey, flip graph coordinates and apply graph theme and display plot
knime.in = transform(knime.in, URI=reorder(URI, 1+numeric(dim(knime.in)[1]),  FUN=sum ) )
g1<- ggplot(knime.in, aes(x = knime.in$"URI"))
g1<- g1 + geom_bar(fill = "grey") + coord_flip() + graph_theme
g1

まとめ

本番環境でアジャイル・データ分析を行うと、自動化されたテストの結果についての理解を大きく深めることができます。最小限のユーザー操作によってテストから引き出せる情報が多ければ多いほど、それだけ迅速に危険な状態やエラーの状態に対応して、さらなる調査やテストが必要であるかどうかを判断することができます。

KNIME ワークフローを自動化して R の分析およびグラフ生成機能と統合することで、テスター、開発者、ドメイン・エキスパートだけでなく、特定のテストの結果を理解する必要がある人々 (マーケティングやセールスの専門家など) に役立つ、アジャイルな分析を実行できるようになります。


ダウンロード可能なリソース


関連トピック

  • KNIME について詳しく調べてください。
  • 統計計算とグラフィックに対応する無料のソフトウェア環境、R に関する最新情報を入手してください。
  • ggplot2 の詳細を学んでください。
  • developerWorks の Rational ゾーンで、技術リソース、ベスト・プラクティス、そしてソフトウェアおよびシステム・デリバリーのための Rational のコラボレーティブな統合ソリューションに関する情報を調べてください。
  • さまざまな IBM 製品や IT 業界のトピックに焦点を絞った developerWorks テクニカル・イベントで最新の技術情報を入手してください。
  • developerWorks 最新イベント情報のページで、IBM の製品およびツールについての情報や IT 業界の動向についての情報を迅速に把握してください。
  • 包括的な R アーカイブ・ネットワークから、R をダウンロードしてください。
  • Rational ソフトウェアの無料の試用版をダウンロードしてください。
  • Rational ソフトウェアを評価またはレビューしてください。短時間で簡単に評価またはレビューすることができます。

コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=DevOps
ArticleID=982656
ArticleTitle=アジャイル・データ分析 ― 先進的なワークフローと R の統合
publish-date=09182014