Modelerスクリプトで複数ファイルを加工して結合する(SPSS Modeler データ加工逆引き9-15)

# 複数ファイルを加工して結合する（Modelerスクリプトによるループ処理）

![スクリーンショット 2023-04-06 13.19.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/e677a594-b632-4b09-372f-9f93d89c206c.png)

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

・同じような処理を効率的に実施するためPythonスクリプトを利用してループさせる
・IoTセンサーデータのような日毎ファイルから特徴量を抽出して分析用テーブルを作成する

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

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

サンプルデータ1(右クリックでダウンロード)
https://raw.githubusercontent.com/yoichiro0903n/blue/main/1.csv

サンプルデータ2
https://raw.githubusercontent.com/yoichiro0903n/blue/main/2.csv

サンプルデータ3
https://raw.githubusercontent.com/yoichiro0903n/blue/main/3.csv

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

![スクリーンショット 2023-04-06 13.20.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/ad71b835-b4b0-1b87-9a94-e98294d9fbf7.png)

a.[可変長ファイル]ノードを編集します。サンプルの３つのうち、ストリーム設計には[1.csv]を利用します。

![スクリーンショット 2023-04-06 13.58.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/0939887e-12c5-52ad-e54b-bf58dda48ece.png)

データは以下の通りです。顧客の取引明細データです。

![スクリーンショット 2023-04-06 14.38.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/8cadf199-6122-d21b-5505-06afbcb7394f.png)

[データ型]タブで[値の確定]ボタンを押しておきます。後続dで大分類のメンバーを認識させるためです。
![スクリーンショット 2023-04-06 13.58.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/7e79d3aa-07c1-7c12-5eb5-12fd3153933d.png)

### 顧客の日毎の情報に要約する（特徴量を生成する）

b.[レコード]ノードを編集します。
![スクリーンショット 2023-04-06 13.50.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/a47e9bf2-1793-f243-20e9-60f95705463c.png)

c.[レコード]ノードを編集します。この２段階集計でカテゴリ数(大分類数)をカウントできます。
![スクリーンショット 2023-04-06 13.50.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/9b4bb50e-90a3-4be1-2d79-8fc264f419ad.png)

d.[フラグ設定]ノードを編集します。
![スクリーンショット 2023-04-06 13.51.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/ff96b540-50b8-740b-23d7-390eb95eca02.png)

e.[レコード結合]ノードを編集します。
![スクリーンショット 2023-04-06 13.51.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/646a3351-cdb9-4c0b-9c2a-04a10d153777.png)

[プレビュー]します。ループの1回目で記録されるデータです。
![スクリーンショット 2023-04-06 14.49.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/ac2e19d2-9a53-fec7-a0a4-384c665d5b0c.png)

f.[フラットファイル]ノードを編集します。赤枠のように出力するテキストファイル名称とパスを記述します。青枠はチェックを入れて実行するとノードgが自動生成されます。ノードが生成されたら青枠チェックを外しておきます。
![スクリーンショット 2023-04-06 14.53.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/3f3a69be-2520-3ed3-ad13-10823e544090.png)

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

以下のメニューからスクリプト画面を開きます。
![スクリーンショット 2023-04-06 15.02.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/7bb9a306-2ce6-a9c3-bd3a-4186d543e43b.png)

Pythonモードで以下のようにスクリプトを記述します。[このスクリプトを実行]を選択します。
![スクリーンショット 2023-04-06 14.59.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/ca39a922-45a6-c472-e6fc-84c74a8d3b99.png)


```python:pythonスクリプト
stream = modeler.script.stream()
data = stream.findByType("variablefile",None)
output = stream.findByType("outputfile",None)


num = 1
while num <= 3 :
    data.setPropertyValue("full_filename", u"/Users/aa517821/Desktop/" + str(num) + ".csv")
    if num == 1:
     output.setPropertyValue("write_mode", "Overwrite")
    else:
     output.setPropertyValue("write_mode", "Append")
    stream.findByType("outputfile",None).run(None)	
    num = num + 1

stream.findByType("table",None).run(None)	



```

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

画面の▶︎ボタンを押すと３つのファイルが順番に加工処理され同じテーブルに統合して表示されます。

![スクリーンショット 2023-04-06 15.05.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/e6cb3bc4-1bb9-4178-12bb-336ed2d0b3f2.png)


#### 注意事項

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

今回はファイル名を番号にしてループしやすくしています。OSコマンドで複数のファイルをリネームすると事前の準備が楽になります。

## 4.参考情報

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

https://www.ibm.com/blogs/solutions/jp-ja/learn-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