SPSS Modelerで相関行列を見たい R拡張ノード編

SPSS Modelerで相関行列を見たいという話があり、以前以下の記事も書いています。

SPSS Modelerで相関行列を見たい - Qiita
https://qiita.com/kawada2017/items/a77f14bd0c4351d055a6

しかしながら、いずれも結果を加工したり、エクスポートしたりはできませんでした。
そこで今回は拡張ノードをつかってRで実装してみました。これにより結果を加工したり、エクスポートしたりということも可能になります。

# Essentials for R のセットアップ
この方法は拡張ノードでRを利用しますので設定が必要です。設定が終わっていない方は以下を参考にしてください。

SPSS Modelerの拡張ノードでRを利用する - Qiita
https://qiita.com/kawada2017/items/0bb68e0b577e02bb8c6a

#拡張の変換ノードにRのコードを入力
以下のように拡張の変換ノードでR言語を選択し、Rシンタックスに以下のコードを入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/6165e521-533e-2de5-f637-a64fd2270e9f.png)

```r
#相関行列取得
cormat =cor(modelerData)

modelerData<-cbind(data.frame(COLNM=rownames(cormat)),cormat)
#modelerData

#メタデータ設定
modelerDataModel<-data.frame(X1=c(fieldName='COLNAME',fieldLabel="",fieldStorage="string",fieldMeasure="",fieldFormat="",fieldRole=""))

for (x in colnames(cormat) ){
newVar <- c(fieldName=x,fieldLabel="",fieldStorage="real",fieldMeasure="",fieldFormat="",fieldRole="")
modelerDataModel <- cbind(modelerDataModel,newVar)
}
#modelerDataModel
```


これで相関行列を作りたい数値型の列のみの以下のようなデータをフィルターノードでつくって、この拡張変換ノードを通します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/6c13ca0b-92a3-789f-6e35-b054e68914ce.png)

すると以下のような相関行列が返ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/06e48f7a-0a13-59ef-e2ab-7ad328c14625.png)

変換ノードにしたのでエクスポートも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/339af7a0-8123-384d-c3a6-2d1f1e8aa6d8.png)

また、加工も可能です。例えば、以下のようなことを行えば相関係数が0.3以下のデータをNULLに置き換えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/156514b0-48d5-d497-7623-d2a119ffb5bc.png)

相関係数が0.3より大きいものを見つけやすくなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/647d626e-2246-59d4-7840-d0cb71ad6475.png)

# コード解説
簡単にコードも解説しておきます。

```r
#相関行列取得
cormat =cor(modelerData)
```
上でこのノードに入るデータで相関行列を作っています。
ですので、文字列型のデータなどが混じっているとエラーになります。

```r
modelerData<-cbind(data.frame(COLNM=rownames(cormat)),cormat)
```

上で、行名に入っている列名を一列目につけて返しています。以下の赤で囲った部分です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/c77c258c-1733-89e7-ebf8-9d70d16ccad5.png)



```r
#メタデータ設定
modelerDataModel<-data.frame(X1=c(fieldName='COLNAME',fieldLabel="",fieldStorage="string",fieldMeasure="",fieldFormat="",fieldRole=""))
```
上でこの列のメタデータを設定しています。以下の赤で囲った部分です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/94761d5e-8aea-1603-39c5-549ef6075687.png)

```r
for (x in colnames(cormat) ){
newVar <- c(fieldName=x,fieldLabel="",fieldStorage="real",fieldMeasure="",fieldFormat="",fieldRole="")
modelerDataModel <- cbind(modelerDataModel,newVar)
}
```
上で相関ととった列名のメタデータを設定しています。以下の赤で囲った部分です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/8a93ce31-91e0-2027-e685-b6604183669d.png)

サンプルのストリームファイルは以下で公開しています。

https://github.com/hkwd/spsssample/raw/master/200423%E7%9B%B8%E9%96%A2%E8%A1%8C%E5%88%97R%E6%8B%A1%E5%BC%B5%E3%83%8E%E3%83%BC%E3%83%89/200423%E7%9B%B8%E9%96%A2%E8%A1%8C%E5%88%97R%E6%8B%A1%E5%BC%B5%E3%83%8E%E3%83%BC%E3%83%89.str

テスト環境
Modeler18.2.1
Windows 10 64bit