李五俊 胡建華
摘要:為了把SPSS強(qiáng)大的統(tǒng)計(jì)分析功能應(yīng)用在特定應(yīng)用領(lǐng)域的數(shù)據(jù)處理系統(tǒng)中,利用SPSS的可編程擴(kuò)展機(jī)制與.NET進(jìn)行交互集成,將所需的SPSS的統(tǒng)計(jì)分析功能封裝為可被調(diào)用的web服務(wù)。通過客戶端程序調(diào)用Web服務(wù),向SPSS提供數(shù)據(jù)源和處理請求,并反饋SPSS處理結(jié)果。通過藥物分析中的線性回歸分析實(shí)例驗(yàn)證了該方法的可行性,能大大降低軟件開發(fā)成本。
關(guān)鍵詞:Web服務(wù);SPSS編程擴(kuò)展;.NET集成開發(fā);統(tǒng)計(jì)分析
中圖分類號:TP31;TP39 文獻(xiàn)標(biāo)識碼:A DOI:10.3969/j.issn.1003-6970.2016.04.005
0 引言
隨著信息技術(shù)的發(fā)展成熟,無論是科學(xué)研究領(lǐng)域還是生產(chǎn)服務(wù)領(lǐng)域?qū)?shù)據(jù)分析的重要性越來越重視,通過對業(yè)務(wù)數(shù)據(jù)的分析挖掘,可以為科學(xué)研究人員或企業(yè)組織的領(lǐng)導(dǎo)者提供更好的決策支持。如何把現(xiàn)有的數(shù)據(jù)分析處理軟件功能集成到待開發(fā)的領(lǐng)域軟件或系統(tǒng)中,降低軟件開發(fā)成本,縮短開發(fā)周期,提高軟件開發(fā)效率是近年來軟件技術(shù)人員關(guān)注的焦點(diǎn),已有相關(guān)的一些成果。SPSS不但提供了豐富的算法來幫助用戶完成各種各樣的統(tǒng)計(jì)分析任務(wù),還支持多種語言的集成接口,使第三方軟件系統(tǒng)開發(fā)商能夠以高性能、低成本的方式,把SPSS集成到其軟件產(chǎn)品中,從而可以根據(jù)需要調(diào)用SPSS強(qiáng)大的統(tǒng)計(jì)分析功能。由于不同的異構(gòu)系統(tǒng)在集成過程中的強(qiáng)耦合性會帶來系統(tǒng)開發(fā)、維護(hù)和升級的困難。因此,在不同系統(tǒng)的集成過程中必須考慮降低耦合性的問題。Web服務(wù)能夠?qū)崿F(xiàn)不同系統(tǒng)之間良好的互操作,并且具有即時(shí)裝配、松散耦合、自動集成的能力。它的平臺和語言中立性使得跨平臺的互操作、系統(tǒng)的整合更加容易。
因此本文通過NET平臺將SPSS的部分統(tǒng)計(jì)分析功能設(shè)計(jì)成Web服務(wù),通過訪問Web服務(wù)的形式完成SPSS功能的集成。將SPSS集成開發(fā)成Web服務(wù),在用戶操作界面可以將功能操作和結(jié)果展現(xiàn)做的更加簡單、直觀、容易理解,即使非專業(yè)的統(tǒng)計(jì)分析人員也可以很容易的使用。同時(shí)WEB服務(wù)的共享性,還可以降低SPSS投資和使用費(fèi)用。
1 相關(guān)技術(shù)介紹
1.1 SPSS的可編程性擴(kuò)展及.NET插件
SPSS(statistical Analysis System)是目前應(yīng)用廣泛、功能強(qiáng)大的通用統(tǒng)計(jì)分析軟件,提供了大量的統(tǒng)計(jì)分析方法。但SPSS學(xué)習(xí)掌握困難,需要用戶要求較高數(shù)理知識和編程能力。為了方便SPSS與其他應(yīng)用系統(tǒng)的集成,SPSS提供了靈活的外部編程技術(shù)支持。外部編程語言和SPSS的交互是通過SPSS提供的SDK(Software Development Kit),該SDK主要由兩個(gè)動態(tài)鏈接庫文件SPSSXD API和SPSSDXAPI構(gòu)成。SPSS通過SPSSDX API,即spssdx.dll動態(tài)鏈接庫程序來把其他外部編程語言集成在其系統(tǒng)內(nèi)部,這不是本文討論的主題。
SPSS通過SPSSXD API來實(shí)現(xiàn)外部語言程序訪問SPSS功能。SPSS提供了一系列的插件(plug-in)程序,如python plug-in,R plug-in,.Net plug-in。通過這些支持不同語言或平臺的插件,經(jīng)過SPSSXD API在后臺激活和控制SPSS。
SPSS的.NET插件提供了兩個(gè).NET程序集(Assemblies)。SPSS.BackendAPI.dll是用來啟動SPSS內(nèi)部接口的動態(tài)庫(spssxd.dll),使得在基于.NET平臺的應(yīng)用程序語言中可以使用SPSSXD API。而SPSS.BackendAPI.Controller.dll包裝了底層的SPSS功能接口并且暴露給SPSS.BackendAPI.dll,它提供的功能包括啟動SPSS,執(zhí)行SPSS語法命令,讀取和寫人數(shù)據(jù),創(chuàng)建SPSS輸出等。SPSS使用自身的命令語言Syntax驅(qū)動SPSS做各種統(tǒng)計(jì)分析工作,可以讀取數(shù)據(jù),進(jìn)行數(shù)據(jù)處理以及進(jìn)行統(tǒng)計(jì)分析。Syntax語句類似SQL語句,語句靈活,執(zhí)行效率高,可以嵌入到SPSS所支持的外部通用語言中。
1.2 Web Service技術(shù)
軟件系統(tǒng)構(gòu)建過程中,特別是在Internet環(huán)境的軟件系統(tǒng)下,模塊之間的強(qiáng)耦合會給軟件的維護(hù)與升級帶來不利的影響。因此,軟件行業(yè)內(nèi)提出了面向服務(wù)的體系結(jié)構(gòu)(SOA),把軟件功能模塊以服務(wù)形式進(jìn)行封裝,按照業(yè)務(wù)邏輯組合服務(wù)完成軟件功能。Web服務(wù)(Web Services)是目前在Internet環(huán)境下實(shí)現(xiàn)面向服務(wù)的體系結(jié)構(gòu)(SOA)的主要技術(shù),通過跨平臺、松散耦合的Web Services之間進(jìn)行相互調(diào)用和集成來實(shí)現(xiàn)軟件功能目標(biāo)。XML是Web Service的核心技術(shù),XML為Web Service提供了統(tǒng)一的數(shù)據(jù)格式,從而幫助消除使用不同組件模型、操作系統(tǒng)和編程語言的系統(tǒng)之間存在的差異,可以滿足Web客戶端、桌面客戶端以及移動客戶端軟件的開發(fā)。
根據(jù)不同領(lǐng)域?qū)?shù)據(jù)分析處理的需要,編寫相關(guān)的SPSS統(tǒng)計(jì)應(yīng)用程序。然后將這些特定SPSS的統(tǒng)計(jì)應(yīng)用在.NET平臺下封裝成為Web服務(wù),就可以在Internet或Intranet環(huán)境中進(jìn)行Web服務(wù)的發(fā)布、發(fā)現(xiàn)、動態(tài)綁定等,從而實(shí)現(xiàn)SPSS統(tǒng)計(jì)應(yīng)用功能的組件化。通過綁定和共享這些服務(wù)可以方便快捷的實(shí)現(xiàn)SPSS的跨平臺集成。從而使SPSS的強(qiáng)大的統(tǒng)計(jì)分析功能可以借助Web服務(wù)實(shí)現(xiàn)網(wǎng)絡(luò)化,不再局限于點(diǎn)對點(diǎn)的服務(wù)模式。
2 基于Web服務(wù)的SPSS與.NET系統(tǒng)集成
2.1 SPSS與.NET的集成原理
SPSS與.NET的集成原理如圖l所示。
安裝SPSS提供的SPSS Statistics NetPlugln插件程序后,在.NET應(yīng)用程序中就可以加載和引用SPSS.BackendAPI.dll和SPSS.BackendAPI.Controlller.dll類庫文件中所提供的訪問SPSS的各種類。在SPSS.BackendAPI.Controlller類庫中的Processor類是十分關(guān)鍵的一個(gè)類。通過Processor類可以創(chuàng)建一個(gè)控制SPSS的控制器(processor)實(shí)例對象,利用控制器(processor)實(shí)例對象的submit方法向SPSS提交Syntax命令以及需要處理的數(shù)據(jù)。
Processor類的實(shí)例對象必須通過SPSS后臺庫文件spssxd.dll驅(qū)動SPSS來處理提交的命令。SPSS根據(jù)Syntax命令來完成數(shù)據(jù)的統(tǒng)計(jì)分析后,把圖、轉(zhuǎn)軸表等統(tǒng)計(jì)分析結(jié)果以O(shè)XML(Output XML)形式輸出。提取分析結(jié)果首先要通過OMS(Output Man-agement System)命令將生成的分析結(jié)果以O(shè)XML的形式存儲到XML工作空間。通過Processor類的EvaluateXPath(Xpath)方法可以從XML工作空間將所需的結(jié)果提取出來,其中Xpath表達(dá)式指定了所需結(jié)果的具體位置,提取出來的結(jié)果以一維字符串?dāng)?shù)組的形式保存。最后通過Processor類的StopSPSS方法結(jié)束SPSS的一次調(diào)用。
2.2 SPSS Service服務(wù)的建立
為了更好的利用SPSS資源,在SPSS與.NET集成的基礎(chǔ)上,進(jìn)一步把集成的程序模塊按照一定的邏輯功能封裝為具有特定任務(wù)的Web服務(wù)。這些Web服務(wù)可以發(fā)布在Internet或Intranet上,供其他軟件或系統(tǒng)調(diào)用訪問。從而實(shí)現(xiàn)SPSS計(jì)算資源的共享,同時(shí)也解決了系統(tǒng)集成和軟件架構(gòu)的耦合性問題,對系統(tǒng)或軟件的維護(hù)、升級或重用有著積極的意義。參見圖2。
.NET集成開發(fā)環(huán)境提供了快速方便的Web服務(wù)創(chuàng)建過程。開發(fā)人員只要編寫核心的業(yè)務(wù)邏輯程序代碼,.NET系統(tǒng)可以直接完成服務(wù)的封裝和發(fā)布等操作。
3 實(shí)例應(yīng)用
3.1 Web服務(wù)建立
在藥學(xué)領(lǐng)域經(jīng)常用到對藥物的某成分的含量及和其有關(guān)的效應(yīng)進(jìn)行相關(guān)及回歸分析,從而來對藥物進(jìn)行分析預(yù)測。下面以一元線性回歸模型的計(jì)算分析為例創(chuàng)建Web服務(wù),該服務(wù)的一個(gè)接口方法名為regressionAnalyze,通過輸入數(shù)據(jù)文件路徑(filepath),因變量(dependent)和自變量(indepentent),獲得DataTable類型的分析結(jié)果數(shù)據(jù)。
[WebMethod]
public DataTable
regressionAnalyze(stringfilepath,string dependent,string indepentent)
{
private SpssPlugln p=new SpssPlugln();
//創(chuàng)建SPSS插件對象
p.Plugln();
//載入插件程序,啟動SPSS通信
p.SpssProcessor.Submit("GET FILE'"+filepath+…"'.");//通過SpssProcessor提交數(shù)據(jù)集
string[] cmds=getSyntaxString(dependent,inde-pendent);//構(gòu)建SPSS Syntax命令
p.SpssProcessor.Submit(cmds);//提交命令
string[] XpathString=getXpathString();
//構(gòu)建XPath表達(dá)式
//通過Processor類的EvaluateXPath方法提取分析結(jié)果
sting[][] analysisValue=new string[XpathString.Length][];
for(int i=0;i {analysis Value[]=(string[])p.spssProcessor.EvaluateXPath("desctable","/outputTree",XpathString[i]);} return coefftable; //并將分析結(jié)果以DataTable的形式返回 p.SpssProcessor.StopSPSS();//關(guān)閉SPSS ) 通過ASENET設(shè)計(jì)Web客戶端程序。Web客戶端向Web服務(wù)器發(fā)送Web服務(wù)請求,Web服務(wù)器接受請求后,載入.NET插件程序創(chuàng)建SPSS控制器對象。通過SPSS控制器啟動SPSS通信并上傳源數(shù)據(jù)集、提交Syntax命令,SPSS執(zhí)行命令完成統(tǒng)計(jì)分析后將分析結(jié)果輸出到XML工作空間。SPSS控制器從XML工作空間提取分析結(jié)果并將結(jié)果返回給客戶端程序。見圖3。 3.2 結(jié)果分析 為了驗(yàn)證本方法所獲結(jié)果的正確性,本文采用文獻(xiàn)中所提供的數(shù)據(jù),實(shí)現(xiàn)對藥學(xué)數(shù)據(jù)的線性回歸分析功能。程序運(yùn)行的界面和運(yùn)行結(jié)果如圖4所示。頁面上部是數(shù)據(jù)的輸入部分,選擇數(shù)據(jù)文件和確定因變量和自變量后提交。頁面下部是由SPPS計(jì)算并返回的結(jié)果和圖形。與文獻(xiàn)中的結(jié)果對比表明計(jì)算結(jié)果準(zhǔn)確,證實(shí)了該方法的可行性。 4 結(jié)束語 本文介紹了以.NET為開發(fā)運(yùn)行平臺對SPSS軟件進(jìn)行集成的二次開發(fā)技術(shù),并且提出以Web服務(wù)調(diào)用的方式訪問SPSS強(qiáng)大的分析處理功能,最后用Web客戶端上訪問Web服務(wù)實(shí)例驗(yàn)證了本文方法的可行性。實(shí)驗(yàn)結(jié)果證明可以將SPAA強(qiáng)大的統(tǒng)計(jì)分析功能和web服務(wù)的跨平臺性結(jié)合起來,發(fā)揮這兩個(gè)方面的優(yōu)勢,構(gòu)建更強(qiáng)大的應(yīng)用系統(tǒng),以更大程度地發(fā)揮SPSS的分析處理和數(shù)據(jù)挖掘功能。