跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

IBM SPSS Statistics 软件的集成意义及方法

范晔, 产品开发经理, IBM
范晔的照片
范晔,2004 年毕业于英国萨塞克斯大学,并获得计电子商务专业的硕士学位,2006 年加入 IBM,现任 Statistics 产品开发经理。
吴文庆, 软件工程师, IBM
吴文庆的照片
吴文庆,2005 年加入 IBM,从事 Statistics 后台的开发,有丰富的与第三方产品集成的经验。
杨静, 软件工程师, IBM
杨静的照片
杨静,2010 年加入 IBM,从事 SPSS Statistics 与 SPSS Modeler 的集成开发。

简介: 本文从用户的角度出发,全面介绍了如何应用 IBM SPSS Statistics 软件与 IBM IM 家族中其他产品进行集成,为用户搭建一个智慧的决策分析平台,从而使其在市场竞争中立 于不败之地。通过这篇文章,用户可以了解到 IBM SPSS Statistics 的强大功能,IBM SPSS Statistics 与 IBM IM 家族中其他成员产品之间的关系以及已有的集成方法。

发布日期: 2012 年 1 月 04 日
级别: 中级
访问情况 : 573 次浏览
评论: 


IBM SPSS Statistics 软件简述

IBM SPSS Statistics 软件是世界领先的统计软件,它广泛的运用在商业,政府,科研以及教育组织中。它同时也是一款功能全面并且易用的数据分析以及预测软件工具,能够满足商业用户,分析人员以及程序员的不同需求。不论你是本软件的初学者或是资深分析师或统计师,IBM SPSS Statistics 软件都能够带给你强大的数据分析以及预测能力。

IBM SPSS Statistics 软件集成的意义

SPSS Statistics 在 2009 年并入 IBM 后,对其产品做出了战略性的调整,IBM SPSS Statistics 与第三方集成的能力有了很大的增强,它提供了很多种集成方式,使第三方能够以高性能、低成本的方式,简单易用地把 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),并将其以数据库表的结构展示出来。

Batch/Server 模式

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 时,可以通过不同参数来控制。常用的参数有:

  1. – f 输入的 syntax 文件
  2. – out 指定统计结果输出的位置
  3. – type 指定统计结果输出的格式,目前有 text,html,oxml,xml,sav,spv,spw 等
  4. – out 统计分析结果输出的文件的名字和位置
  5. – t 用 tab 作为列的分隔符
  6. – language 指定输出的语言类型
  7. – locale 执行系统运行的 locale

详细的操作命令可以参照 Statistics 用户手册。

內镶模式 XD API

XDAPI 是 eXternal Drive Application Program Interface 的缩写。XDAPI 是用 C 语言开发的接口,通过这套标准 C API,集成方可以用应用整个 backend 的功能。这套 C API 的接口声明在 spssxd.h 中。用户可以在 IBM 的开发支持中心下载 Statistics SDK 开发包,并从中提取 spssxd.h。

XDAPI 主要由四部分组成。

  1. 基本功能部分

    为了使用 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; 
      }              
    

  2. 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(); 
      } 
      }              
             

  3. Datastep 数据支持功能

    Datastep 是用来操作非激活的数据集。Datastep 支持同时操作多个数据集,对于每一个数据集, 它都支持增加或删除一个变量,修改任意一个数据元的数据,读取任意一个数据。

  4. 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 程序。

IBM SPSS Statistics 软件集成案例

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 集成示例
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 运行结果
在 Python 脚本中调用 Statistics 运行结果

IBM SPSS Statistics 软件集成的展望

SPSS 于 2009 年加入 IBM,成为 IBM 智慧地球战略的中坚力量之一, SPSS Statistics 与其他软件的集成方式也将随着 IBM 市场策略的变化而进行演进。在不远的将来, Saas 模式以及向云平台的迁移,将会成为 IBM SPSS Statistics 软件与其他软件进行集成的主要方式。


参考资料

学习

获得产品和技术

讨论

作者简介

范晔的照片

范晔,2004 年毕业于英国萨塞克斯大学,并获得计电子商务专业的硕士学位,2006 年加入 IBM,现任 Statistics 产品开发经理。

吴文庆的照片

吴文庆,2005 年加入 IBM,从事 Statistics 后台的开发,有丰富的与第三方产品集成的经验。

杨静的照片

杨静,2010 年加入 IBM,从事 SPSS Statistics 与 SPSS Modeler 的集成开发。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=783888
ArticleTitle=IBM SPSS Statistics 软件的集成意义及方法
publish-date=01042012

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。