目次


IBM SPSS Modelerスクリプトでより効率的なストリームを作成する

Comments

はじめに

IBM SPSS Modelerでは、GUI(Graphical User Interface)を使用してデータ・マイニング処理をビジュアルのダイアグラムで作成することができます。データマイニングのオペレーションはノードと呼ばれるアイコンで表示されます。ノードにノードを接続することでデータ・マイニングの作業やデータの流れをストリームとして表示することができます。

IBM SPSS Modelerのインターフェイスでは、マウスやキーボードの操作でストリームを作成することができます。ストリームにノードを追加し、ノードのプロパティを設定することで、データ加工やモデルを作成します。そして、ストリームを実行することでデータの分析を行います。IBM SPSS Modelerのインターフェイスでインタラクティブなデータ・マイニング作業を行うことが可能です。

しかし、インタラクティブな操作では、データ更新と共にモデルを再作成する場合や、同じ作業を何回も繰り返す場合に、時間と手間がかかります。例えば、モデルを再作成するためのデータ・ソースを差し替える場合、そのデータ・ソースのノード・プロパティ・ウィンドウを開く、といった手間のかかる作業を実施しなければなりません。定期的な作業はModelerのインタラクティブ・インターフェイスには適当ではありません。このような作業は、バッチ・ジョブで行うべきです。

IBM SPSS Modelerで行った作業を自動化するためにModelerスクリプトを使用します。ModelerスクリプトはModeler用のプログラム言語でCLEM (Control Language for Expression Manipulation) コマンドを実行することができます。Modelerスクリプトでノードの作成、ノードのプロパティの設定やデータの計算などModelerインターフェイスで行った作業をプログラム化することができます。そして、IBM SPSS ModelerのCLEMBコマンドを使用することで、ModelerのストリームやModelerスクリプトをバッチ・ジョブとして実行することが可能です。

Modelerスクリプトの種類

IBM SPSS Modelerでは、次の3種類のスクリプトがあります。

  • ストリーム・スクリプト
  • スタンドアロン・スクリプト
  • スーパーノード・スクリプト

ストリーム・スクリプトはストリーム内に格納されたスクリプトです。ストリームを実行した際にスクリプトが実行されるように設定することができます。ストリーム・スクリプトはストリーム内の一部のプロセスのみを自動化する時によく使われます。

スタンドアロン・スクリプトはストリームに独立している、Modeler用のプログラム言語で作成されたスクリプトです。このスクリプトで新しいストリームを作成することや既にあるストリームを開くことができます。スタンドアロン・スクリプトはCLEMBコマンドで実行することができます。

スーパーノード・スクリプトは、ターミナル・スーパーノードでのみ使用できるModelerスクリプトです。このスクリプトはストリームにあるスーパーノードのプロパティに格納されます。スーパーノードの内容のシーケンスの実行を制御するスクリプトです。

Modelerスクリプトの作成方法

Modelerスクリプトは、Modeler用のプログラム言語で作成されたプレーン・テキスト形式のコードです。Modelerスクリプトを実行すると、Modelerがスクリプトの内容を1行毎にシーケンスで読み込んで処理します。ストリーム・スクリプトは、ストリームのプロパティに格納されます。IBM SPSS Modeler Clientのスクリプト・エディターを使用することでスクリプトはストリームプロパティに追加されます。

図 1. IBM SPSS Modelerのストリームのプロパティ・ダイアログ・ボックスのスクリプト・タブ
ストリームのプロパティ・ダイアログ・ボックスのスクリプト・タブのスクリーン・キャプチャー
ストリームのプロパティ・ダイアログ・ボックスのスクリプト・タブのスクリーン・キャプチャー

IBM SPSS Modeler Clientのストリーム・カンバスを右クリックし、サブメニューから「ストリームのプロパティ」をクリックすると「ストリームのプロパティ」ウィンドウが開きます。スクリプト・エディターは、ストリーム・プロパティ・ウィンドウにある「スクリプト・タブ」です。スクリプト・エディターでスクリプトの作成や編集ができます。メニューからスクリプトの実行やスクリプトの保存などさまざまなタスクを行えます。

スクリプト・エディターで作成したスクリプトはプレーン・テキストに保存することで、「スタンドアロン・スクリプト」として扱うことができます。「スタンドアロン・スクリプト」は一般のテキスト・エディターで編集することもできます。

