欠損値を最小値/最大値で全行/カテゴリ毎に置換する(SPSS Modeler データ加工逆引き5-4)

# 欠損値を最小値/最大値で全行/カテゴリ毎に置換（欠損値の補完）
![スクリーンショット 2022-07-06 10.21.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f3d24a8b-a347-7560-fb6c-c2ca1c693a48.png)

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

・顧客属性データの補完
・需要予測のための欠損値の処理
・設備IoTデータの欠損値の処理

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

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

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

#### ①全行に同じ統計量を置換する

![スクリーンショット 2022-07-06 10.27.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/2c867f44-8e99-f4a5-c8e6-e198562d64a8.png)

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

![スクリーンショット 2022-07-06 10.38.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/50eaa191-6ee1-1797-a6ec-03ff6d659f98.png)

b.[置換]ノードを編集します。欠損値（ヌル値）の場合[25.2]という値の置換えをしています。この値は
右の電卓ボタンで式ビルダを起動して選択しています。
![スクリーンショット 2022-07-06 10.28.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/da0fe713-fe55-b59d-2ec2-ce23d3f4becb.png)

式ビルダーの[フィールド]を[値]にしてから赤枠のボタンを押すと青枠の値の挿入ダイアログが現れます。
ここでこの時点での値の最小値が挿入できます。
![スクリーンショット 2022-07-06 10.29.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/67864d57-334f-08b1-da78-da8b96f7cbbd.png)

[プレビュー]します。完成しましたが、この方法は元データが固定されている必要があります。
![スクリーンショット 2022-07-06 10.30.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/5feb9fa6-7483-285e-e66a-cdf0cb9fa5af.png)

c.バッチ処理などの自動化を意識した場合には[グローバルの設定]が有効です。あらかじめ[実行]ボタンを押して統計量をセッション中のみ記憶（キャッシュ）させる方法です。
![スクリーンショット 2022-07-06 10.32.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f9119fea-a2db-87ef-123d-cc196df44927.png)

d.[置換]ノードを編集します。欠損値（ヌル値）の場合には、キャッシュされている統計量（ここでは最小値）を関数@&#xFFF0;GLOBAL_MIN(フィールド)で呼び出します。
![スクリーンショット 2022-07-06 10.32.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/b14a6a51-e94b-7e7f-d958-b561d5903731.png)

#### ②カテゴリ（種別）毎に統計量を置換する

![スクリーンショット 2022-07-06 10.33.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/0966934f-45cb-3fa4-c281-826e671251ca.png)

e.[レコード集計]ノードを編集します。
![スクリーンショット 2022-07-06 10.34.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/11de25f9-6405-7cda-f5ff-ab2a5ddf57b1.png)

[プレビュー]します。種別毎に最大値が求められました。
![スクリーンショット 2022-07-06 10.35.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/31154c26-7848-1540-5899-e88eb46108d3.png)

f.[レコード結合]ノードを編集します。[種別]をキーにして内部結合します。
![スクリーンショット 2022-07-06 10.35.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/e79e6442-c7e5-74d5-e1f5-4041fb91119d.png)

[プレビュー]します。元のテーブルにaからcまでの最大値フィールドが繋がりました。
![スクリーンショット 2022-07-06 10.35.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/87fba735-58e4-97b4-ed75-5bf9a00cd3ee.png)

g.[置換]ノードを編集します。値が欠損値（ヌル値）の場合には該当する最大値で置換します。
![スクリーンショット 2022-07-06 10.36.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/fa9d8ed4-a245-f85e-6c7a-98d2a28d01bb.png)

[プレビュー]します。完成しました。手動でフィールド（列）の順序を変えてありますが、[フィールド順序]で固定化して[フィルター]を利用して[値_MAX]を排除するとテーブルの置き換えが完了します。
![スクリーンショット 2022-07-06 10.37.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/a2c60383-dd38-afd9-e2cb-1b1ae1bbacc4.png)

#### 注意点

[グローバルノード]は最初に実行する必要があります。CADSによるバッチの場合、スクリプトからそれを制御します。

bの[置換値]に@&#xFFF0;MIN(値)でも結果的に同じ結果になりますが、この関数は受け取ったレコードまでの（上方の）値の平均を意味します。

## 4.参考情報

#### [グローバルの設定]ノードの解説記事

https://www.ibm.com/blogs/solutions/jp-ja/spssmodeler-push-node-12/

https://qiita.com/416nishimaki/items/c2df811b51166f6d6173

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

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

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

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