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?

フォルダ内の全てのファイルをIDでmergeする拡張ノードをBobに作らせる(SPSS Modeler データ加工逆引き9-32)

1
Last updated at Posted at 2026-04-28

フォルダ内の全てのファイルをIDでmergeする拡張ノードをBobに作らせる

スクリーンショット 2026-04-18 15.08.46.png

*SPSSを介さずBobにファイル作成を指示できますが後続のプロセスを含めたストリームによる反復利用を想定しています。

1.想定される利用目的

・フォルダに存在する分割したキャンペーン情報を顧客IDでマージする

2.サンプルストリームとデータのダウンロード

ストリームとデータ

3.サンプルストリームの説明

スクリーンショット 2026-04-18 15.10.14.png

a.入力するデータは以下の通りです。

a1
スクリーンショット 2026-04-18 15.11.37.png

a2
スクリーンショット 2026-04-18 15.11.52.png

a3
スクリーンショット 2026-04-18 15.12.07.png

b.[レコード結合]ノードを編集します。

スクリーンショット 2026-04-18 15.12.23.png

[テーブル]表示します。データが列方向に結合されました。

スクリーンショット 2026-04-18 15.12.52.png

ひとつの拡張ノードで複数ファイルをIDで結合して読み込む

[拡張のインポート]ノードを編集します。スクリプトをどのようにBobに書かせたかは後述します。
入力するパスを変更して利用します。

スクリーンショット 2026-04-18 15.13.31.png

[テーブル]表示します。最初のプロセスと同じテーブルを表示します。

スクリーンショット 2026-04-18 15.12.52.png

Bobによるスクリプトの作成手順

1.Bobを起動して、作業フォルダを指定します。

スクリーンショット 2026-03-31 11.13.04.png

2.SPSS Modeler[拡張のインポート]ノードからサンプル構文をコピーします。

スクリーンショット 2026-04-18 14.44.58.png

3.プロンプトを作成します。サンプル構文をペーストします。

プロンプト


SPSS Modelerの拡張のインポートノードで
/Users/aa517821/Desktop/Data2の中のファイルを
IDでmergeしてひとつのCSVファイルにするネイティブPython APIスクリプトを書いてください
結果は別のフォルダに保存してください

- 拡張のインポートノードのスクリプトの解説として
@https://www.ibm.com/docs/ja/spss-modeler/18.6.0?topic=spark-native-python-apis を参考にしてください
- シバンは不要です

###Use this code to export data from Python to Modeler
#import modelerpy
#if modelerpy.isComputeDataModelOnly():
#    outputDataModel = None
###Compute output data model here

#    modelerpy.setOutputDataModel(outputDataModel)
#else:
#    outputData = None
###Compute output data here

#    modelerpy.writePandasDataframe(outputData)




4.プロンプトを実行します。

スクリーンショット 2026-04-19 14.02.53.png

5.Bobの以下の出力を[拡張のインポート]にそのまま利用します。

Pythonスクリプト
import modelerpy
import pandas as pd
import os
import glob

if modelerpy.isComputeDataModelOnly():
    # データモデルのみを計算する場合
    data_dir = '/Users/aa517821/Desktop/Data2'
    csv_files = sorted(glob.glob(os.path.join(data_dir, '*.csv')))
    
    if csv_files:
        # すべてのファイルを読み込んでマージ後のカラムを取得
        dfs = []
        for file in csv_files:
            df = pd.read_csv(file)
            dfs.append(df)
        
        # IDでマージ
        merged_df = dfs[0]
        for df in dfs[1:]:
            merged_df = pd.merge(merged_df, df, on='ID', how='outer')
        
        # データモデルを構築
        fields = []
        for col in merged_df.columns:
            dtype = merged_df[col].dtype
            
            if dtype == 'int64':
                storage = 'integer'
                measure = 'continuous'
            elif dtype == 'float64':
                storage = 'real'
                measure = 'continuous'
            elif dtype == 'object':
                storage = 'string'
                measure = 'nominal'
            else:
                storage = 'string'
                measure = 'nominal'
            
            fields.append(modelerpy.Field(col, storage, measure))
        
        outputDataModel = modelerpy.DataModel(fields)
        modelerpy.setOutputDataModel(outputDataModel)
    else:
        # ファイルが見つからない場合は空のデータモデル
        outputDataModel = modelerpy.DataModel([])
        modelerpy.setOutputDataModel(outputDataModel)
else:
    # 実際のデータを計算する場合
    data_dir = '/Users/aa517821/Desktop/Data2'
    csv_files = sorted(glob.glob(os.path.join(data_dir, '*.csv')))
    
    # すべてのCSVファイルを読み込んでIDでマージ
    if csv_files:
        dfs = []
        for file in csv_files:
            df = pd.read_csv(file)
            dfs.append(df)
        
        # 最初のデータフレームから開始
        outputData = dfs[0]
        
        # 残りのデータフレームをIDでマージ
        for df in dfs[1:]:
            outputData = pd.merge(outputData, df, on='ID', how='outer')
        
        # 結果を別のフォルダに保存
        output_dir = '/Users/aa517821/Desktop/MergedData'
        os.makedirs(output_dir, exist_ok=True)
        output_file = os.path.join(output_dir, 'merged_data.csv')
        outputData.to_csv(output_file, index=False)
        
        # SPSS Modelerにデータを渡す
        modelerpy.writePandasDataframe(outputData)
    else:
        # ファイルが見つからない場合は空のデータフレーム
        outputData = pd.DataFrame()
        modelerpy.writePandasDataframe(outputData)

# Made with Bob

注意事項

フォルダのパスに日本語名が含まれる場合の表記の例
u"/Users/aa517821/CRM小売/キャンペーン最適化/output/"

4.参考情報

店舗の数だけファイルを分割するpython拡張ノードをBobに作らせる

Modelerスクリプトでループ処理を実行する

SPSS Modeler ノードリファレンス目次

SPSS Modeler 逆引きストリーム集(データ加工)

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?