IBM SPSS Statistics 软件是世界领先的统计软件,它广泛的运用在商业,政府,科研以及教育组织中。它同时也是一款功能全面并且易用的数据分析以及预测软件工具,能够满足商业用户,分析人员以及程序员的不同需求。不论你是本软件的初学者或是资深分析师或统计师,IBM SPSS Statistics 软件都能够带给你强大的数据分析以及预测能力。
SPSS Statistics 在 2009 年并入 IBM 后,对其产品做出了战略性的调整,IBM SPSS Statistics 与第三方集成的能力有了很大的增强,它提供了很多种集成方式,使第三方能够以高性能、低成本的方式,简单易用地把 IBM SPSS Statistics 集成到其产品中,来完成自己的数据分析业务。接下来,将详细地介绍 IBM SPSS Statistics 软件的各种集成方法。
IBM SPSS Statistics 作为一个强大的统计工具,除了可以被集成到 IBM SPSS 家族的其他产品内部,同时它还提供了非常灵活的接口及 API,供外部的应用程序调用。为了使读者更好的了解 IBM SPSS Statistics 的集成应用方法,下面我们从三个层面来阐述它的集成方式。
IBM SPSS Statistics 有着强大的数据处理功能。除了自带格式的数据外,还可以处理很多种类型的数据如:excel 表格、lotus 文件、文本文件、各种类型的数据库表(包括 Oracle, SQLServer, Access, dBASE 等)、SYSTAT 数据文件、SAS 数据文件、Stata 数据文件。
在这里,我们有必要介绍一下 SPSS IO Module 和 IBM SPSS Statistics Data File Driver。
SPSS IO Module 是为开发者提供的一套 API, 开发者可以从自己的客户端程序里调用 SPSS IO Module 用于操纵 SPSS Statistics 二进制数据文件,可进行的操作有:
- 读和写文件操作
- 设置文件的一般属性,创建变量
- 设置变量值
- 读取 case
- 拷贝数据字典
- 添加 case 到数据文件
- 直接访问数据
IBM SPSS Data File Driver 允许用户从支持 ODBC 或 JDBC 的第三方应用程序中读取 IBM SPSS Statistics 数据文件(.sav),并将其以数据库表的结构展示出来。
IBM SPSS Statistics Server 自带了一个批处理程序用于自动执行 Statistics syntax,这个程序位于 Statistics Server 的安装路径下,它就是 Statisticsb。当用户在使用 Statistics 客户端程序时,他可以通过图形界面或 syntax 命令窗口来交互式地完成统计分析和报表输出工作。而 Statisticsb 则旨在于在无人干预的情况下自动完成统计分析和报表输出。当用户需要做重复而又耗时的统计分析时,batch 模式就会变得非常有效。Statistics 的所有工作都可以通过 syntax 来完成,用户可以把需要完成的各项工作编辑成为一个 Statistics syntax 文件,交给 Statisticsb 来执行,甚至可以把 Statisticsb 嵌入到自己的程序中,在后台运行。
可以在命令行窗口,通过执行以下命令来启动一个 Batch 任务:
statisticsb -f syntaxfile -type outputtype -out outputfile |
syntaxfile: 需要由 Statisticsb 来执行的 syntax 文件
outputtype: 统计结果输出的格式,可以是 text,html,oxml,xml,sav,spv,spw 等
outputfile: 保存输出结果的文件名和路径
例如,命令:
statisticsb -f "C:\syntaxjobs\bank.sps" -type text -out C:\output\bank.txt |
将会执行 syntax 文件 bank.sps,并将输出的文本保存到 bank.txt 中。
在运行 statisticsb 时,可以通过不同参数来控制。常用的参数有:
- – f 输入的 syntax 文件
- – out 指定统计结果输出的位置
- – type 指定统计结果输出的格式,目前有 text,html,oxml,xml,sav,spv,spw 等
- – out 统计分析结果输出的文件的名字和位置
- – t 用 tab 作为列的分隔符
- – language 指定输出的语言类型
- – locale 执行系统运行的 locale
详细的操作命令可以参照 Statistics 用户手册。
XDAPI 是 eXternal Drive Application Program Interface 的缩写。XDAPI 是用 C 语言开发的接口,通过这套标准 C API,集成方可以用应用整个 backend 的功能。这套 C API 的接口声明在 spssxd.h 中。用户可以在 IBM 的开发支持中心下载 Statistics SDK 开发包,并从中提取 spssxd.h。
XDAPI 主要由四部分组成。
基本功能部分
为了使用 Statistics backend,用户首先需要启动 backend,对应的 XD C API 是 StartSpss(const char* commandline = 0)。参数 commandLine 表示启动时可以控制 backend 的信息,具体可以参考 spssxd API 的使用手册。StartSpss()函数的返回类型是一个整数,表示执行成功与否以及对应的错误信息。返回 0 表示执行成功,backend 正常启动。19 表示没有 license。 在使用完 Statistics backend 后,用户需要调用 StopSpss(),释放资源和清理临时文件等。在启动 backend 后,用户可以调用任何的 XD API 实现自己想要的功能。这里我们介绍两个和 syntax 相关的 API,一个是 QueueCommandPart(const char* line, int length); 另一个是 Submit(const char* command, int length)。QueueCommandPart 是将 Statistics 的 syntax 提交到后台,但是不执行这些 syntax。每一个 syntax 被当做输入的一行 syntax。如果一行 syntax 带有一个结束符,则下一行 syntax 被作为一个新的 syntax。Submit 是提交 syntax 到 backend,并执行这些 syntax。可以将 QueueCommandPart 和 Submit 结合起来来执行大批量的 syntax。
在基本功能部分,还有一些非常有用的 C API,这里做简要介绍。IsBackendReady() 用来检查 backend 是否正常工作;IsUTF8mode() 获取当前 backend 是否运行在 UTF 模式下;GetVariableCount() 用来获取当前后台数据的变量个数,GetRowCount() 用来获取数据的数量;GetVariableName() 用来获取变量的名字;其余的 API 可以参考 XD C API 手册获取。
这里给出一个基本功能的例子:
清单 1. 调用 XD API 基本示例#include <spssxd.h> int main(int argc, char* argv) { int errLevel = StartSpss(); char *cmd = "get file='C:/Employee data.sav'."; errLevel = Submit(cmd,strlen(cmd)); assert(errLevel < 3); char *showver = "show ver."; errLevel = Submit(showver,strlen(showver)); assert(errLevel < 3); StopSpss(); return errLevel; }
Cursor 数据处理部分
在 Statistics 的设计中,可以有很多个数据集,但是只能有一个激活的数据集(active dataset),统计算法就是基于这个激活的数据集进行统计分析。 Cursor 就是用来操作这个激活的数据集的。Cursor 支持三种数据操作模式,就是读模式,写模式,还有追加模式。在 XD C API 中, 需要调用 MakeCaseCursor(const char *accessType = "R") 函数来创建一个 Cursor,参数 accessType 确定了操作模式,缺省为读模式, 当 accessType 是“W”时,表示的是写模式,当 accessType 是“A”时,表示的是追加模式。
下面是一个写模式的 Cursor 操作例子。
清单 2. 写模式 Cursor 操作示例#include <spssxd.h> int main(int argc, char* argv) { int errLevel = 0; errLevel = StartSpss(); char *cmd1 = "GET FILE='Employee data.sav'."; errLevel = Submit(cmd1,strlen(cmd1)); int hasCursor = 0; errLevel = HasCursor(hasCursor); errLevel = MakeCaseCursor("w"); errLevel = HasCursor(hasCursor); int varCount = GetVariableCount(errLevel); int *varType = new int[varCount]; for(int i = 0; i < varCount; i++) { varType[i] = GetVariableType(i,errLevel); } int rowCount = GetRowCount(errLevel); int curPos = 0; double dResult; char *cResult; int isMissing; for(int i = 0; i < rowCount; i++) { errLevel = NextCase(); errLevel = GetCursorPosition(curPos); std::cout << "cursor position is " << curPos << std::endl; for(int j = 0; j < varCount; j++) { if(varType[j] == 0) { errLevel = GetNumericValue(j,dResult,isMissing); std::cout << dResult << " "; } else { cResult = new char[varType[j] + 1]; memset(cResult,'\0',varType[j] + 1); errLevel = GetStringValue(j,cResult,varType[j] + 1,isMissing); std::cout << cResult << " "; } } std::cout << std::endl; } errLevel = RemoveCaseCursor(); if(IsXDriven()){ StopSpss(); } }
Datastep 数据支持功能
Datastep 是用来操作非激活的数据集。Datastep 支持同时操作多个数据集,对于每一个数据集, 它都支持增加或删除一个变量,修改任意一个数据元的数据,读取任意一个数据。
-
Pivottable 功能
Privottable 功能使用户可以根据自己的需要制作不同的 Pivottable 来展示自己的结果。 在使用 Pivottable 时,用户首先需要调用 StartPivotTable(const char* outLine, const char* title, const char* templateName, bool isSplit) 来创建一个 Pivottable。然后根据自己的需要,可以增加 title,outline,footnotes,captions 和 Dimensions 等等。
下面是一个使用 Pivottable 的例子:
清单 3. Pivottable 操作示例#include <spssxd.h> int main(int argc, char* argv) { int err = 0; if(!IsBackendReady()){ err = StartSpss(); } if( 0 == err ){ const char *cmd = "Get file = 'demo.sav'."; Submit(cmd, strlen(cmd)); StartProcedure("proc1"); StartPivotTable("outline","title","mytitle",false); AddDimension("outline","title","mytitle",false,"rowdim",0,1,false,false); AddDimension("outline","title","mytitle",false,"coldim",1,1,false,false); EndProcedure(); } if(IsXDriven()){ StopSpss(); } }
目前,IBM SPSS Statistics team 基于 XD API 开发出了一系列的 plug-in 程序,作为 SPSS Statistics 的扩展,如 python plug-in, R plug-in, .Net plug-in, 通过这些 plug-in 程序,用户可以在 python, R, .Net 程序中调用 SPSS Statistics backend, 也可以在 Statistics 程序中运行这些语言编写的脚本。用户还可以到 IBM 开发支持中心下载 Statistics SDK 开发包,开发自己的 plug-in 程序。
Statistics 提供了大量的统计方法,通过集成 Statistics,第三方的产品或者解决方案可以应用 Statistics 提供的统计方法来支持和加强自身产品的功能。目前,比较常见的集成案例有 IBM SPSS Modeler 集成 Statistics,Python 集成 Statistics。
IBM SPSS Modeler 与 Statistics 的集成
IBM SPSS Modeler 是业内久享盛誉的数据挖掘平台,它采用商业技术快速建立预测性模型,并将其应用于商业活动,从而改进决策过程。通过 Statistics 提供的 XDAPI,Modeler 可以集成 Statistics 的全部功能,在 Modeler 中,可以把 IBM SPSS Statistics 作为一个 node 来使用。目前,Modeler 中支持的 Statistics node 有 file node,transform node,output node,model node, export node,不同的 node 提供不同的 statistics 功能。如下图所示,在 Statistics Output node 中,用户用 freq all 的 Statistics Syntax 来使用 Statistics 的 frequence 算法。
图 1. Modeler 与 Statistics 集成示例
Python 与 IBM SPSS Statistics 的集成
Python 是一种面向对象、直译式计算机程序设计语言。这种语言的语法简捷而清晰,并且具有丰富和强大的类库。它能够很轻松的把用其他语言制作的各种模块(尤其是 C/C++) 轻松地联结在一起。Python 也是一种开源语言,有大量的用户群体,通过开发基于 Statistics 的 Python plug-in,Python 的用户就可以使用 Statistics 的统计功能。 Python plug-in 应用 XDAPI 来访问和使用 Statistics。Python 用户在安装了 Statistics 产品后,在 Statistics 的官方网站下载对应的 Python plug-in, 就可以在自己开发的 python 程序中使用 Statistics 功能。以下是一个在 Python 程序中的使用 Statistics 的代码示例。
清单 4. 在 Python 中调用 Statistics 代码示例
import spss
spss.StartSPSS()
spss.Submit(“get file= ’ c:/ bankloan.sav ’ .”)
spss.Submit(“FREQ ALL.”)
spss.StopSPSS()
|
可以把这段代码保存为文件 frequency.py,运行后可以得到相应的统计结果。
图 2. 在 Python 脚本中调用 Statistics 运行结果
SPSS 于 2009 年加入 IBM,成为 IBM 智慧地球战略的中坚力量之一, SPSS Statistics 与其他软件的集成方式也将随着 IBM 市场策略的变化而进行演进。在不远的将来, Saas 模式以及向云平台的迁移,将会成为 IBM SPSS Statistics 软件与其他软件进行集成的主要方式。
学习
- 通过
数据预测统计分析产品 IBM SPSS Statistics 实例应用讲解,了解数据预测分析的流程和 IBM SPSS Statistics 的基本概念和操作
-
developerWorks Information Management 专区:了解关于信息管理的更多信息,获取技术文档、how-to 文章、培训、下载、产品信息以及其他资源。
-
developerWorks 上的 Cognos 页:获取用以提高您在 Cognos 业务分析方面的技能和资源。
-
随时关注 developerWorks技术活动和 网络广播。
获得产品和技术
- 下载
IBM 产品评估版或 在线试用 IBM SOA Sandbox,并开始使用来自 DB2®,Lotus®,Rational®,Tivoli®和 WebSphere®的应用程序开发工具和中间件产品。
讨论
- 参与论坛讨论。
- 加入
developerWorks
博客,并加入 My developerWorks 中文社区;您可以通过个人档案和定制主页获得符合自己的兴趣的 developerWorks 文章,并与其他 developerWorks 用户进行交流。


