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

ブログで学ぶSPSS_Modeler #08- パッと見地味でもベテラン推し!平均値ノードで示す施策の有効性

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

  こんにちは、株式会社MAIの木暮です。   今回は、SPSS Modelerの平均値ノードで示す施策の有効性検証に活用するTipsを、具体例を交えながら掘り下げていきます。   SPSS ...続きを読む


身近な疑問をヒモトク#07-ニュースでよく見るイケてる地図グラフを自分でもサクッと描いてみたい

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

  こんにちはIBMの角田です。ビジネス・インテリジェンス(BI)製品の担当をしています。 最近テレビでニュースを見ているとグラフの表現力が上がったと感心します。とりわけ地図による可視化はバリエーションも豊富に ...続きを読む


ブログで学ぶSPSS_Modeler #07- モデル評価に欠かせない予測変数の重要度!そのカラクリと存在意義

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

  皆様こんにちはIBMの西牧です。   SPSS Modelerでモデルを作成すると大抵の場合、予測変数の相対重要度が出ます。     個々のフィールドがどの程度予測に影響を与え ...続きを読む