1
1

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

拡張の変換

データの置換

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

image.png

# バージョンなどの確認
#データの置換
###Use this code to transfer data between Modeler and Python
# ネイティブ Python APIのパッケージ
import modelerpy

#データモデルの参照時
if modelerpy.isComputeDataModelOnly():
    modelerDataModel = modelerpy.getDataModel()
    outputDataModel = None
    #Compute output data model here
    #出力データモデルの設定
    outputDataModel = modelerDataModel
    modelerpy.setOutputDataModel(outputDataModel)

#データ出力時
else:
    #前のノードからデータの読み込み
    modelerData = modelerpy.readPandasDataframe()
    outputData = modelerData
    #Compute output data here
    #Ageに100を加算
    outputData['Age']=outputData['Age']+100
    #データの出力
    modelerpy.writePandasDataframe(outputData)

処理の分岐

「データモデルの処理」と「データ自体の処理」の分岐を以下のif文で行っています。

if modelerpy.isComputeDataModelOnly()

modelerpy.isComputeDataModelOnly():のif文は、後続のノードがデータモデルを参照する場合に実データを用意しなくていいための分岐になります。Modelerは、後続のノードを接続した際に前のノードのデータモデルを参照します。例えば「フィルター」ノードを接続した場合にはデータは必要ありませんが、「列名」の情報は必要になります。このif文をなくしても動作はしますが、列名などのデータモデルを参照したいだけなのにデータの読み込みが行われてしまうため、無駄な処理が動いてしまいます。
なお、このif文は、「拡張の変換」ノードと「拡張モデル」ノードといった後続ノードが必要なノードでも、同様に使われます。

データモデルの処理

以下のmodelerpy.getDataModel()で前のノードから「フィールド名」、「データ型」、「尺度」などのデータモデルを取得しています。

modelerDataModel = modelerpy.getDataModel()

以下のmodelerpy.setOutputDataModel(outputDataModel)で後続ノードに渡すデータモデルを設定しています。

modelerpy.setOutputDataModel(outputDataModel)

ここでの処理は既存データの置換なので、前のノードのデータモデルをそのままコピーしています。列が追加されたり、内容が変更される場合は「拡張のインポート」でやったような列の定義が必要です。

データの処理

modelerpy.readPandasDataframe()で前ノードからのデータを読み込んでいます。
outputData['Age']=outputData['Age']+100でAgeに100を足しています。通常のpandasの処理です。
modelerpy.writePandasDataframe(outputData)で後続のノードにデータを出力しています。

    modelerData = modelerpy.readPandasDataframe()
    outputData = modelerData
    #Compute output data here
    #Ageに100を加算
    outputData['Age']=outputData['Age']+100
    #データの出力
    modelerpy.writePandasDataframe(outputData)

結果

以下のように、Ageに100が加算されました。
image.png

参考

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

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

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

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

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

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

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

1
1
3

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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?