SSブログ

IBM SPSS Modeler: ループ/条件付き実行のスクリプト 後半 [データサイエンス、統計モデル]

※ IBM insight 2015 の "Automation in IBM SPSS Modeler Using Python and R" を元にしています。

【目的】
様々な変数でクロス集計を行いたいが、いちいちクロス集計ノードを追加するのは面倒だし、見栄えが悪くなる。
そこで、スクリプトでループ処理ができないか?

【設定方法】
3. 集計するフィールドに応じて出力名の変更
最後に、少し工夫をしておきます。
このまま実行すると、出力が全て[クロス集計]になってしまいます。
クロス集計表を見れば、何と何をクロス集計したのか分かりますが、ちょっと見にくいです。

そこで、集計する変数に応じて、この出力名も変更するようにします。



[変数の追加]をクリックし、
変更:ストリームパラメーター -> [ノード プロパティー] に変更。

ノード(N)でクロス集計:matrixを選択。

プロパティーで[output_name]を選択。

キーの使用で、真ん中の [語幹の接頭辞として]を選択。

語幹(M) に [ by churn] を入力。
( "by churn" の前にスペース入れておくと読みやすい)





クロス集計ノードの左上にループ処理マークが追加されています。

この状態で、ストリーム全体を実行すれば、ループ処理されます。
[このノードを実行]だと、ループ処理されないので注意が必要です。

すると、4フィールドに対してのクロス集計表がループ処理されて出てきます。

4. スクリプトでの表記を確認
[貼り付け]をクリックすると、スクリプトが貼り付けられます。



stream = modeler.script.stream()
iterationKey_NodeID = "id26GSS7V876Z" # "クロス集計":matrix
iterationKey_NodeProperty = "row"
iterationKey_NodeFields = [u'region',u'marital',u'ed',u'gender']
iterationVariable1_NodeID = "id26GSS7V876Z" # "クロス集計":matrix
iterationVariable1_NodeProperty = "output_name"

for i in range(len(iterationKey_NodeFields)):
# 反復キーの初期化
field = iterationKey_NodeFields[i]
node = stream.findByID(iterationKey_NodeID)
node.setPropertyValue(iterationKey_NodeProperty,field)

# 反復変数の初期化 1
node = stream.findByID(iterationVariable1_NodeID)
iterationVariable1_stem = str(iterationKey_NodeFields[i]) + u" by churn"

node.setPropertyValue(iterationVariable1_NodeProperty,iterationVariable1_stem)

# この反復のストリームを今すぐ実行
executionResults = []
stream.runAll(executionResults)
print "実行を完了しました。"


となります。

nice!(43)  コメント(0)  トラックバック(0) 
共通テーマ:学問