みなさん、こんにちは。IBMの河田です。SPSSやWatson Studioのテクニカル・セールスをしています。
さて今回は、Modelerの中でPythonやRを使うことができる「拡張ノード」を使っていきたいと思います。
拡張ノードとは
拡張ノードとは、ModelerからPythonやRなどのデータサイエンスで人気のスクリプト言語を呼び出すことができる機能です。
Modelerは豊富な標準機能をもっているので、ほとんどのことはModelerで完結しますが、標準機能でもっていないアルゴリズムやサポートしていないデータソース接続などをPythonやRで補えるのがこの「拡張ノード」です。
「拡張ノード」には、インポート、変換、モデル、出力、エクスポートの5種類が用意されています。

主な用途としては以下のようなことが考えられます。
「インポート」と「エクスポート」
・ サポートしていないデータベースへの接続
・ 特殊形式ファイルからの読み出し書き出し(例:複雑なJSON、バイナリファイル)
・ Webサービスからデータ取り込み、書き込み(例:天気、株価、Google,TwitterなどのSNS、Amazonから商品や価格情報)
「変換」
・ 特徴量生成
・ 正規表現による加工
・ テキスト処理。分かち書き、ベクトル化(例:TD-IDF、Word2VEC)
「モデル」
・ 未サポートのアルゴリズムの利用(例:LightGBM, prophet)
「出力」
・ Modelerでサポートしていないグラフ出力(例:相関行列ヒートマップ)
・ 地図出力
実際につくられた例は以下で集めて紹介しています。
SPSS ModelerのPython拡張ノード関連記事へのリンク - Qiita https://qiita.com/kawada2017/items/055ace72f9e1949004f3
SPSS ModelerのR拡張ノード関連記事へのリンク - Qiita https://qiita.com/kawada2017/items/131d7769ecb44043556e
R拡張ノードの使い方
以下の内容を動画でも説明しています!
事前設定
1.R導入
Modelerのバージョンに対応したバージョンのRを導入します。
2.Essentials for Rを導入します。
パスポート・アドバンテージにログオンして、対応するバージョンのご利用のOSのIBM SPSS Modeler - Essentials for R をダウンロードして、導入します。
3.必要なライブラリを追加
利用したいRのパッケージをRのコンソールから導入します。
詳細は以下の記事を参考にしてください。
SPSS Modelerの拡張ノードでRを利用する - Qiita https://qiita.com/kawada2017/items/0bb68e0b577e02bb8c6a
サンプル実行
ここでは「拡張の出力」ノードを使ってみます。Rのleafletというパッケージを使って、Modelerのデータを地図にプロットします。
サンプルストリームはこちらです。
https://github.com/hkwd/spsssample/raw/master/220316leaflet/220316leaflet.str
まず、Rコンソールから以下のコマンドで'leaflet'のパッケージを導入しておいてください。
install.packages('leaflet',dependencies = TRUE)
今回用意したデータは以下です。店舗ごとに緯度経度と売上が記録されています。

このデータに「拡張の出力」ノードを接続し、シンタックスとしてRを選び、Rシンタックスの入力欄にRのコードを入力し、実行します。

以下のように各店舗の売り上げサイズが地図に表示されます。

詳細は以下の記事をご覧ください。
Rのleafletを使ってSPSS Modelerのデータを地図にプロットする - Qiita https://qiita.com/kawada2017/items/3b40b0fc595482deeb66
Python拡張ノードの使い方
以下の内容を動画でも説明しています!
事前設定
一般的には以下の二つの手順が必要です。
1.Python導入
Modelerに含まれているPythonがデフォルトで使えますが、ライブラリの追加などのカスタマイズを行いたいと思いますので、別に導入することがおすすめです。
2.Options.cfgのeas_pyspark_python_path に設定
導入したpythonのパスを指定します。
3.Pythonに必要なライブラリを追加
利用したいPythonのパッケージをpipコマンドやcondaコマンドで導入します。
詳細は以下の記事を参考にしてください。素のpythonとanacondaで手順が若干異なります。
SPSS Modelerの拡張ノードでPythonを利用する ①セットアップと可視化 -
https://qiita.com/1000aki/items/72c3c9ea0fe00edd6d19
SPSS Modelerの拡張ノードでPythonを利用する conda編 - Qiita https://qiita.com/kawada2017/items/04f525727725d199723c#5-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB
使い方
ここでは「拡張モデル」ノードを使ってみます。PythonのLightGBMというパッケージを使って、ModelerでLightGBMのモデルを作ります。
サンプルストリームはこちらです。
https://github.com/hkwd/210224PythonExtension/raw/master/lightgbm/210323lightgbm.str
まず、コンソールから以下のコマンドでlightgbmのパッケージを導入しておいてください。
python -m pip install lightgbm
今回はサンプルでついている以下のデータを使います。AgeやIncome、Credit_cards, Education, Car_loansからCredit_ratingを予測するモデルを作ります。

