SPSS Modelerの拡張ノードでPythonを利用する（ミニマム設定）

# ０．はじめに
SPSS Modelerは一般的に利用される豊富な機能を持っていますが、RやPythonの機能を使いたいこともあります。SPSS Modelerには拡張ノードという機能があり、SPSSからRやPythonを呼び出すことができます。
今回はPython連携を行ってみたいと思います。
以下の記事でも詳しく説明されていてSeabornのグラフの表示までを行っていますが、ここではミニマムの設定で利用してみたいと思います。

SPSS Modelerの拡張ノードでPythonを利用する ①セットアップと可視化 - Qiita 

https://qiita.com/1000aki/items/72c3c9ea0fe00edd6d19


■テスト環境
SPSS Modeler 18.4
Windows 11
SPSS Modeler Server 18.4
Windows Server 2019
Python 3.8.10

■サンプルストリーム

https://github.com/hkwd/spsssample/raw/master/230116PythonExtension/Python%E6%8B%A1%E5%BC%B5%E3%83%8E%E3%83%BC%E3%83%89%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88.str

# 1．拡張ノードの実行
まず、最小限の実行確認をしてみます。

「ユーザー入力」ノードで一列一行だけのデータを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e9797a9b-3fe6-8ec1-5d0c-cf042876065b.png)

「拡張の出力」ノードを接続し、スクリプトの種類を「Python for Spark」に変更し、「Python シンタックス」の欄に以下のスクリプトを記述して実行します。
```python:バージョン出力
import sys
print(sys.version)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/c02ca78e-1bcb-9976-f74b-879dc741a612.png)

以下のような結果が返ります。Python 3.8.6が動作したことが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/ad70e2cf-8d8c-5fe7-d536-114385425612.png)

# 2．Pythonの導入
1ではModelerにデフォルトで付属しているpythonをつかって実行しました。
しかしながら、追加でパッケージなどを導入することなどを考えると、Pythonは別に入れたものをつかうことをお勧めします。

この記事ではSPSS Modeler 18.4とPython 3.8.10の組合せで導入していきますが、ModelerがサポートするPythonのバージョンはModelerのバージョンによって異なります。[System Requirement](https://qiita.com/kawada2017/items/a1a8c639fc8f6c53e3b6)で確認して、お使いのModelerバージョンに合わせて、適切な組み合わせで導入をしてください。

|Modelerのバージョン|サポートされるPythonバージョン|
|--|--|
|[18.0.0.0](https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=D44C8050EEA711E4989B60FF8B09BCE8&osPlatforms=AIX&#124;Linux&#124;Mac%20OS&#124;Windows&duComponentIds=D002&#124;S001&mandatoryCapIds=13&optionalCapIds=7&#124;47&#124;22&#124;72&#124;186&#124;223&#124;26)|未サポート|
|[18.1.0.0](https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=D08EF250C1D611E6BE9C4E8BFBBFA45B&osPlatforms=AIX&#124;Linux&#124;Mac%20OS&#124;Windows&duComponentIds=D002&#124;S001&mandatoryCapIds=13&optionalCapIds=7&#124;47&#124;22&#124;72&#124;186&#124;223)|2.7|
|[18.1.1.0](https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=D08EF250C1D611E6BE9C4E8BFBBFA45B&osPlatforms=AIX&#124;Linux&#124;Mac%20OS&#124;Windows&duComponentIds=D002&#124;S001&mandatoryCapIds=13&optionalCapIds=7&#124;47&#124;22&#124;72&#124;186&#124;223)|2.7|
|[18.2](https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=53CCF0E096BF11E88DA21ABFB868B416&osPlatforms=AIX&#124;Linux&#124;Mac%20OS&#124;Windows&duComponentIds=D001&#124;S002&mandatoryCapIds=13&optionalCapIds=7&#124;47&#124;22&#124;72&#124;186&#124;223)|2.7|
|[18.2.1](https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=17B6B0E013E811E9BABD512A6952EE1F&osPlatforms=AIX%7CLinux%7CMac%20OS%7CWindows&duComponentIds=D001%7CS002&mandatoryCapIds=13&optionalCapIds=7%7C47%7C22%7C72%7C186%7C223#)|2.7|
|[18.2.2](https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=2FFFDAC0997D11EA831C92536C37223B&osPlatforms=AIX%7CLinux%7CMac%20OS%7CWindows&duComponentIds=D001%7CS002&mandatoryCapIds=13&optionalCapIds=7%7C47%7C22%7C72%7C186%7C223)|3.7.7|
|[18.3](https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=68E564304EF511EBBBEA1195F7E6DF31&osPlatforms=Linux&#124;Mac%20OS&#124;Windows&duComponentIds=D001&#124;S002&mandatoryCapIds=13&optionalCapIds=7&#124;47&#124;22&#124;72&#124;186&#124;223)|3.8.6+|
|[18.4](https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=0E1C00D07E5C11EC93C02AA4DE91E682&osPlatforms=Linux&#124;Mac%20OS&#124;Windows&duComponentIds=D001&#124;S002&mandatoryCapIds=13&optionalCapIds=7&#124;47&#124;22&#124;72&#124;186&#124;223)|3.8.6+|



Modeler18.4ではPython3.8.6+がサポートされています。

IBM SPSS Modeler 18.4 - Detailed System Requirements 

https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=0E1C00D07E5C11EC93C02AA4DE91E682&osPlatforms=Linux%7CMac%20OS%7CWindows&duComponentIds=D001%7CS002&mandatoryCapIds=13&optionalCapIds=7%7C47%7C22%7C72%7C186%7C223

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/a00464c1-3ea7-1c84-38cd-9b4e7729085d.png)

Pythonの3.8.10の導入については以下の記事を参考にしてください。以下の記事ではZeepも入れていますが、拡張ノードを使う目的としてはZeepの導入は不要です。

Python 3.8 +Zeepの導入 on Windows Server - Qiita 

https://qiita.com/kawada2017/items/2c1eeeff0cdb5923d57f

よく使うパッケージなどを入れておくことをお勧めします。以下は一例です。
```cmd
py -m pip install wheel 
py -m pip install numpy
py -m pip install pandas
py -m pip install scipy
py -m pip install scikit-learn
py -m pip install matplotlib
py -m pip install seaborn
py -m pip install requests
```
なお、spss.pyspark.runtimeなどは導入の必要はありません。


# ２．options.cfgの編集
options.cfgでpythonのパスを指定します。

デフォルトで導入した場合はUsersディレクトリの下にあると思います。
C:\Users\xxxxx\AppData\Local\Programs\Python\Python38
Install for all usersで導入した場合は
C:\Program Files\Python38
にあると思います。

options.cfgで指定する場合にはディレクトリの区切り文字は、\\\\\(半角バックスラッシュ/yenマーク)でエスケープするか、/（半角スラッシュ）で、指定します。

```
# Set to the full path to the python executable (including the executable name) to enable use of PySpark.
eas_pyspark_python_path, "C:/Users/xxxxx/AppData/Local/Programs/Python/Python38/python.exe"
```


# ３．Modelerでの動作確認
先ほどの拡張の出力ノードをつかってもう少し情報を出力してみます。

```python:拡張の出力ノード
import sys
print(sys.version)

