Modelerスクリプトでループ処理を実行する(SPSS Modeler データ加工逆引き9-14)

# カテゴリ毎にテーブルを出し分ける（Modelerスクリプトによるループ処理）

![スクリーンショット 2023-04-03 14.33.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/797d14e1-1714-6bc4-9747-fb6abc76d5bd.png)


## 1.想定される利用目的

・同じような処理を効率的に実施するためPythonスクリプトを利用してループさせる

## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/blob/main/py_loop.str?raw=true

## 3.サンプルストリームの説明

![スクリーンショット 2023-04-03 14.34.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/161c8df9-b6d8-4624-8874-a41030f7c48f.png)

a.入力するデータは以下の通りです。

![スクリーンショット 2023-03-28 11.03.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/48c0fcc8-f7e8-2dc3-00cf-f887c95e5c6f.png)

### カテゴリの種類の数をループさせるためにインデックスを付番する

b.[レコード]ノードを編集します。
![スクリーンショット 2023-04-03 14.46.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/da533181-d423-c5a3-6d18-cebfc94e7685.png)

c.[ソート]ノードを編集してABCの順に並び替えます。
![スクリーンショット 2023-04-03 14.46.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/75c33ca2-e43e-a9e9-126f-3051d1fca2a7.png)

d.[フィールド作成]ノードを編集します。関数@&#xFFF0;INDEXで付番します。
![スクリーンショット 2023-04-03 14.47.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/06705951-8ca5-c5e8-b97e-7fdb0273db90.png)

[プレビュー]します。
![スクリーンショット 2023-04-03 14.48.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/fc31029d-8cdf-00e6-d7c4-6d3f58e437f4.png)

e.[レコード結合]ノードを編集します。
![スクリーンショット 2023-04-03 14.48.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/bf48a5d3-462c-d807-e70b-dedbc776eedc.png)

[プレビュー]します。これがループのための対象データになります。
![スクリーンショット 2023-04-03 14.50.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/bf2b0fc6-106d-4763-2149-45952774fbb8.png)

f.[条件抽出]ノードを配置します。編集はせず設定はブランクにしておきます。
![スクリーンショット 2023-04-03 14.51.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/0653bf50-a627-c79b-1a26-dcec71172549.png)

### Modelerスクリプトでループを設定する

![スクリーンショット 2023-04-03 15.21.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f65a764e-c8db-7614-a679-42301f4898d4.png)

Pythonモードで以下のようにスクリプトを記述します。[このスクリプトを実行]を選択します。
![スクリーンショット 2023-04-03 14.54.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f084d40f-4c17-19e1-a656-dad33d54365b.png)

```python:pythonスクリプト
stream = modeler.script.stream()

cate= stream.findByType("select",None)

num = 1
while num <= 3 :
    cate.setPropertyValue("condition",u"index = "+ str(num) )
    num = num + 1
    stream.findByType("table",None).run(None)	

```

### ループ処理を実行する

画面の▶︎ボタンを押すと３つのテーブルが連続して表示されます。

![スクリーンショット 2023-04-03 14.56.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/611d544e-302a-cf00-f854-d303ad22a8bd.png)

#### 注意事項

ModelerでPythonスクリプトを用いるとき、日本語Shift-JISのノードラベルや文字列を指定する場合はご注意下さい。「u”レコード集計”」のように「u」を先頭につける必要があります。

## 4.参考情報

#### Modelerスクリプトについて解説した記事

https://community.ibm.com/community/user/blogs/yoichiro-nishimaki/2024/12/23/spss-modeler-01

https://qiita.com/kawada2017/items/d3fcbe5a182d0c54e1de

https://qiita.com/tags/modelerscript

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008