SPSS Modeler ヒモトク

第2回 ループ処理の基本 – IBM SPSS Modelerスクリプトによる分析作業の効率化

記事をシェアする:

ループ処理の基本

スクリプトで良く使われる処理の一つに、ループ処理があります。

例えば、100個の入力ファイルに対して同じ処理を行う場合、同じストリームを99個コピーして999個の入力ノードに対して一つずつファイル名を 変更するのは手間がかかります。この場合、スクリプトを利用し、自動的にファイル名を変更してストリームを繰り返し実行すれば効率が良くなります。

ここで、基本的なループ処理をご紹介します。ループ処理には「for…endfor」コマンドを使用します。これは、条件に基づいて一連のステートメントをループさせるものです。

for PARAMETER in LIST
STATEMENTS
endfor

このコマンドには、次のようにいくつかのフォーマットがあります。

  1. 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
  2. for PARAMETER from N to MN~Mの各整数に対して、STATEMENTSを1回ずつ実行します。以下にその例を示します。
    for I from 1 to 5
    setset :selectnode.condition = ‘Age > ‘ >< (I * 10)
    setexecute :selectnode
    endfor
  3. for PARAMETER in_fields_to NODENODEの上流側で、各フィールドに1回ずつSTATEMENTSを実行します。次の例は、includeプロパティを以前falseに設定されたフィールドも含めて、すべてのフィールドにtrueを設定します。
    for f in_fields_to Filter
    set Filter.include.^f = “true”
    endfor

    ※ノードに同じ名前(「結合」または「レコード追加」など)の複数入力フィールドがある場合、この方法では、競合の発生を避けるために、上流ではなく下流のフィールドのリストが返されます。

  4. for PARAMETER in_fields_at NODE指定のNODEから出力されるそれぞれのフィールド (または下流) に対してSTATEMENTSを1回ずつ実行します。ノードがフィルタの場合は、通過したフィールドのみが含められ、フィールドは返されないので、その ノードはターミナルノードである必要はありません。上の例とは反対に、次のスクリプトには何の効果もありません。このループは、すでにtrueに設定され たフィールドにのみ実行されるからです。
    for f in_fields_at Filter
    set Filter.include.^f = “true”
    endfor
  5. 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
  6. for PARAMETER in_streamsスタンドアロン スクリプト専用です。[ストリーム] パレットに表示されているロード済みの各ストリームに対して、STATEMENTSを1回ずつ実行します。PARAMETERが特殊変数streamの場 合、ループ中のSTATEMENTSに現在のストリームが設定されます。ループが終了すると、streamの元の値が復元されます。

スクリプト作成時のポイント

  • 同じノードがある場合は、実行対象を識別するために注釈でノードに名称をつけてください。
  • varで宣言した変数名は、コマンド内で頭に「^」をつけて使用します。
    例: set p = ^row_count
  • 文字を結合する場合は、「><」を使用します。
  • setする内容に変数名を含む場合は、変数名の前後に「><」を使います。また、「”」などのエスケープ文字は「」です。
    例: set :derivenode.formula_expr=””aaa” >< ^Cnm >< “aaa””

※その他にもいくつか規則があります。詳細は、ヘルプまたはマニュアルをご参照ください。

More SPSS Modeler ヒモトク stories

データ分析者達の教訓 #19- ちゃぶ台返しを受けないため「最初に」現場と握っておく

Data Science and AI, SPSS Modeler ヒモトク, アナリティクス...

皆さんこんにちはIBM の斉藤です。IBM Data&AIでデータサイエンスTech Salesをしています。 このリレー連載ブログはSPSS Modelerの実際のユーザーで第一線で活躍するデータ分析者に、デー ...続きを読む


データ分析者達の教訓 #18- データの向こうにある社会的背景や因果関係を洞察せよ

Data Science and AI, SPSS Modeler ヒモトク, アナリティクス...

こんにちは。IBM Data&AIでデータサイエンスTech Salesをしている西牧です。 このリレー連載ブログはSPSS Modelerの実際のユーザーで第一線で活躍するデータ分析者に、データ活用を進める上で ...続きを読む


データ分析者達の教訓 #17- データ分析はチーム戦。個々がミス最小化の責任を持つ

Data Science and AI, SPSS Modeler ヒモトク, アナリティクス...

皆さんこんにちは。山下研一です。IBM Data&AIでデータサイエンスTech Salesをしています。 このリレー連載ブログはSPSS Modelerの実際のユーザーで第一線で活躍するデータ分析者に、データ活 ...続きを読む