print(sys.base_prefix)
print(sys.path)

import numpy as np
print(np.__version__)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/ef47754e-d3cf-327d-f9b8-ca7eadcc6888.png)

バージョン3.8.10で動き、パスがoptions.cfgで指定したPythonが使われていることがわかります。
また、pysparkなどのパッケージがあらかじめ読み込まれていることもわかります。
追加で導入したnumpyも読み込めていました。

```:出力
3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)]

C:\Users\XXXX\AppData\Local\Programs\Python\Python38

['C:\\temp\\MODELE~1\\5F50-5F54-1988-3-cf-1\\24400\\ae\\185b82f7238-e5d95b8d6b055c7f'
 'C:\\Program Files\\IBM\\SPSS\\Modeler\\18.4\\as\\scripts'
 'C:\\Program Files\\IBM\\SPSS\\Modeler\\18.4\\as\\scripts\\com.spss.ibm.pythonscript.zip'
 'C:\\Program Files\\IBM\\SPSS\\Modeler\\18.4\\spark\\python'
 'C:\\Program Files\\IBM\\SPSS\\Modeler\\18.4\\spark\\python\\lib\\py4j-0.10.9.3-src.zip'
 'C:\\Program Files\\IBM\\SPSS\\Modeler\\18.4\\spark\\python\\lib\\pyspark.zip'
 'C:\\Users\\XXXX\\AppData\\Local\\Programs\\Python\\Python38\\python38.zip'
 'C:\\Users\\XXXX\\AppData\\Local\\Programs\\Python\\Python38\\DLLs'
 'C:\\Users\\XXXX\\AppData\\Local\\Programs\\Python\\Python38\\lib'
 'C:\\Users\\XXXX\\AppData\\Local\\Programs\\Python\\Python38'
 'C:\\Users\\XXXX\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages'
 'C:\\Users\\XXXX\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages\\win32'
 'C:\\Users\\XXXX\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages\\win32\\lib'
 'C:\\Users\\XXXX\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages\\Pythonwin']

1.24.1
```

# ４．Modeler Serverでの利用
Modeler Serverでも拡張ノードでPythonを利用する場合、Modeler Server側のPythonが動作します。つまり、Pythonを導入し、パッケージを導入し、options.cfgを編集することを推奨します。
特にパッケージのバージョンが異なると、Modelerクライアントで動いていた拡張ノードがModeler Serverでは動かないことが起きえますので注意が必要です。

Windows ServerへのPythonの3.8.10の導入については以下の記事を参考にしてください。以下の記事ではZeepも入れていますが、拡張ノードを使う目的としてはZeepの導入は不要です。Serverでの導入についてはInstall for all usersの方がよいと思います。パッケージのバージョンをそろえやすくなるからです。「Add Python 3. to PATH」は必須ではないと思います。

Python 3.8 +Zeepの導入 on Windows Server - Qiita 

https://qiita.com/kawada2017/items/2c1eeeff0cdb5923d57f

なお、options.cfgを修正した後はModeler Serverの再起動が必要です。
また、Modeler Serverに接続するユーザーには、Pythonを実行する権限が必要です。

# 参考
#### SPSS ModelerのPython拡張ノード関連記事へのリンク - Qiita 
様々な利用例などがあります。

https://qiita.com/kawada2017/items/055ace72f9e1949004f3

#### ブログで学ぶSPSS_Modeler #05- LightGBMや地図表示！拡張ノードでPythonやＲの機能を取り込む | IBM ソリューション ブログ 
拡張ノードのイントロダクションの記事です。

https://www.ibm.com/blogs/solutions/jp-ja/learn-modeler-05/

#### Python for Spark - IBM Documentation 
マニュアルです。

https://www.ibm.com/docs/ja/spss-modeler/18.4.0?topic=languages-python-spark