欠損値を周囲中央値で置換する(SPSS Modeler データ加工逆引き5-14)

# 欠損値を周囲中央値（スパン2）で置換する

![スクリーンショット 2023-04-19 9.15.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c43539e5-2012-1efc-b557-7992aa8b95a5.png)

＊時系列ストリーミングノードやStatistics変換によっても実現可能ですが、加工ノードの組み合わせで実現する方法を紹介します。

https://qiita.com/416nishimaki/items/11d1581bef7fff2a9ede#:~:text=%E5%8F%82%E7%85%A7%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82-,%E6%AC%A0%E6%90%8D,-%E5%80%A4%E3%81%AE%E7%B7%9A%E5%BD%A2


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

・突発的な異常値が想定される欠損レコードの補間

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

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

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

![スクリーンショット 2023-04-19 9.05.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/0f91db36-681a-3d64-a109-ee7f3067d621.png)

a.入力するデータは以下の通りです。
![スクリーンショット 2023-04-19 9.07.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/122afac5-b13f-7d1a-796e-ea926ec3aed5.png)

b.[条件抽出]ノードを編集します。欠損値を意図的に破棄します。@&#xFFF0;NULL（フィールド）でフィールド=欠損の状態を表します。
![スクリーンショット 2023-04-19 9.16.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/700a9f2f-60dd-36e4-2b77-78a5b7557ca6.png)

c.[フィールド作成]ノードを編集します。@&#xFFF0;OFFSET(フィールド,1)でフィールドの1レコード上(1期前)を参照します。
![スクリーンショット 2023-04-19 9.17.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/21112918-26ef-07e6-ae00-66e7a220300c.png)

[プレビュー]します。
![スクリーンショット 2023-04-19 9.17.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/012342c4-e53e-ea0a-6a1c-0c7e04e74999.png)

d.1期後を参照するために@&#xFFF0;OFFSET(フィールド,-1)でCと同じものを作成します。

e.2期後を参照するために@&#xFFF0;OFFSET(フィールド,-2)でCと同じものを作成します。

f.[フィールド作成]ノードを編集します。①1レコード前②現在のレコード③１レコード後④2レコード後の４つのメンバーから最小と最大を排除して、残る二つの平均を計算し中央値を求めます。
![スクリーンショット 2023-04-19 9.19.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/ae6939cc-5b43-e88e-13bd-707f80e49452.png)

[プレビュー]します。
![スクリーンショット 2023-04-19 9.20.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/dd82bad0-2629-7384-542e-1469ab45ca5d.png)

g.[レコード結合]ノードを編集します。完全外部結合でキーを[日付]と[最高気温]にします。
![スクリーンショット 2023-04-19 9.20.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/89dd3a65-2554-cc6b-6e06-9523b2c516ee.png)

h.[データ型]ノードを編集します。[欠損値]項目をオンにします。
![スクリーンショット 2023-04-19 9.21.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c5dd01f5-65c8-c47f-a574-08b6883e774c.png)

i.[フィールド作成]ノードを編集します。@&#xFFF0;LAST_NON_BLANKで欠損値には直前の値を代入します。
![スクリーンショット 2023-04-19 9.22.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/2478daec-5b44-6cf2-291d-0bc519da9b98.png)

[プレビュー]します。
![スクリーンショット 2023-04-19 9.22.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/df8da6d4-6730-49bd-81d0-acf7822e1300.png)

j.[フィールド作成]ノードを編集します。
![スクリーンショット 2023-04-19 9.23.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d52a7267-89b6-5a5d-066c-52e9b881b1b6.png)

[テーブル]を実行します。
![スクリーンショット 2023-04-19 9.23.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/98f2ab31-d913-241c-afa5-92359601dd05.png)

#### 注意点

スパン２でストリームを作成しましたが、スパンの長さに応じてノードや関数を変更します。また時系列の開始や終了は関数の整合性が保たれているかを注意します。

## 4.参考情報

#### 空白に直前の値を代入する

https://qiita.com/416nishimaki/items/6375bb9475f258f4f376

#### Statisticsの加工機能で周囲中央値による欠損の補間を行う

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

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

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

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

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