フォルダ内の全てのファイルをappendする拡張ノードをBobに作らせる
*SPSSを介さずBobにファイル作成を指示できますが後続のプロセスを含めたストリームによる反復利用を想定しています。
1.想定される利用目的
・365日分のCSVデータをフォルダを指定してまとめて読み込む
・設備毎に時間単位で分割されたセンサーデータをまとめて読み込む
2.サンプルストリームとデータのダウンロード
ストリームとデータ
3.サンプルストリームの説明
a.入力するデータは以下の通りです。
b.[レコード追加]ノードを編集します。
[テーブル]表示します。データが列方向に結合されました。
ひとつの拡張ノードで複数ファイルを読み込む
[拡張のインポート]ノードを編集します。スクリプトをどのようにBobに書かせたかは後述します。
入力するパスを変更して利用します。
[テーブル]表示します。最初のプロセスと同じテーブルを表示します。
Bobによるスクリプトの作成手順
1.Bobを起動して、作業フォルダを指定します。
2.SPSS Modeler[拡張のインポート]ノードからサンプル構文をコピーします。
3.プロンプトを作成します。サンプル構文をペーストします。
SPSS Modelerの拡張のインポートノードで
/Users/aa517821/Desktop/Data1の中のファイルを
単純にappendしてひとつの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.プロンプトを実行します。
5.Bobの以下の出力を[拡張のインポート]にそのまま利用します。
import modelerpy
import pandas as pd
import os
import glob
if modelerpy.isComputeDataModelOnly():
# データモデルのみを計算する場合
# 最初のCSVファイルからデータモデルを取得
data_dir = '/Users/aa517821/Desktop/Data1'
csv_files = sorted(glob.glob(os.path.join(data_dir, '*.csv')))
if csv_files:
# 最初のファイルを読み込んでデータモデルを作成
sample_df = pd.read_csv(csv_files[0])
# データモデルを構築
fields = []
for col in sample_df.columns:
dtype = sample_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/Data1'
csv_files = sorted(glob.glob(os.path.join(data_dir, '*.csv')))
# すべてのCSVファイルを読み込んで結合
df_list = []
for file in csv_files:
df = pd.read_csv(file)
df_list.append(df)
# データフレームを縦に結合(append)
if df_list:
outputData = pd.concat(df_list, ignore_index=True)
# 結合したデータを同じディレクトリに保存
output_file = os.path.join(data_dir, 'combined_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 逆引きストリーム集(データ加工)











