99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀數(shù)據(jù)挖掘 SPSS Modeler 腳本功能的應用場景和編寫技巧
數(shù)據(jù)挖掘 SPSS Modeler 腳本功能的應用場景和編寫技巧
2016-08-22
收藏

數(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í)行批量任務。

重復執(zhí)行的數(shù)據(jù)處理

我們知道,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. 從 Table 節(jié)點循環(huán)取數(shù)

從 Table 節(jié)點循環(huán)取數(shù)

點擊查看大圖

圖 1 中方框內(nèi)的三個節(jié)點是腳本涉及的主要部分,對應的腳本內(nèi)容如下:

清單 1 腳本內(nèi)容 - 從 Table 節(jié)點循環(huán)取數(shù)

清單 1. 腳本內(nèi)容 - 從 Table 節(jié)點循環(huán)取數(shù)

腳本編寫的要點:執(zhí)行 Table 節(jié)點讀取所有的循環(huán)變量取值。利用 Result 對象的 output 屬性和 Value 命令逐個讀取循環(huán)變量的取值。使用 set 命令為多個節(jié)點動態(tài)賦值。

動態(tài)改變的數(shù)據(jù)處理過程

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)整方法。

圖 2. 根據(jù)命令行參數(shù)選擇是否訓練模型和季度調(diào)整方法


這個數(shù)據(jù)流在用戶界面上調(diào)試時,不需要腳本,但是當部署完成集成到生產(chǎn)環(huán)境下自動執(zhí)行時,就必須編寫一些腳本以實現(xiàn)根據(jù)命令行參數(shù)動態(tài)選擇不同的數(shù)據(jù)處理過程。本例的腳本如下:

清單 2. 帶命令行參數(shù)的腳本

帶命令行參數(shù)的腳本

腳本編寫的要點:使用 if...then...else... 命令,結(jié)合 CLEM 表達式和腳本參數(shù),實現(xiàn)根據(jù)命令行參數(shù)動態(tài)選擇不同的數(shù)據(jù)處理過程。

部署到第三方環(huán)境的數(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ù)流。

圖 3. 部署到第三方環(huán)境的數(shù)據(jù)流 (Batch Mode)

部署到第三方環(huán)境的數(shù)據(jù)流 (Batch Mode)

清單 3. 批處理方式部署

批處理方式部署

在用戶界面上操作時不需要右邊圖示的腳本,但如果需要把這個流文件部署到第三方環(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ù)流。

圖 4. 部署到第三方環(huán)境的數(shù)據(jù)流 (Solution Publisher)
清單 4. Solution Publisher 部署

Solution Publisher 部署

這些腳本在部署環(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"

自動執(zhí)行的數(shù)據(jù)流

構(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é)果保存。

圖 5. 關(guān)聯(lián)規(guī)則的自動輸出

<a href='/map/guanlianguize/' style='color:#000;font-size:inherit;'>關(guān)聯(lián)規(guī)則</a>的自動輸出

點擊查看大圖

清單 5. 關(guān)聯(lián)規(guī)則自動輸出的腳本

<a href='/map/guanlianguize/' style='color:#000;font-size:inherit;'>關(guān)聯(lián)規(guī)則</a>自動輸出的腳本

腳本編寫的要點:使用 set 命令提前設(shè)置數(shù)據(jù)庫密碼。使用 export model 命令輸出關(guān)聯(lián)規(guī)則模型為純文本文件。使用 Export 節(jié)點把純文本格式的關(guān)聯(lián)規(guī)則輸出到數(shù)據(jù)庫。

自動執(zhí)行的批量任務

實際應用中可能會遇到需要批量修改已有的數(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)換。

圖 6. 字段名稱大寫和空格的自動轉(zhuǎn)換

<a href='/map/ziduan/' style='color:#000;font-size:inherit;'>字段</a>名稱大寫和空格的自動轉(zhuǎn)換

清單 6. 批量任務的腳本

批量任務的腳本

腳本編寫的要點:搜索當前數(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

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }