3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-01-11

#0. はじめに
SPSS Modelerでは一般的に分析で利用される各種機能が提供されていますが、RやPythonの機能も使いたいケースがあると思います。
SPSS Modelerの拡張ノードを利用することで、SPSS ModelerからRやPythonを実行することができます。

今回はPython連携を試します。
R連携を試す場合は、@kawada2017さんの SPSS Modelerの拡張ノードでRを利用する で紹介されています。

SPSS Modeler 拡張ノードで Python 利用時に注意が必要な点として、入出力データを Spark DataFrame 形式で取り扱う点があげられます。
もちろん、処理の中で Spark DataFrame を pandas Dataframe 等に変換することで、pandasのメソッドを利用したデータ加工や、matplot/seabornといったライブラリによる可視化も可能です。

■テスト環境
SPSS Modeler 18.2.2
Windows 10
Python 3.7.7

#1. Python 3.7.x の導入

SPSS Modeler 18.2.2には、製品に同梱のPython 3.7.7が存在しますが、別途、ユーザーが独自にインストールしたPython環境を利用することも可能です。

追加でライブラリを導入することも想定し、今回は独自のPythonインストール済み環境を利用します。
この記事の作成時点では、Modeler18.2.2でPython 3.7.x がサポートされています。
最新のサポート状況は、マニュアルをご確認ください。

Python for Spark を使用したスクリプト
https://www.ibm.com/support/knowledgecenter/ja/SS3RA7_18.2.2/modeler_r_nodes_ddita/clementine/r_pyspark_api.html

1. Python 3.7.x インストーラーのダウンロード

以下のリンク先より、3.7.x のインストーラーをダウンロードします。
https://www.python.org/downloads/

2. Python 3.7.x インストーラーの実行

インストーラーを管理者として起動し、Customization Installを選択します。
image.png

Optional Featureはデフォルトのまま変更せず、次へ進みます。
image.png

Install for all users をチェックし、Installを押下します。
この時、install location も控えておきます。例では、C:\Program Files\Python37 です。
image.png

Pythonのインストールが完了したら、Pythonのバージョンを確認します。
Powershellを起動し、下記コマンドを実行します。

cd <python_install_location>
python -v
実行例
PS C:\Users\Administrator> cd "C:\Program Files\Python37"
PS C:\Program Files\Python37> python -V
Python 3.7.7

3. Python 追加ライブラリの導入
任意のPythonライブラリを導入します。
例では、numpy, pandasと、可視化用にmatplotlib, seabornを導入しています。

python -m pip install <ライブラリ名>
実行例
PS C:\Program Files\Python37> python -m pip install numpy, pandas, matplotlib, seaborn
Collecting numpy
  Downloading https://files.pythonhosted.org/packages/5f/a5/24db9dd5c4a8b6c8e495289f17c28e55601769798b0e2e5a5aeb2abd247b/numpy-1.19.4-cp37-cp37m-win_amd64.whl (12.9MB)
(略)
Successfully installed ~ (略)

#2. SPSS Modeler用に 独自の Python インストール済み環境を指定

メモ帳などで options.cfg を開きます。options.cfg のデフォルトのパスは下記です。
C:\Program Files\IBM\SPSS\Modeler\18.2.2\config\options.cfg

eas_pyspark_python_path に python.exe のパスを指定し、上書き保存します。

options.cfg
# Set to the full path to the python executable (including the executable name) to enable use of PySpark.
eas_pyspark_python_path, "C:<python_install_location>\\python.exe"
記載例
# Set to the full path to the python executable (including the executable name) to enable use of PySpark.
eas_pyspark_python_path, "C:\\Program Files\\Python37\\python.exe"

サービスより SPSS Modeler 18.2.2 を再起動し、変更を反映します。

image.png

3. SPSS Modelerでの動作確認

動作確認用のデータセットとして、irisのデータセットをダウンロードします。
https://github.com/mwaskom/seaborn-data/blob/master/iris.csv

SPSS Modeler を起動し、可変長ノードを追加、iris.csvを読み込みます。
image.png

出力タブから拡張の出力ノードを選び接続します。
image.png

拡張の出力ノードのプロパティを開き、Python for Spark のシンタックスへ以下のコードを記載し、実行します。
ライブラリseabornを利用し、ペアプロット図(散布図行列)を出力する内容です。
シンタックスの詳細は後述します。
実行完了までに、数分かかる場合があります。

