コード対応表と生成AIでスクリプトを補完して値ラベルを一括作成する
1.想定される利用目的
・100以上あるコード番号フィールドに[1=女性 2=男性]と手作業でラベルを割り当てたくない
・コード表を管理して可視性を確保し、それをスクリプトでストリームに割り当てたい
2.サンプルストリームとExcelコード対応表のダウンロード
ストリーム
https://github.com/yoichiro0903n/blue/raw/refs/heads/main/codeapply.str
Excelコード対応表
https://github.com/yoichiro0903n/blue/raw/refs/heads/main/codetable.xlsx
3.サンプルストリームの説明
a.データは以下の通りです。データにはコード番号のみ記述されているため、コード表からラベル(カテゴリ名称)を割り当てる必要があります。
Excelコード対応表はこちらです。aのデータに割り当ててb以降のノードをスクリプトで自動生成させます。
完成したスクリプトを実行する
Modelerのメニュー>ツール>ストリームのプロパティ>実行タブを開きます。
2行目から4行目をハイライトし赤枠の[部分実行]ボタンを押します。
ストリーム領域から、一旦ストリームを消去しました。その上で青枠の[全実行]ボタンを押します。
ストリームの全文実行により、元のストリームが復元されました。
b.[フィールド作成]ノードを編集します。bからfまでコード対応表に従ってラベルの割り当てが定義されています。
f.[フィールド作成]ノードを[プレビュー]します。
スクリプトの作成手順
今回は以下のように、データ(a)の生成から性別(b)と年代(c)までを作成するお手本スクリプトを作りました。
その上で、Excelコード表を生成AIに添付し「次のpythonコードを添付の表に応じてa005のセクションまで完成させてください。コメントは不要です。」と指示したことで、(d)から(f)を補完するスクリプトを生成させました。
#既存のストリームの消去
stream = modeler.script.stream()
stream.clear()
#ストリームの作成
stream = modeler.script.stream()
#入力データ作成
userinputnode = stream.createAt("userinput", u"Code表", 96, 64)
userinputnode.setPropertyValue("names", ["ID", u"性別", u"年代", u"価格満足度", u"機能満足度", u"再購入意向"])
userinputnode.setPropertyValue("data_mode", "Ordered")
userinputnode.setKeyedPropertyValue("data", "ID", "1 2 3 4 5")
userinputnode.setKeyedPropertyValue("data", u"性別", "2 1 1 2 1")
userinputnode.setKeyedPropertyValue("data", u"年代", "1 6 2 7 4")
userinputnode.setKeyedPropertyValue("data", u"価格満足度", "5 4 99 5 3")
userinputnode.setKeyedPropertyValue("data", u"機能満足度", "99 5 3 5 2")
userinputnode.setKeyedPropertyValue("data", u"再購入意向", "4 5 3 4 1")
#フィールド作成
node001 = stream.createAt("derive", "a001", 192, 64)
node001.setPropertyValue("new_name", "a001")
node002 = stream.createAt("derive", "a002", 288, 64)
node002.setPropertyValue("new_name", "a002")
#テーブルの作成と接続
stream.link(userinputnode, node001)
stream.link(node001, node002)
# a001(性別)
node001 = stream.findByType("derive", "a001")
node001.setPropertyValue("result_type", "Set")
node001.setPropertyValue("new_name", u"性別ラベル")
node001.setKeyedPropertyValue("set_value_cond", u"女性", u"'性別' = 1")
node001.setKeyedPropertyValue("set_value_cond", u"男性", u"'性別' = 2")
node001.setKeyedPropertyValue("set_value_cond", u"未回答", u"'性別' = 99")
# a002(年代)
node002 = stream.findByType("derive", "a002")
node002.setPropertyValue("result_type", "Set")
node002.setPropertyValue("new_name", u"年代ラベル")
node002.setKeyedPropertyValue("set_value_cond", u"10代", u"'年代' = 1")
node002.setKeyedPropertyValue("set_value_cond", u"20代", u"'年代' = 2")
node002.setKeyedPropertyValue("set_value_cond", u"30代", u"'年代' = 3")
node002.setKeyedPropertyValue("set_value_cond", u"40代", u"'年代' = 4")
node002.setKeyedPropertyValue("set_value_cond", u"50代", u"'年代' = 5")
node002.setKeyedPropertyValue("set_value_cond", u"60代", u"'年代' = 6")
node002.setKeyedPropertyValue("set_value_cond", u"70代", u"'年代' = 7")
node002.setKeyedPropertyValue("set_value_cond", u"未回答", u"'年代' = 99")
注意事項
お手本のスクリプトはデータを自動生成させているため、本来のデータを読み込んで利用ください。
なおデータ読み込みは必ずしもスクリプトで記述する必要はありません。データ加工に限定していただいても結構です。
4.参考情報
フィールド作成ノードを制御するスクリプトの詳細
pythonコードでフィールド作成をする際に必要な構造化プロパティー
SPSS Modeler ノードリファレンス目次
SPSS Modeler 逆引きストリーム集(データ加工)