ストリームを実行する時はスクリプトが必ず実行されるように、「スクリプト・タブ」にある「ストリームの実行時」項目の「このスクリプトを実行」オプションを有効にしてください。

Modelerのスクリプト言語

Modelerのスクリプト言語は以下の要素で構成されます。

  • Modelerのオブジェクトへの参照のフォーマット
  • Modelerのオブジェクトを操作するためのコマンドスクリプト
  • 変数、パラメータやオブジェクトの値を設定するためのスクリプトの式
  • スクリプトのコメントやテキスト・オブジェクトおよびリテラル・テキストのブロック

Modelerスクリプトの言語の基本的なシンタックスはPythonやJavaScriptなどの一般なスクリプト言語に似ていますが、Modelerスクリプトは独自の規則があります。例えば、編集名に引用符を付けることはできません。また、宣言された変数の値を参照するために、変数名の先頭にはカレット (^) 記号を付ける必要があります。IBM SPSS Modeler Clientのスクリプト・エディターにはModelerスクリプト言語シンタックス・チェック機能が含まれています。

IBM SPSS Modeler15スクリプトのシンタックスについて詳しい内容は、「IBM SPSS Modeler 15 スクリプトとオートメーション ガイド」をご参照ください。

FMPデザインのプリンシプルとCRISP-DM

Modelerスクリプトを使用する場合でもストリームを作成するためのモデル開発の基本的なコンセプトは変わりません。IBM SPSS Modelerではデータ・マイニング作業を行う際には企業基準のCRISP-DM手法を使用することが推奨されます。CRISP-DMはSPSS、NCR、ダイムラークライスラー、OHRAのデータマイニング・コンソーシアムが開発したデータ・マイニング方法論です。CRISP-DMでは、データ・マイニングのプロジェクトは6つのフェーズに分けられます。

  • フェーズ1:ビジネスの状況の把握
  • フェーズ2:データの理解
  • フェーズ3:データの準備
  • フェーズ4:モデル作成
  • フェーズ5:評価
  • フェーズ6:展開/共有
図 2. CRISP-DMのライフサイクル
CRISP-DMのライフサイクルのイメージ
CRISP-DMのライフサイクルのイメージ

CRISP-DMのライフ・サイクルモデルに表示された矢印は、重要で頻繁に発生するフェーズ間の依存関係を表しています。このモデルでは各フェーズの順序は固定されていません。実際のプロジェクトのアクティビティでは必要に応じてCRISP-DMのフェーズ間を前後に移動して作業を行います。

Modelerスクリプトを使用することで、より効率的なストリームを作成することができます。ストリームやスクリプトを開発するにはFMP (Functionality, Maintainability, Performance)デザインのプリンシプルに従うことを推奨します。FMPデザインのプリンシプルでは、プログラムを作成した際の目的やパフォーマンスおよびメンテナンスのバランスが求められます。

例えば、データ・マイニング・プロセスの一部として、複雑なデータ加工を行う必要がある場面を考えます。ストリームをデザインする際に、そのデータ加工のタスクは他のデータ・マイニング・プロセスと同じストリームで作成するべきか、別のストリームに分割するべきか、を検討することが必要です。すべてのタスクを一つのストリームにまとめる場合は、ストリームの実行やストリームのメンテナンスが簡単です。ただし、より多くのノードを加えることでストリーム・サイズが大きくなります。大きなストリームを処理するには、より大きなメモリーや時間がかかるため、運用のパフォーマンスに影響します。この場合は、複雑なタスクを別のストリームやスクリプトに分割することでパフォーマンスを向上させることができます。

FMPデザインのプリンシプルでは、プログラムの目的を忘れずにストリームのメンテナンスおよびパフォーマンスのバランスを得るためのクリエイティブなアイデアや工夫を行うことが必要となります。

サンプル・スクリプト1:スクリプトで簡単なストリームを作成します。

Modelerのデモ・フォルダーにあるストリーム「druglearn.str」と同じストリームをModelerスクリプトで作成する方法を紹介します。このサンプルではストリームを作成するためのすべてのタスクをスクリプトでプログラムします。