「拡張モデル」ノードを接続し、シンタックスとしてPython for Sparkを選び、「Pythonモデル作成シンタックス」と「Pythonモデルスコアリングシンタックス」の入力欄にpythonのコードを入力し、実行します。

モデルナゲットが作成され、「Pythonモデルスコアリングシンタックス」に「拡張モデル」で書いたスクリプトがコピーされています。

指定したパスにpkl形式でモデルが作成されています。

テーブルノードをつないで実行すると以下のように予測結果がスコアリングされます。

詳細は以下の記事をご覧ください。
LightGBMをSPSS Modelerで使用する - Qiita https://qiita.com/kawada2017/items/b75cd4191ba90b91983b
注意点
RとPythonの違い
RとPythonの二つが選べますが、違いを比べると以下のようになります。基本的には使いたい機能がある言語、慣れた言語を選んでいただくのがよいと思いますが、Pythonの方がやや重いため、まずはRで実現することを検討するのがよいと思います。
|
R
|
Python
|
パフォーマンス
|
軽量
|
Sparkのオーバーヘッドがあるためやや重い
|
グラフ出力
|
可能
|
可能だが、ストリームが終了しない
|
導入
|
Essentials for RとRの導入必須
|
Pythonを導入することがおすすめだが、デフォルトのままでも使える
|
カスタムノード
「拡張ノード」はスクリプトをノードの中に書き込むので、プログラムになじみのないユーザーにはやや敷居が高く感じられるかもしれません。プログラムをカプセル化して、オリジナルのノードを作ってしまうのがカスタムノードです。拡張機能のメニューから「カスタムノードダイアログビルダー」を起動して作ることができます。

以下のようなエディターでオリジナルのノードを作ることができます。

カスタムノードをつくればModelerのユーザーとしてはプログラムを意識する必要がなくなります。
一方でストリームを共有したり、配布する際にはカスタムノードのファイルも一緒に共有、配布する必要があり、特に修正した場合などの面倒が増えることには気を付ける必要があります。
その他注意点
・「拡張ノード」はSQLプッシュバックが効きません。
「拡張のインポート」ノードでRDB接続するノードをつくっても、SQL文はプログラム内に書く必要があります。また、「拡張の変換」ノードも、そのノード以降の処理はSQLプッシュバックの対象外になります。なるべくSQLプッシュバックが終わった後に配置することが、パフォーマンスの観点からは重要です。
・コード作成やデバッグ
「拡張ノード」のスクリプト入力エリアは単なるテキスト入力の機能しかありません。コード作成やデバッグは、可能な限りRやPythonの専用エディターで行って起き、できたものをコピーペーストで貼り付けてからインターフェースを書き足すのが効率が良いと思います。
・Modelerスクリプトとの違い
ModelerスクリプトでもPythonを使えます。ModelerスクリプトはModelerでノードのプロパティを変更したり、実行したりというModelerの操作を自動化するスクリプトです。「拡張ノード」は、Modelerで扱うデータに対するモデル作成や加工などの操作が目的です。
行いたい操作によって使い分けたり、組み合わせてつかったりしてもらえればと思います。

まとめ
今回は、「拡張ノード」で、PythonやRの機能をModelerに取り込んでしまう方法を紹介しました。プログラミングをしなくても様々なデータ加工や分析ができることが、Modelerのメリットですが、PythonやRを一部利用することで、ぐっと活用範囲が拡大し、さらに便利にお使いいただけることを感じていただけたら幸いです。
また、作ったスクリプトや処理は、ちょっとしたものであっても皆さんの役に立つことがよくあります。ぜひ公開してシェアしていただけるとありがたく思います。
→SPSS Modelerの詳細についてはこちら
→これまでのTipsブログ連載のバックナンバーはこちらから