生成AI+スクリプトでCSVファイルの差分を追加する
解説動画(4min)
1.想定される利用目的
・週次でCSVの差分データを追加する際の手間をスクリプトで効率化する
・同一フォルダ内の複数ファイルを一括でレコード追加する
2.サンプルストリームとデータのダウンロード
ストリーム
データ
3.サンプルストリームの説明
a.[可変長ファイル]ノードを編集します。[Sales.csv]を任意のフォルダに格納しファイルパスを設定します。[エンコード]は[UTF-8]を指定します。
[プレビュー]します。9月の購買実績データです。
b.[レコード追加]ノードを編集します。設定はせずデフォルトのままです。
c.[フラットファイル]ノードを編集します。ファイルパスを設定して実行するとaと同じファイルが別名[Sales2.csv]で作成されます。スクリプトを使って差分追加した上で更新させます。
完成したスクリプトを実行する
Modelerのメニュー>ツール>ストリームのプロパティ>実行タブを開きます。
赤枠のスクリプト全文実行ボタンを押します。
改めてCを実行します。
自動生成した入力ノードを[テーブル]表示します。10月1日から7日までのデータが追加されています。
スクリプトの作成手順
生成AIに以下のプロンプトを与えることで完成版のPythonスクリプトを得ることができます。
まず冒頭で後続のPythonスクリプトに10月3日から7日のデータ追加を加筆するように指示しています。
[#ストリームの作成]以下では
10月1日と10月2日の入力とデータ追加の見本となるPythonスクリプトを示しています。
次のPythonスクリプトの延長で
2025-10-03.csv
2025-10-04.csv
2025-10-05.csv
2025-10-06.csv
2025-10-07.csv
を構文にループは使わず完成させてください
#ストリームの作成
stream = modeler.script.stream()
#レコード追加ノードの定義
appendnode = stream.findByType("append", None)
#差分追加する入力ファイルノードの作成
node001 = stream.createAt("variablefile", "a001", 100, 200)
node001.setPropertyValue("full_filename", u"/Users/aa517821/Library/CloudStorage/OneDrive-IBM/Thinkpad/clementine/Split/Diff/2025-10-01.csv")
node001.setPropertyValue("encoding", "UTF-8")
node002 = stream.createAt("variablefile", "a002", 100, 300)
node002.setPropertyValue("full_filename", u"/Users/aa517821/Library/CloudStorage/OneDrive-IBM/Thinkpad/clementine/Split/Diff/2025-10-02.csv")
node002.setPropertyValue("encoding", "UTF-8")
#テーブルの作成と接続
stream.link(node001, appendnode)
stream.link(node002, appendnode)
完成版は以下のとおりです。
# ストリームの作成
stream = modeler.script.stream()
# レコード追加ノードの定義
appendnode = stream.findByType("append", None)
# 差分追加する入力ファイルノードの作成
node001 = stream.createAt("variablefile", "a001", 100, 200)
node001.setPropertyValue("full_filename", u"/Users/aa517821/Library/CloudStorage/OneDrive-IBM/Thinkpad/clementine/Split/Diff/2025-10-01.csv")
node001.setPropertyValue("encoding", "UTF-8")
node002 = stream.createAt("variablefile", "a002", 100, 300)
# ※ご提示のまま(Sprit)で設定しています。必要なら Split に修正してください。
node002.setPropertyValue("full_filename", u"/Users/aa517821/Library/CloudStorage/OneDrive-IBM/Thinkpad/clementine/Split/Diff/2025-10-02.csv")
node002.setPropertyValue("encoding", "UTF-8")
# --- ここから追加分(ループ不使用で明示的に定義) ---
node003 = stream.createAt("variablefile", "a003", 100, 400)
node003.setPropertyValue("full_filename", u"/Users/aa517821/Library/CloudStorage/OneDrive-IBM/Thinkpad/clementine/Split/Diff/2025-10-03.csv")
node003.setPropertyValue("encoding", "UTF-8")
node004 = stream.createAt("variablefile", "a004", 100, 500)
node004.setPropertyValue("full_filename", u"/Users/aa517821/Library/CloudStorage/OneDrive-IBM/Thinkpad/clementine/Split/Diff/2025-10-04.csv")
node004.setPropertyValue("encoding", "UTF-8")
node005 = stream.createAt("variablefile", "a005", 100, 600)
node005.setPropertyValue("full_filename", u"/Users/aa517821/Library/CloudStorage/OneDrive-IBM/Thinkpad/clementine/Split/Diff/2025-10-05.csv")
node005.setPropertyValue("encoding", "UTF-8")
node006 = stream.createAt("variablefile", "a006", 100, 700)
node006.setPropertyValue("full_filename", u"/Users/aa517821/Library/CloudStorage/OneDrive-IBM/Thinkpad/clementine/Split/Diff/2025-10-06.csv")
node006.setPropertyValue("encoding", "UTF-8")
node007 = stream.createAt("variablefile", "a007", 100, 800)
node007.setPropertyValue("full_filename", u"/Users/aa517821/Library/CloudStorage/OneDrive-IBM/Thinkpad/clementine/Split/Diff/2025-10-07.csv")
node007.setPropertyValue("encoding", "UTF-8")
# テーブルの作成と接続
stream.link(node001, appendnode)
stream.link(node002, appendnode)
# 追加分の接続(ループ不使用で明示)
stream.link(node003, appendnode)
stream.link(node004, appendnode)
stream.link(node005, appendnode)
stream.link(node006, appendnode)
stream.link(node007, appendnode)
注意事項
入力するファイルが多い場合にはリストを別に渡すほうが効率的です。
4.参考情報
SPSS Modelerでフォルダ内のCSVを一括で読み込む(Modelerスクリプト版)
SPSS Modeler ノードリファレンス目次
SPSS Modeler 逆引きストリーム集(データ加工)