図 3. DRUGLEARN.STRのストリーム内容
DRUGLEARN.STRのストリーム内容のイメージ
DRUGLEARN.STRのストリーム内容のイメージ

スクリプトでストリームを作成するために、2つのタスクを行います。

  1. ストリーム・カンバスをクリアしてから各ノードを作成し、そのノードをストリーム・カンバスに追加します。
  2. ノードのプロパティを設定後、次のノードの接続を設定します。

以下のコードはストリーム・カンバスをクリア後、特定の場所でノードを作成します。ストリーム・カンバスに重複オブジェクトを追加しないように、スクリプトの先頭に、「clear stream」のコードを利用します。

clear stream

var vfilenode
set vfilenode = create variablefilenode
position ^vfilenode at 100 75

すべてのノードを作成後、各ノードのプロパティを設定し、ノードの接続を行います。例えば、以下のスクリプトでは「可変長ファイル・ノード」プロパティを設定後、「フィールド作成・ノード」への接続を行います。

set ^vfilenode.full_filename = "$CLEO_DEMOS/japanese_ja/DRUG1n"
connect ^vfilenode to ^vderivenode

同じく、「フィールド作成・ノード」と「フィルター・ノード」の接続前に、「フィールド作成・ノード」プロパティの設定を行います。

set ^vderivenode.new_name = "ナトリウム値/カリウム値"
set ^vderivenode.mode = Single
set ^vderivenode.result_type = Formula
set ^vderivenode.formula_expr = "ナトリウム値/カリウム値"

connect ^vderivenode to ^vfilternode

Modelerスクリプトでは、同じプロパティで複数の設定項目を指定する場合、for..endforのループを使用することができます。例えば、以下のコードの場合、「ナトリウム値」と「カリウム値」の「include」プロパティをどちらも「false」に指定するため、for..endforのループを使用して各値の設定を行います。

for f in ナトリウム値 カリウム値
  set ^vfilternode.include.^f = False
endfor

すべてのノード・プロパティの設定やノードの接続後、「execute コード」で作成したモデル・ノードを実行します。今回のサンプルでは、「C50ノード」を実行することでC50のモデル・ナゲットが作成されました。

execute 薬品

完成した以下のスクリプトを実行すると、DRUGLEARN.STRと同じストリームを作成することができます。

clear stream

var vfilenode
set vfilenode = create variablefilenode
position ^vfilenode at 100 75

var vderivenode
set vderivenode = create derivenode
position ^vderivenode at 200 75

var vfilternode
set vfilternode = create filternode
position ^vfilternode at 300 75

var vtypenode
set vtypenode = create typenode
position ^vtypenode at 400 75

var vc50node
set vc50node = create c50node
position ^vc50node at 500 75

set ^vfilenode.full_filename = "$CLEO_DEMOS/japanese_ja/DRUG1n"

connect ^vfilenode to ^vderivenode

set ^vderivenode.new_name = "ナトリウム値/カリウム値"
set ^vderivenode.mode = Single
set ^vderivenode.result_type = Formula
set ^vderivenode.formula_expr = "ナトリウム値/カリウム値"

connect ^vderivenode to ^vfilternode

for f in ナトリウム値 カリウム値
  set ^vfilternode.include.^f = False
endfor
rename ^vfilternode as フィールド破棄

connect ^vfilternode to ^vtypenode

set ^vtypenode.type.年齢 = Range
set ^vtypenode.type.性別 = Flag
set ^vtypenode.type.血圧 = Discrete
set ^vtypenode.type.コレステロール値 = Flag
set ^vtypenode.type.薬品 = Discrete
set ^vtypenode.type.'ナトリウム値/カリウム値' = Discrete
set ^vtypenode.direction.薬品 = Target
rename ^vtypenode as データ定義

connect ^vtypenode to ^vc50node

execute 薬品

サンプル・スクリプト2:スクリプトでユーザー・データをテーブルに入力する方法

IBM SPSS Modelerのインタラクティブ・モードの操作では実現できないデータ加工が数行のスクリプトで簡単に実現できるサンプルを紹介します。

キャンペーン期間中に、お店で買い物したお客様に抽選券を配ります。お客様が集めた抽選券の集計データは以下のテーブルに表示されます。

お客様の名前抽選券の数
山田3
田中2
鈴木3
金田5

