SPSS Modeler ヒモトク
第2回 ループ処理の基本 – IBM SPSS Modelerスクリプトによる分析作業の効率化
2016年03月04日
カテゴリー SPSS Modeler ヒモトク | アナリティクス
記事をシェアする:
ループ処理の基本
スクリプトで良く使われる処理の一つに、ループ処理があります。
例えば、100個の入力ファイルに対して同じ処理を行う場合、同じストリームを99個コピーして999個の入力ノードに対して一つずつファイル名を 変更するのは手間がかかります。この場合、スクリプトを利用し、自動的にファイル名を変更してストリームを繰り返し実行すれば効率が良くなります。
ここで、基本的なループ処理をご紹介します。ループ処理には「for…endfor」コマンドを使用します。これは、条件に基づいて一連のステートメントをループさせるものです。
STATEMENTS
endfor
このコマンドには、次のようにいくつかのフォーマットがあります。
- for PARAMETER in LISTリストの順序を使用して、PARAMETER に割り当てられた LIST 内の各値に対して、STATEMENTS を 1 回ずつ実行します。たとえば次のように、Filter.include プロパティが複数フィールドでtrueに設定されます。「for f in [“Age” “Sex”]」は「for f in Age Sex」と書くこともできますが、 [“Age” “Sex”]のほうが明示的でわかりやすいでしょう。特に、リストが長くなる場合はこちらのほうが間違いが少なくなります。
for f in [“Age” “Sex”]
set Filter.include.^f=true
endfor - for PARAMETER from N to MN~Mの各整数に対して、STATEMENTSを1回ずつ実行します。以下にその例を示します。
for I from 1 to 5
setset :selectnode.condition = ‘Age > ‘ >< (I * 10)
setexecute :selectnode
endfor - for PARAMETER in_fields_to NODENODEの上流側で、各フィールドに1回ずつSTATEMENTSを実行します。次の例は、includeプロパティを以前falseに設定されたフィールドも含めて、すべてのフィールドにtrueを設定します。
for f in_fields_to Filter
set Filter.include.^f = “true”
endfor※ノードに同じ名前(「結合」または「レコード追加」など)の複数入力フィールドがある場合、この方法では、競合の発生を避けるために、上流ではなく下流のフィールドのリストが返されます。
- for PARAMETER in_fields_at NODE指定のNODEから出力されるそれぞれのフィールド (または下流) に対してSTATEMENTSを1回ずつ実行します。ノードがフィルタの場合は、通過したフィールドのみが含められ、フィールドは返されないので、その ノードはターミナルノードである必要はありません。上の例とは反対に、次のスクリプトには何の効果もありません。このループは、すでにtrueに設定され たフィールドにのみ実行されるからです。
for f in_fields_at Filter
set Filter.include.^f = “true”
endfor - for PARAMETER in_models[モデル] パレット内の各モデル ナゲットに対して1回ずつ、STATEMENTSを実行します。例えば、次のスクリプトは各モデルをパレットから現在ストリームへ挿入します(ストリーム 領域で次々とノードを一番上にスタックしていくのを避けるために、xpos変数が使用されます)。
var xpos
set xpos = 100
for m in_models
set xpos = xpos + 100
insert model ^m at ^xpos 100
endfor - for PARAMETER in_streamsスタンドアロン スクリプト専用です。[ストリーム] パレットに表示されているロード済みの各ストリームに対して、STATEMENTSを1回ずつ実行します。PARAMETERが特殊変数streamの場 合、ループ中のSTATEMENTSに現在のストリームが設定されます。ループが終了すると、streamの元の値が復元されます。
スクリプト作成時のポイント
- 同じノードがある場合は、実行対象を識別するために注釈でノードに名称をつけてください。
- varで宣言した変数名は、コマンド内で頭に「^」をつけて使用します。
例: set p = ^row_count - 文字を結合する場合は、「><」を使用します。
- setする内容に変数名を含む場合は、変数名の前後に「><」を使います。また、「”」などのエスケープ文字は「」です。
例: set :derivenode.formula_expr=””aaa” >< ^Cnm >< “aaa””
※その他にもいくつか規則があります。詳細は、ヘルプまたはマニュアルをご参照ください。
データ分析者達の教訓 #22- 予測モデルはビジネスの文脈で語られ初めてインパクトを持つ
Data Science and AI, SPSS Modeler ヒモトク, アナリティクス...
皆さんこんにちは。IBMの坂本です。 SPSSを含むデータサイエンス製品の技術を担当しています。 このリレー連載ブログはSPSS Modelerの実際のユーザーで第一線で活躍するデータ分析者に、データ活用を ...続きを読む
データ分析者達の教訓 #21- 異常検知には異常を識別する「データと対象への理解」が必要
Data Science and AI, SPSS Modeler ヒモトク, アナリティクス...
皆さんこんにちは。IBMの宮園です。IBM Data&AIでデータサイエンスTech Salesをしています。 このリレー連載ブログはSPSS Modelerの実際のユーザーで第一線で活躍するデータ分析者に、デー ...続きを読む
【予約開始】「SPSS秋のユーザーイベント2024」が11月27日にオンサイト開催
Data Science and AI, SPSS Modeler ヒモトク, アナリティクス...
本年6月800名を超える方々にオンライン参加いただいたSPSS春のユーザーイベントに続き、『秋のSPSSユーザーイベント』を11月27日に雅叙園東京ホテルにて現地開催する運びとなりました。 このイベントは ...続きを読む