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