しかし、次のデータ分析を行う場合、抽選券の数に合わせてお客様の名前をデータ・ソースに登録する必要があります。例えば、山田さんは3口の抽選券を持っているのでデータ・ソースに山田さんの名前を3回登録します。上記の集計データのテーブルは以下のデータ・ソースに変換する必要があります。

お客様の名前連番
山田1
山田2
山田3
田中4
田中5
鈴木6
鈴木7
鈴木8
金田9
金田10
金田11
金田12
金田13

集計した抽選データを詳細なデータ・ソースに変換するためには、お客様が持っている抽選券の数でお客様の名前を登録する、繰り返し作業が必要です。お客様のデータが少ない場合は、手動でデータ・ソースの登録を行えます。しかし、何千人のお客様データを登録する場合は、非常に時間や手間がかかるため、この作業は自動化が望まれます。IBM SPSS Modelerを利用してこのデータ加工を行うためにModelerスクリプトを使用します。

IBM SPSS Modelerのストリーム内スクリプトを利用して以下の手順でデータ加工を行います。

  1. 集計した抽選データをテーブルで表示し、お客様が持っている抽選券数の値を取得します。
  2. 繰り返しプロセスとしてお客様が持っている抽選券の数と同じ数のお客様の名前をデータ・ソースに登録します。

この作業を行うためには、まずストリーム・カンバスに「可変長ファイル・ノード」を追加し、CSV形式の抽選データを設定後、「テーブル・ノード」に接続します。

図 4. テーブル・ノードで抽選データを表示します。
テーブル・ノードで抽選データを表示したときのスクリーン・キャプチャー
テーブル・ノードで抽選データを表示したときのスクリーン・キャプチャー

「clear outputs」コードを利用し、既に出力されたオブジェクトを削除します。抽選データを把握するために、「口数テーブル」を実行します。

clear outputs
execute 口数テーブル

口数テーブルでは、各行にお客様の名前とお客様が持っている抽選券の数を記録します。口数テーブルの行数を取得するために、output.row.countコードを利用します。

var okyaku_suu
set okyaku_suu = 口数テーブル.output.row_count

データ・ソースを作成するために、「ユーザー入力・ノード」と「テーブル・ノード」を利用します。「ユーザー入力・ノード」に追加された「ユーザー名」は、「テーブル・ノード」で表示します。必要に応じて、「テーブル・ノード」の出力先はファイルに設定することもできます。

図 5. ユーザー入力ノードをテーブル・ノードに接続します。
ユーザー入力ノードをテーブル・ノードに接続のイメージ

「お客様の名前」および「レコード番号」を追加するために、「ユーザー入力・ノード」に「レコード番号」および「お客名」フィールドを作成します。Modelerスクリプトに、「お客様の名前」および「レコード番号」のデータを保管するために「nm_fld」および「rec_fld」変数名を作成します。「var <変数名>」で変数名を宣言します。そして「set <変数名> = <値>」で変数名に値をアサインします。抽選データの処理を行う前に、スクリプトで使用する変数を以下のように初期化します。

var okyaku_cnt
var nm_fld
set nm_fld = ""
var rec_fld
set rec_fld =""
var record_no
set record_no = 0

各お客様が持っている抽選数の値を取得するために「for..endfor」ループを利用します。口数テーブルの行数でループを行います。お客様が持っている抽選券の数は「value..at」コマンドで取得します。

for okyaku_cnt from 1 to okyaku_suu
  var kuchi_suu
  var okyaku_mei
  set kuchi_suu = value 口数テーブル.output at ^okyaku_cnt 2
  set okyaku_mei = value 口数テーブル.output at ^okyaku_cnt 1
 …
endfor

「nm_fld」変数は、「お客名」フィールドのレコードデータを保管します。すべてのレコードを入力する場合は、「nm_fld」にお客様の名前が含まれた長い文字列をアサインします。この文字列では、名前と名前の間の空白(space)はレコードの区切りとなります。

var kuchi_cnt
  for kuchi_cnt from 1 to kuchi_suu
    set record_no = ^record_no + 1
    set nm_fld  = ^nm_fld><'\"'><^okyaku_mei><'\" '
    set rec_fld = ^rec_fld><^record_no><' '
    set :userinputnode.data.お客名 = ^nm_fld
    set :userinputnode.data.レコード番号 = ^rec_fld 
  endfor
