2
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?

コード対応表と生成AIでスクリプトを補完して値ラベルを一括作成する(SPSS Modeler データ加工逆引き9-26)

2
Posted at

コード対応表と生成AIでスクリプトを補完して値ラベルを一括作成する

スクリーンショット 2025-12-01 18.41.21.png

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.サンプルストリームの説明

スクリーンショット 2025-12-01 17.32.06.png

a.データは以下の通りです。データにはコード番号のみ記述されているため、コード表からラベル(カテゴリ名称)を割り当てる必要があります。

スクリーンショット 2025-12-01 17.33.32.png

Excelコード対応表はこちらです。aのデータに割り当ててb以降のノードをスクリプトで自動生成させます。

スクリーンショット 2025-12-01 18.07.30.png

完成したスクリプトを実行する

Modelerのメニュー>ツール>ストリームのプロパティ>実行タブを開きます。

スクリーンショット 2025-12-01 18.22.41.png

2行目から4行目をハイライトし赤枠の[部分実行]ボタンを押します。

スクリーンショット 2025-12-01 18.11.55.png

ストリーム領域から、一旦ストリームを消去しました。その上で青枠の[全実行]ボタンを押します。

スクリーンショット 2025-12-0199.png

ストリームの全文実行により、元のストリームが復元されました。

スクリーンショット 2025-12-01 17.37.22.png

b.[フィールド作成]ノードを編集します。bからfまでコード対応表に従ってラベルの割り当てが定義されています。

スクリーンショット 2025-12-01 17.34.37.png

f.[フィールド作成]ノードを[プレビュー]します。

スクリーンショット 2025-12-01 17.36.39.png

スクリプトの作成手順

今回は以下のように、データ(a)の生成から性別(b)と年代(c)までを作成するお手本スクリプトを作りました。
その上で、Excelコード表を生成AIに添付し「次のpythonコードを添付の表に応じてa005のセクションまで完成させてください。コメントは不要です。」と指示したことで、(d)から(f)を補完するスクリプトを生成させました。

pythonスクリプト

#既存のストリームの消去
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 逆引きストリーム集(データ加工)

2
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
2
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?