シンタックス
import spss.pyspark.runtime

ascontext = spss.pyspark.runtime.getContext()

import numpy
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

indf = ascontext.getSparkInputData()
sns.pairplot(indf.toPandas(), hue='species')
plt.show()

image.png

実行が完了すると、以下のようにPythonのウィンドウでペアプロット図(散布図行列)が表示されます。
各変数間の関係をまとめて確認することができます。
Rの場合、拡張出力ノード内のグラフ出力タブにグラフ出力されるのですが、現状Pythonは対応していないようで、Pythonのウィンドウで表示されます。
image.png

<ご参考> Rの拡張出力ノードでグラフ出力した例
@kawada2017さんの SPSS Modelerの拡張ノードでRを利用するより引用
image.png

ちなみに、Pythonのウィンドウでグラフを表示している間、下記のように常にストリームが実行中となっています。
ストリーム処理を完了させるために、Pythonのウィンドウを閉じる必要があります。
image.png

Pythonでも、Rのように拡張出力ノード内グラフ出力タブへのグラフ出力がサポートされると良いと思いましたので、新機能のアイデアとして投稿してみました。
ご賛同いただける方がいっらやしましたら、下記URLより、Voteをクリックして投票いただけますと幸いです。
機能の開発が確約されるものではありませんが、投票数が多いと検討対象となります。

Extension Output Node for Python with Graph Output tab like R
https://ibm-data-and-ai.ideas.aha.io/ideas/MDLR-I-329

(補足) Python for Spark のシンタックスについて

拡張の出力ノードに記載したシンタックスについて補足します。

SPSS Modeler 拡張ノードでの Python 利用時、入出力データを Spark DataFrame 形式で取り扱うことが必要です。
また、SparkのAPIを直接実行するのではなく、SPSS Modelerが提供するラッパー Analytics Serverコンテキストのインターフェースを経由することが必要です。

下記のシンタックス全体のうち、各パートに分けて説明します。

(再掲)シンタックス全体
import spss.pyspark.runtime

ascontext = spss.pyspark.runtime.getContext()

import numpy
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

indf = ascontext.getSparkInputData()
sns.pairplot(indf.toPandas(), hue='species')
plt.show()

まず、前半です。
これらの内容は、拡張ノードでPythonを取り扱う際、常に記述が必要な内容となります。
Analytics Server対話用のライブラリ spss.pyspark.runtimeをインポートします。
変数 ascontext へ、Analytics Serverコンテキストオブジェクトを定義します。

シンタックス前半
import spss.pyspark.runtime # Analytics Serverコンテキスト処理用ライブラリ読込

ascontext = spss.pyspark.runtime.getContext() # Analytics Serverコンテキストオブジェクトの定義

後半のペアプロット図 作成処理です。
一般的にPythonでseabornを利用する際のシンタックスとほぼ同様の流れですが、dataframeの変換処理などを追加で実施しています。

まずindfという変数へ、前のノードからのデータが格納されます。
今回の場合、iris.csvで読み込んだデータが、Spark Dataframe形式で格納されます。

次に seaborn でペアプロット図の作成を行います。
seabornは、Spark Dataframeをそのまま受け取ることができないため、pandas Dataframeに変換して渡します。
Spark Dataframe から pandas Dataframeへの変換は、toPandas()メソッドで実現できます。

最後に、plt.show() でペアプロット図を表示します。

シンタックス後半
import numpy
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

indf = ascontext.getSparkInputData() # iris.csvデータの読込
sns.pairplot(indf.toPandas(), hue='species') # indf.toPandas()で、pandas Dataframeに変換したデータを、seabornに渡す。hueで色分けにspeciesを指定。
plt.show() # 図を表示

参考

Analytics Serverコンテキストに関する詳細は、下記をご確認ください。

Python for Spark を使用したスクリプト
https://www.ibm.com/support/knowledgecenter/ja/SS3RA7_18.2.2/modeler_r_nodes_ddita/clementine/r_pyspark_api.html

Analytic Server コンテキスト
https://www.ibm.com/support/knowledgecenter/ja/SS3RA7_18.2.2/modeler_r_nodes_ddita/clementine/r_pyspark_api_context.html

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?