図 6. 「ユーザー入力・ノード」にお客様のデータを入力します
ユーザー入力・ノードのスクリーン・キャプチャー
ユーザー入力・ノードのスクリーン・キャプチャー

最後に、「ユーザー入力ノード」に接続した「テーブル・ノード」を実行することで完成したデータ・ソースのテーブルが表示されます。必要に応じて、「テーブル・ノード」の出力先をファイルに設定することもできます。

execute 抽選テーブル
図 7. ストリーム内の実行結果
ストリーム内の実行結果のスクリーン・キャプチャー
ストリーム内の実行結果のスクリーン・キャプチャー

完成したスクリプトは以下です。このスクリプトを実行すると集計データを詳細データ・ソースへ変換することができます。

clear outputs
execute 口数テーブル

var okyaku_suu
set okyaku_suu = 口数テーブル.output.row_count

var nm_fld
set nm_fld = ""
var rec_fld
set rec_fld =""
var record_no
set record_no = 0

var okyaku_cnt
for okyaku_cnt from 1 to okyaku_suu
  var kuchi_suu
  var okyaku_mei
  set kuchi_suu = value 口数テーブル.output at ^okyaku_cnt 2
  set okyaku_mei = value 口数テーブル.output at ^okyaku_cnt 1
  var kuchi_cnt
  for kuchi_cnt from 1 to kuchi_suu
    set record_no = ^record_no + 1
    set nm_fld  = ^nm_fld><'\"'><^okyaku_mei><'\" '
    set rec_fld = ^rec_fld><^record_no><' '
    set :userinputnode.data.お客名 = ^nm_fld
    set :userinputnode.data.レコード番号 = ^rec_fld 
  endfor
endfor
execute 抽選テーブル

サンプル・スクリプト3:サンプル・スクリプト2で作成したキャンペーン・スクリプトの修正

ビジネスの成長と共にデータ・マイニングで使用したデータが増加していきます。そして、以前作成したストリームやスクリプトがそのデータを正しく処理できないことがあります。処理したデータが増えた場合でも、そのデータを正しく処理できるようにスクリプトやストリームをデザインする段階で考えておかなければなりません。そのために、IBM SPSS Modelerの仕様を正しく理解する必要があります。各機能の動作や制限を理解した上でストリームやスクリプトをデザインすることを推奨致します。

サンプル・スクリプト2で紹介致しましたスクリプトは、数十人のお客様データは問題なく処理できます。しかし、数万人のお客様データは正しく処理できません。サンプル・スクリプト2でご紹介したスクリプトでは、お客様データをデータ・ソースに入力するために「ユーザー入力・ノード」を使用します。このスクリプトでは、すべてのレコードは文字列に保管し、「ユーザー入力・ノード」のフィールドにアサインしますので、データが増える際に文字列の長さも増えます。しかし、Modelerでは文字列の長さの制限があるので、この制限を超えるとエラーが発生します。この問題を回避するために、文字列の長さをコントロールする仕組みをスクリプトに追加する必要があります。

例えば、文字列に追加されたレコード数が50個になったら、このデータをデータ・ソースに追加し、文字列に保管する変数の値をリセットします。データを50レコード毎にデータ・ソースに入力することにより、文字列の長さの制限を超えないため、お客様のデータが増えた場合でも、正しく処理をすることができます。具体的なサンプル・スクリプトを以下に紹介します。

最初は前述のスクリプトと同様に、「可変長ファイル・ノード」にCSV形式の抽選データを設定後、テーブル・ノードに接続します。

図 8. テーブル・ノードで大きな抽選データを表示します。
テーブル・ノードの大きな抽選データのスクリーン・キャプチャー

次に、「ユーザー入力・ノード」を追加し、エクスポートの「ファイル・ノード」に接続します。 「ファイル・ノード」のプロパティにて「書き込みモード」を「追加」に設定します。書き込みモードを「追加」に設定することによって、「ファイル・ノード」で指定した出力ファイルにデータを追加することができます。

図 9. ファイル・ノードのプロパティにて、書き込みモードは「追加」と設定します。
ファイル・ノードのプロパティのスクリーン・キャプチャー
ファイル・ノードのプロパティのスクリーン・キャプチャー

