
數(shù)據(jù)挖掘 SPSS Modeler 腳本功能的應用場景和編寫技巧
數(shù)據(jù)挖掘軟件 IBM SPSS Modeler 以用戶界面友好、可視化功能強大著稱。關(guān)于其腳本功能,參考資料很少。作者認為,腳本功能實際上旨在實現(xiàn)數(shù)據(jù)處理和分析建模過程的自動化。在需要動態(tài)改變數(shù)據(jù)處理過程、數(shù)據(jù)流自動執(zhí)行和自動執(zhí)行批量任務等應用場景下,必須補充編寫一些腳本才能完成某些特定功能。所以,腳本功能是用戶界面的必要補充,而不僅僅是用戶界面鼠標操作功能的代碼化。
SPSS Modeler 自帶的腳本編寫用戶指南沒有按照腳本功能的常用應用場景組織內(nèi)容,這給腳本編寫人員參考查閱造成一定的不便。同時,缺少完整的實用的例子,給出的例子多數(shù)是模擬用戶界面上的常用操作。而實際情況是編寫腳本通常是為了補充用戶界面上很少使用或者不能實現(xiàn)的功能。作者就經(jīng)常為找不到可以參考的例子而苦惱。
本文首先介紹用戶界面上無法或者不便實現(xiàn)而必須編寫腳本的常見的五種應用場景。每種場景下均給出完整的應用實例,重點介紹腳本編寫的方法和技巧。在第二節(jié),基于作者經(jīng)驗,總結(jié)了編寫腳本的常用技巧。本文所附的實例均來自實際項目,且在 SPSS Modeler 15.0 環(huán)境下測試通過。
什么情況下需要腳本功能?根據(jù)作者的經(jīng)驗,遇到下列情況應考慮使用腳本功能:需要重復執(zhí)行某些數(shù)據(jù)處理;需要動態(tài)改變數(shù)據(jù)處理的過程;數(shù)據(jù)流最終需要部署到第三方環(huán)境;數(shù)據(jù)流需要自動執(zhí)行 ( 而不是鼠標操作執(zhí)行 );需要批量修改已有的數(shù)據(jù)流或者自動執(zhí)行批量任務。
我們知道,Modeler 數(shù)據(jù)流默認都是順序執(zhí)行的,多個節(jié)點的依次連接而成的數(shù)據(jù)流提前指定了數(shù)據(jù)處理的順序。然而,實際建模中經(jīng)常會遇到部分數(shù)據(jù)流需要重復多次執(zhí)行,且可能帶參數(shù),這時手工執(zhí)行就很不方便。同時,可能需要根據(jù)某個變量的取值重復執(zhí)行一段數(shù)據(jù)流 ( 實現(xiàn)動態(tài)循環(huán) ),這種情況下就必須借助腳本來實現(xiàn)。
圖 1 所示的數(shù)據(jù)流來自是一個預測產(chǎn)品銷售的時間序列模型。需要分別預測每個銷售分支機構(gòu) (IMT) 在未來一個季度的銷售總額。當銷售機構(gòu)較多 (=21) 且動態(tài)變化時,需要根據(jù) Table 節(jié)點 IMT_List 的輸出結(jié)果,循環(huán)多次逐行取出 IMT 的取值,然后根據(jù)此值設(shè)置 Select1 和 IMT 節(jié)點,從而實現(xiàn)動態(tài)的重復執(zhí)行的數(shù)據(jù)處理。這里的主要技巧是從 Table 節(jié)點循環(huán)取數(shù)。
點擊查看大圖
圖 1 中方框內(nèi)的三個節(jié)點是腳本涉及的主要部分,對應的腳本內(nèi)容如下:
清單 1 腳本內(nèi)容 - 從 Table 節(jié)點循環(huán)取數(shù)
腳本編寫的要點:執(zhí)行 Table 節(jié)點讀取所有的循環(huán)變量取值。利用 Result 對象的 output 屬性和 Value 命令逐個讀取循環(huán)變量的取值。使用 set 命令為多個節(jié)點動態(tài)賦值。
SPSS Modeler 數(shù)據(jù)流默認都是順序執(zhí)行的,多個節(jié)點的依次連接而成的數(shù)據(jù)流預先指定了數(shù)據(jù)處理過程。如果需要改變順序執(zhí)行為根據(jù)條件執(zhí)行不同的流分支,則需要使用腳本 if...then...else... 命令。
下面的實例來自一個銷售績效評估項目,需要根據(jù)用戶命令行參數(shù)的設(shè)置自動選擇執(zhí)行不同的數(shù)據(jù)流分支。具體來說,根據(jù)命令行參數(shù),自動選擇是否重新訓練模型和根據(jù)不同季度選擇不同的數(shù)據(jù)調(diào)整方法。
這個數(shù)據(jù)流在用戶界面上調(diào)試時,不需要腳本,但是當部署完成集成到生產(chǎn)環(huán)境下自動執(zhí)行時,就必須編寫一些腳本以實現(xiàn)根據(jù)命令行參數(shù)動態(tài)選擇不同的數(shù)據(jù)處理過程。本例的腳本如下:
腳本編寫的要點:使用 if...then...else... 命令,結(jié)合 CLEM 表達式和腳本參數(shù),實現(xiàn)根據(jù)命令行參數(shù)動態(tài)選擇不同的數(shù)據(jù)處理過程。
構(gòu)建好的數(shù)據(jù)流可能需要部署到第三方環(huán)境下使用。此時,數(shù)據(jù)流的執(zhí)行往往不同于 SPSS Modeler 環(huán)境,有些情況下必須編寫一點腳本,以實現(xiàn)預設(shè)的功能。
最簡單的部署數(shù)據(jù)流的方法是使用 SPSS Modeler 批處理方式 (Batch Mode) 在第三方環(huán)境通過執(zhí)行批命令來執(zhí)行數(shù)據(jù)流。另外一種常用的部署方法是使用 Solution Publisher 在第三方環(huán)境執(zhí)行數(shù)據(jù)流。下面就這兩種部署方法分別給出一個應用實例。圖 3 是一個資產(chǎn)效能優(yōu)化項目中展示變壓器報警分布情況的數(shù)據(jù)流。
在用戶界面上操作時不需要右邊圖示的腳本,但如果需要把這個流文件部署到第三方環(huán)境執(zhí)行時,就必須增加這些腳本,且必須設(shè)置為與數(shù)據(jù)流同步執(zhí)行 ( 選擇 Run this script)。否則會提示輸入數(shù)據(jù)庫源節(jié)點的 Password 且不會自動執(zhí)行三個圖形輸出節(jié)點。對應的執(zhí)行這個數(shù)據(jù)流的批命令文件的內(nèi)容如下:
批處理命令
...\clemb.exe -hostname IP -port 28052 -username UN -password PW -stream "...\Alarm Distribution Pattern Transformer.str" -execute -server -appendlog
下面的例子是一個資產(chǎn)效能優(yōu)化項目中預測鐵路設(shè)備故障的數(shù)據(jù)流。
這些腳本在部署環(huán)境下執(zhí)行必須編寫,否則提問密碼,而且不能更新模型和輸出預測結(jié)果。所以,用戶界面下正常執(zhí)行的數(shù)據(jù)流,在完成部署并自動執(zhí)行的情況下,有些功能必須借助腳本來實現(xiàn)。特別需要注意的是:如果沒有 insert model 這行腳本,模型就不能正常更新。沒有腳本 execute 'Alarm Rail',預測結(jié)果就不能輸出到指定的數(shù)據(jù)庫表。對應的調(diào)用 Solution Publisher 執(zhí)行這個數(shù)據(jù)流的批命令文件的內(nèi)容如下:
批處理命令
"...\modelerrun.exe" -p "...\Alarm_Prediction_Rail.par" "...\Alarm_Prediction_Rail.pim"
構(gòu)建好的數(shù)據(jù)流可能需要部署到正式的生產(chǎn)環(huán)境,這時通常需要定期地自動執(zhí)行這些數(shù)據(jù)流。直接復制用戶界面調(diào)試好的數(shù)據(jù)流 ( 手工執(zhí)行 ),當在生產(chǎn)環(huán)境自動執(zhí)行時,有些功能就可能不能實現(xiàn)。
自動執(zhí)行數(shù)據(jù)流有三種模式:Batch 模式、Client 模式和 Solution Publisher 模式。對應的可執(zhí)行文件分別為:clemb.exe、modelerclient.exe 和 modelerrun.exe。前兩種模式的典型命令行命令如下:
命令
clemb/modelerclient -server -hostname myserver -port 80 -username dminer -password 1234 -stream mystream.str -execute
對于 Solution Publisher 模式,在 Command Line 窗口下的執(zhí)行命令如下:
命令
modelerrun – p *.par *.pim
當需要自動執(zhí)行數(shù)據(jù)流時,原先在用戶界面上調(diào)試好的,即手工執(zhí)行的數(shù)據(jù)流可能需要補充一些腳本以實現(xiàn)指定的功能。例如,建模節(jié)點的自動執(zhí)行、模型節(jié)點的自動更新、導出類節(jié)點 (Export) 的結(jié)果導出等都需要編寫腳本。
圖 5 所示是一個資產(chǎn)效能優(yōu)化項目中挖掘變壓器失效與 DCS 監(jiān)控數(shù)據(jù)異常的關(guān)聯(lián)規(guī)則的數(shù)據(jù)流。這個數(shù)據(jù)流需要使用 Solution Publisher 部署到第三方環(huán)境自動執(zhí)行,同時需要輸出關(guān)聯(lián)規(guī)則到數(shù)據(jù)庫。由于 Solution Publisher 只支持二維數(shù)據(jù)的輸出而不能輸出關(guān)聯(lián)規(guī)則模型本身,所以難點在于如何自動更新模型并輸出關(guān)聯(lián)規(guī)則模型本身的結(jié)果到 Oracle 數(shù)據(jù)庫表,這就需要編寫腳本。這個實例的特點是同時實現(xiàn)了建模節(jié)點的自動執(zhí)行、模型節(jié)點的自動更新和導出節(jié)點的結(jié)果保存。
點擊查看大圖
腳本編寫的要點:使用 set 命令提前設(shè)置數(shù)據(jù)庫密碼。使用 export model 命令輸出關(guān)聯(lián)規(guī)則模型為純文本文件。使用 Export 節(jié)點把純文本格式的關(guān)聯(lián)規(guī)則輸出到數(shù)據(jù)庫。
實際應用中可能會遇到需要批量修改已有的數(shù)據(jù)流,以提高模型構(gòu)建效率或者適用不同的客戶項目。例如,可能需要把所有字段名修改為大寫字母。手工修改對于節(jié)點或字段較多時就不方便。
下面的例子來自一個資產(chǎn)效能優(yōu)化項目。以前調(diào)試好的數(shù)據(jù)流,原先數(shù)據(jù)導出到 Excel 表,現(xiàn)在客戶環(huán)境發(fā)生變化需要導出到 Oracle 數(shù)據(jù)庫。由于 Oracle 數(shù)據(jù)庫的庫表名稱和字段名稱必須用大寫字母且不能有空格,所以需要批量替換所有的 Filter 節(jié)點的小寫字母和中間空格。手工修改對于 Filter 節(jié)點較多或字段較多時不方便,可以使用腳本自動修改。下面一段腳本,可以實現(xiàn)類似于圖 6 所示的 Filter 節(jié)點 (Filter_Out) 的所有 Filter 節(jié)點的字段名稱的大寫轉(zhuǎn)換和空格到下劃線的轉(zhuǎn)換。
腳本編寫的要點:搜索當前數(shù)據(jù)流中包含的所有 Filter 節(jié)點,然后逐個節(jié)點對新的字段名稱逐個進行大寫轉(zhuǎn)換,并把中間空格替換為下劃線。使用了 set 命令、循環(huán)語句和條件語句。
SPSS Modeler 腳本功能是輔助的,鼠標操作是其基本的使用方式。所以,有些看似功能類似的腳本在實際運行時的效果不同于鼠標操作。常見情況可分為三種:
? 腳本中使用的節(jié)點需要重新命名。不同于鼠標操作模式,在運行腳本時不能出現(xiàn)重名的節(jié)點,否則報錯。
? 建模節(jié)點的腳本執(zhí)行不會自動更新模型節(jié)點 (Nugget)。例如,圖 5 所示腳本的命令 execute 'Apriori1'僅執(zhí)行建模節(jié)點'Apriori1'并把建好的模型節(jié)點放到管理器,而不自動更新工作區(qū)的模型節(jié)點,需要編寫腳本把模型節(jié)點插入 ( 使用命令 insert model)。
? 使用腳本執(zhí)行數(shù)據(jù)流時,末端的圖形或數(shù)據(jù)的輸出節(jié)點不會自動執(zhí)行。例如,本文“1.3 部署到第三方環(huán)境的數(shù)據(jù)流”一節(jié)圖 3 所示的例子,在用戶界面上,點擊按鈕“運行當前流”(Run the current stream),所有末端的輸出節(jié)點自動執(zhí)行,但當部署到第三方環(huán)境執(zhí)行這個數(shù)據(jù)流時,就需要在這個數(shù)據(jù)流上附加腳本才能完成輸出。
屏蔽文件覆蓋的提問:腳本自動執(zhí)行時不希望中間跳出窗口提問是否覆蓋文件。這個功能沒有對應的腳本命令,只能使用菜單改變該數(shù)據(jù)流的用戶選項 (Tools...Options...User Options),不選 Warn when a node overwrites a file。
調(diào)試方法:沒有提供調(diào)試功能,只能點擊按鈕 Run selected lines only,選擇部分腳本運行。
自動刷新數(shù)據(jù)源節(jié)點:當原始數(shù)據(jù)改變時,需要刷新對應的數(shù)據(jù)源節(jié)點。使用命令 set ^stream.refresh_source_nodes = True 實現(xiàn)所有數(shù)據(jù)源節(jié)點的自動刷新。
屏蔽數(shù)據(jù)源密碼提問:對應通過 ODBC 連接的數(shù)據(jù)庫數(shù)據(jù)源,數(shù)據(jù)流自動執(zhí)行時會提問密碼。屏蔽這種提問的命令:set 'Database1':databasenode.password = "mypassword"
模型節(jié)點的自動更新:不同于鼠標操作,腳本執(zhí)行建模節(jié)點不會自動更新對應的模型節(jié)點。需要使用 insert model 命令更新模型。如果需要同時更新多個模型節(jié)點,還需使用 duplicate 命令。例如,下列腳本根據(jù)建模節(jié)點 AutoNumeric 的執(zhí)行結(jié)果,自動更新 Actual2 和 Actual3 兩個模型節(jié)點:
execute 'AutoNumeric'
insert model Actual2 connected between 'Type2':typenode and 'AFFV_AR_Q1':derivenode
duplicate Actual2 as Actual3 connected between 'Type3':typenode and 'Filter3':filternode
清除已有的模型節(jié)點:常用命令有三種,注意它們的區(qū)別。
delete Actual2 ( 命令 delete NODE) 從工作區(qū)上刪除模型節(jié)點;
clear generated palette 清除管理器上的所有模型節(jié)點;
delete model Actual2 清除管理器上而不是刪除工作區(qū)的模型節(jié)點。
高級腳本功能需要使用對象 (Object):常用的對象有四種:Output; Node; Model; Result。每類對象都有一些專用的命令用于定義和檢索這些對象,例如 get output; execute 'Node1'; export model; value 'Result1' at Row1 Column1。詳細命令參見用戶指南第四章內(nèi)容 (Scripting Commands)。例如,根據(jù) Table 節(jié)點的輸出讀取循環(huán)變量,就可使用 Result 對象的 value 命令。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認 ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預測分析中的應用:從數(shù)據(jù)查詢到趨勢預判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準 ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學方法在市場調(diào)研數(shù)據(jù)中的深度應用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03