1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ネイティブ Python拡張の出力ノード:データとペアプロット図(散布図行列)の表示

Last updated at Posted at 2024-04-12

SPSS Modeler18.5の新機能の ネイティブ Python APIのテストをしてみました。これは、「拡張ノード」のなかでpandasを使ってModelerのデータを読んだり書いたりすることができる機能です。

この記事ではネイティブ Python APIで「拡張の出力ノード」が、どのように利用可能かをテストしてみました。
マニュアルにサンプル・ストリームがついていましたので、これを修正してテストしてみています。

サンプルストリームは以下です。

  • テスト環境
    • Windows 11 64bit
    • Modeler 18.5
    • Python 3.10.7

データとデータモデルの出力

製品同梱のサンプルデータの「DRUG1n」を表示してみます。

以下のようなデータになっています。
image.png

「Python」を選択し、「Python Syntax」の欄に以下のスクリプトを記入します。

image.png

# データとデータモデルの出力
# ネイティブ Python APIのパッケージ
import modelerpy

#Modelerのデータをpandas Dataframeに読込
modelerData = modelerpy.readPandasDataframe()

#Modelerのデータモデルを取得
modelerDataModel = modelerpy.getDataModel()

#データの表示
print("----modelerData----")
print(modelerData)

#データモデルの表示
print("----modelerDataModel----")
for f in modelerDataModel.getFields():
    print(f.getName()+" "+f.getStorage()+" "+f.getMeasure())

modelerpy.readPandasDataframe()で前のノードのデータをpandasのDataFrameに読み込んでいます。

modelerpy.getDataModel()は「データ型ノード」で定義されていたデータモデルを取得します。

以下で、modelerDataModel.getFields()はデータモデルから各列の情報を抜き出します。getNameで列名、getStorageでデータ型、getMeasureで尺度を取り出しています。

for f in modelerDataModel.getFields():
    print(f.getName()+" "+f.getStorage()+" "+f.getMeasure())

結果

以下のようにデータとデータモデルが出力されます。
image.png

ペアプロット図(散布図行列)グラフ出力

「拡張出力ノード」では、コンソールにテキストを出力するだけではなく、グラフも出力することができます。

あらかじめ、以下のコマンドを管理者権限で実行してmatplotlibとseabornを導入しておきます

"C:\Program Files\IBM\SPSS\Modeler\18.5\python_venv\Scripts\python.exe" -m pip install matplotlib
"C:\Program Files\IBM\SPSS\Modeler\18.5\python_venv\Scripts\python.exe" -m pip install seaborn

「Python」を選択し、「Python Syntax」の欄に以下のスクリプトを記入します。
image.png

グラフを表示
###Use this code to import data from Modeler to Python
# ネイティブ Python APIのパッケージ
import modelerpy

#Modelerのデータをpandas Dataframeに読込
modelerData = modelerpy.readPandasDataframe()

import matplotlib.pyplot as plt
import seaborn as sns

#seabornでpairplotのグラフを表示
sns.pairplot(modelerData, hue='K')
sns.pairplot(modelerData, hue='Age')
plt.show()

sns.pairplot(modelerData, hue='K')などでグラフをつくり、
plt.show()で表示しています。

結果

image.png

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

image.png

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

Extension Output Node for Native Python with Graph Output tab like R and Python for Spark

参考

SPSS Modeler18.5の新機能の ネイティブ Python API #SPSS - Qiita

ネイティブ Python拡張のインポートノード:CSVファイルの読み込み

ネイティブ Python拡張の変換ノード:置き換え

ネイティブ Python拡張モデルノード:モデル作成OneClassSVM

ネイティブ Python拡張の出力ノード:データとペアプロット図(散布図行列)の表示

ネイティブ Python拡張のエクスポートノード:CSVファイルの出力

ネイティブpythonの拡張ノードでつかうpyhtonパッケージを導入する

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?