作成した出力ファイルの内容を確認するために「可変長ファイル・ノード」と「テーブル・ノード」をストリームに追加します。

図 10. ファイル・ノードのプロパティにて、書き込みモードは「追加」と設定します。
ファイル・ノードのプロパティのスクリーン・キャプチャー

ストリーム内のスクリプトでは、「ユーザー入力・ノード」に追加したレコード数をコントロールするために「record_cnt」変数を追加します。

var record_cnt
set record_cnt = 0

前述のスクリプトと同様、お客様の名前とレコード番号は文字列変数に保管します。文字列変数に50名のデータを追加後、そのデータを「ユーザー入力ノード」のフィールド名に移し、出力ファイルに保存します。これで、一度に50名毎にお客様のデータを出力ファイルへ保存することができます。「for..endfor」ループにより、すべてのお客様データが処理されるまで繰り返されます。

for kuchi_cnt from 1 to ^kuchi_suu
    set record_no = ^record_no + 1
    set record_cnt = ^record_cnt +1
    set nm_fld  = ^nm_fld><'\"'><^okyaku_mei><'\" '
    set rec_fld = ^rec_fld><^record_no><' '
    if ^record_cnt > 49 then
      set :userinputnode.data.お客名 = ^nm_fld
      set :userinputnode.data.レコード番号 =^rec_fld
      execute 抽選ファイル
      set record_cnt = 0
      set nm_fld = " "
      set rec_fld = " "
    endif
  endfor

残りのお客様データを出力ファイルに追加後、そのファイルの内容をテーブル・ノード「抽選テーブル」で表示します。

set :userinputnode.data.お客名 = ^nm_fld
set :userinputnode.data.レコード番号 =^rec_fld
set 完成_抽選ファイル:variablefilenode.full_filename = "D:\data\BigCampaignFile.csv"
execute 抽選ファイル
execute 抽選テーブル
図 11. スクリプトの実行結果(130レコードを正しく追加することができました。)
スクリプトの実行結果のスクリーン・キャプチャー
スクリプトの実行結果のスクリーン・キャプチャー

完成したスクリプトは以下です。このスクリプトでは、お客様データは50レコード毎にキャンペーンデータファイルに出力することができます。

clear outputs
execute 口数テーブル

var okyaku_suu
set okyaku_suu = 口数テーブル.output.row_count

var nm_fld
set nm_fld = " "
var rec_fld
set rec_fld = " "
var record_no
set record_no = 0

var record_cnt
set record_cnt = 0

var okyaku_cnt
for okyaku_cnt from 1 to okyaku_suu
  var kuchi_suu
  var okyaku_mei
  set kuchi_suu = value 口数テーブル.output at ^okyaku_cnt 2
  set okyaku_mei = value 口数テーブル.output at ^okyaku_cnt 1
  var kuchi_cnt
  for kuchi_cnt from 1 to ^kuchi_suu
    set record_no = ^record_no + 1
    set record_cnt = ^record_cnt +1
    set nm_fld  = ^nm_fld><'\"'><^okyaku_mei><'\" '
    set rec_fld = ^rec_fld><^record_no><' '
    if ^record_cnt > 49 then
      set :userinputnode.data.お客名 = ^nm_fld
      set :userinputnode.data.レコード番号 =^rec_fld
      execute 抽選ファイル
      set record_cnt = 0
      set nm_fld = " "
      set rec_fld = " "
    endif
  endfor
endfor
set :userinputnode.data.お客名 = ^nm_fld
set :userinputnode.data.レコード番号 =^rec_fld
set 完成_抽選ファイル:variablefilenode.full_filename = "D:\data\BigCampaignFile.csv"
execute 抽選ファイル
execute 抽選テーブル

CLEMBを使用してバッチコマンドでストリームやスクリプトを実行します

IBM SPSS Modeler Batchでは、処理時間が長いストリームやスクリプトが、グラフィカル・ユーザー・インターフェイスを使用せずに、コマンドラインで実行することが可能です。

長時間のモデリング処理や、あらかじめ設定した時間に特定ストリームを実行することや、バックグラウンドプロセスおよび夜間処理で行うデータ加工などのタスクは、バッチ・モードで行うことができます。

OSコマンドやスケジューリングツールを使用することで、バッチ・モードで実行するストリームやスクリプトをスケジューリングすることができます。例えば、WindowsのatコマンドでCLEMBコマンドが含まれたバッチファイルを夜間処理として毎晩実行するようにスケジュールすることが可能です。

ストリームやスクリプトをバッチ・モードで実行するためにはModelerのCLEMBコマンドを使用します。CLEMBコマンドはIBM SPSS Modeler Clientのインストールフォルダーのサブフォルダー「BIN」フォルダーから実行します。IBM SPSS Modeler ServerマシンでCLEMBコマンドを実行する場合、IBM SPSS Modeler Batchをインストールすることが必要です。CLEMBを実行するためにIBM SPSS Modeler Clientに「Server Enablement」のライセンスを追加することが必要です。そしてCLEMBで実行するために、ストリームやスクリプトファイルをCLEMBのパラメターとして設定します。例えば、以下のコマンドではバッチ・モードとして「Stream01.str」をModelerサーバー「modserver.test.org」で実行します。

"C:\Program Files\IBM\SPSS\Modeler\15\bin\clemb.exe" -server -hostname 
modserver.test.org -username administrator -password Pass1234 -stream 
Stream01.str -log Stream01.log –execute
図 12. CLEMBのヘルプでCLEMBのパラメターを確認できます。
CLEMBのヘルプのCLEMBのパラメターのスクリーン・キャプチャー
CLEMBのヘルプのCLEMBのパラメターのスクリーン・キャプチャー

また、以下の例では、CLEMBをWindowsのバッチファイルで実行することもできます。

echo off
set PATH=%PATH%;"C:\Program Files\IBM\SPSS\Modeler\15\bin"
set DT=%DATE:/=%
set TT=%Time:~0,2%%Time:~3,2%

set DEFDIR=D:\data\TEST\batch_temp
set LOGDIR=D:\data\TEST\batch_logs

pushd %DEFDIR%

set SERVER=-server -hostname modserver.test.org -username administrator -
password Pass1234

set INPUTNODE1=-PDBTEST01:databasenode.username=db2admin -
PDBTEST01:databasenode.password=db2adm1n
set INPUTNODE2=-PDBTEST02:databasenode.username=db2admin -
PDBTEST02:databasenode.password=db2adm1n
set INPUTNODES=%INPUTNODE1% %INPUTNODE2%

set STR=TESTDBSTREAM
clemb -J-Xmx1024m -stream 
"D:\data\TEST\%STR%.str" %SERVER% %INPUTNODES% -log 
"%LOGDIR%\Run_%STR%_%DT%-%TT%.log" -execute

set fname=\\modserver.test.org\data\ResultFile.csv
if not exist %fname% (
	echo ERROR:%fname% is not exist. >> 
"%LOGDIR%\Run_%STR%_%DT%-%TT%.log"
	goto exit
)

copy %fname% "D:\data\TEST\OUTFILES\ResultFile_%DT%.csv" /Y
delete %fname%

popd

exit

終わりに

IBM SPSS Modelerでは、GUI(Graphical User Interface)を使用してデータ・マイニングをビジュアルのダイアグラムで行うことができます。一方、ユーザー・インターフェイスを使用せずにModelerスクリプトで繰り返し作業および長時間タスクの処理も行うことができます。

CLEMBを使用することで、Modelerのストリームやスクリプトをバッチ・モードで実行することができます。CLEMBコマンドを使用したDOSのバッチ・プログラムをバッチ・ジョブとしてスケジューリングすることで、長時間のモデリングやデータ加工作業などを実行することができます。このようにModelerスクリプトおよびCLEMBを活用することで効果的なビジネス運用を得ることができます。

複雑なストリームをタスク毎に分割後、スクリプトやCLEMBで実行することでパフォーマンスを向上させることもできます。

ストリームの作成においてメンテナンスとパフォーマンスのバランスを取るためにFMPデザインのプリンシプルやCRISP-DMを参考として工夫することが必要です。


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


コメント

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=ビジネス・アナリティクス
ArticleID=959877
ArticleTitle=IBM SPSS Modelerスクリプトでより効率的なストリームを作成する
publish-date=01102014