作为 IBM 分析与预测解决方案的重要组成部分,IBM SPSS Modeler 是一组数据挖掘工具,通过这些工具可以采用商业技术快速建立预测性模型 ,并将其应用于商业活动,从而改进决策过程。 其可对企业级海量数据进行处理与建模,通过强大的数据库集成功能更可以直 接与企业已有的数据库集成进行数据挖掘。不仅避免了企业资金重复投入, 而且可以获取更好的数据挖掘性能。
比如某公司经过多年的积累,有非常庞大的数据且存储于数据库中 ,希望能使用 SPSS Modeler 在现有数据中进行数据挖掘以做出有利于本公司的决策。 那么公司首先将会面临一些疑问或者问题,包括:SPSS Modeler 如何与数据库沟通, 怎么取得数据进行建模,怎么存储建模结果,如何保证在大型数据上运算的性能,等等。
本系列文章将分三部分针对这些问题一一进行解答,其中第一部分介绍基本知识包括数据库配置及操作, 第二部分介绍数据库集成建模,第三部分介绍性能优化。此为第一部分。
SPSS Modeler 可通过数据库源节点使用 ODBC(开放数据库连接)从多种数据库中导入数据, 包括 DB2、Netezza、Oracle、Teradata、Microsoft SQL Server 等数十种数据库。 要读取或写入到数据库中,您必须为相关数据库安装驱动包并配置 ODBC 数据源, 并根据需要配置读取或写入权限。IBM SPSS Data Access Pack 包含一组用于此用途的 ODBC 驱动程序, 支持多种操作系统平台。
IBM SPSS Modeler 为典型的 C/S 架构产品,如果仅以本地(独立)模式运行 IBM SPSS Modeler ,必须在本地计算机上安装驱动程序。
如果以分布模式连接远程 IBM SPSS Modeler Server 运行 SPSS Modeler,需要在安装 SPSS Modeler Server 的计算机上安装 ODBC 驱动程序
使用下列一般步骤访问数据库中的数据:
- 为要使用的数据库安装 ODBC 驱动程序并配置数据源。
- 在数据库节点对话框中,使用表模式或 SQL 查询模式连接到数据库。
- 从数据库中选择表。
- 使用数据库节点对话框中的选项卡,可以更改使用类型和过滤数据字段。
在后面的章节中将对这些步骤进行更详细地说明。这里首先进行驱动安装与配置。
IBM SPSS Data Access Pack 发布的 Windows 版本包括 32 位与 64 位版本,我们在这里使用 32 位做演示, 请注意在实际使用时选择合适的版本安装。
其安装过程采用典型的 step-by-step 方法,我们只需要使用默认设置一步一步安装即可。 安装完成后,打开控制面板 -> 管理工具 -> 数据源 (ODBC), 在驱动程序页面可以看到已经安装好一批相应的数据库驱动。
图 1.ODBC 驱动
我们以 DB2 为例继续后面的操作,其他数据库类似。
回到 ODBC 数据库源管理器系统 DSN 页面,点击添加按钮,选择 SPSS Inc OEM 6.0 DB2 Wire Protocol 驱动程序。
图 2.ODBC 数据源管理器 - 系统 DSN
图 3.选择驱动程序
在“ODBC DB2 Wire Protocol Driver Setup”对话框中:
- 指定数据源名称。
- 对于 IP 地址,请指定 DB2 RDBMS 所在服务器的主机名。
- 使用默认的 TCP 端口 (50000)。
- 指定要连接的数据库的名称。
之后即可在 SPSS Modeler 中使用创建好的数据源。
图 4.配置 DSN
请注意,在创建 SQL Server DSN 时,如图所示 Enable Quoted Identifiers 前 的选择框须被选中,否则 SPSS Modeler 在运行时会报错。
图 5.SQL Server 高级配置
IBM SPSS Data Access Pack 同时也发布了多种 Linux/Unix 平台版本,如 Solaris(SPARC)、AIX、 HPUX(IPF) 、Linux(x32) 、Linux(x64)、zLinux 等。我们以 AIX 为例来进行演示,其余平台类似。
新建一个目录,如 /usr/SDAP6.0.3.4,将 odbc64v60_aix_SP3.tar.z 拷贝至此目录下,执行解压命令:
gunzip odbc64v60_linuxx64_SP3.tar.z |
得到 odbc64v60_aix_SP3.tar,再运行 tar 解压命令
tar – xvf odbc64v60_aix_SP3.tar |
得到解压后的 SDAP 文件。首先运行 setodbcpath.sh 进行自动设置, 然后通过 VI 程序对 odbc.ini 进行编辑,请注意粗体部分:
清单 1.ODBC 配置
<!-- Please limit code lines to 90 characters max. --> <!-- The following line is the max length: --> [ODBC Data Sources] DB2 Wire Protocol=SPSS Inc. 6.0 DB2 Wire Protocol …(注:此处省略若干行) [DB2 Wire Protocol] …(注:此处省略若干行) #Collection applies to z/OS and iSeries only Collection= ConnectionReset=0 ConnectionRetryCount=0 ConnectionRetryDelay=3 CurrentFuncPath= #Database applies to DB2 UDB only Database=TEST DefaultIsolationLevel=1 DynamicSections=200 EnableBulkLoad=0 EncryptionMethod=0 FailoverGranularity=0 FailoverMode=0 FailoverPreconnect=0 GrantAuthid=PUBLIC GrantExecute=1 GSSClient=native HostNameInCertificate= IpAddress=192.168.1.123 KeyPassword= KeyStore= KeyStorePassword= LoadBalanceTimeout=0 LoadBalancing=0 #Location applies to z/OS and iSeries only Location= LogonID= MaxPoolSize=100 MinPoolSize=0 Password= PackageCollection=NULLID PackageNamePrefix=DD PackageOwner= Pooling=0 ProgramID= QueryTimeout=0 ReportCodePageConversionErrors=0 TcpPort=50000 TrustStore= TrustStorePassword= UseCurrentSchema=1 ValidateServerCertificate=1 WithHold=1 XMLDescribeType=-10 |
在 [ODBC Data Sources] 节下的’ DB2 Wire Protocol ’即为 DSN 名称, 我们可以修改成自定义名称如’ DB2 ’,但是必需注意的是如若改名, 后边的 [DB2 Wire Protocol] 节需要修改成相应的自定义名称,即 [DB2], 其余保持不变。修改后文件将如下:
清单 2.DB2 ODBC 配置
<!-- Please limit code lines to 90 characters max. --> <!-- The following line is the max length: --> [ODBC Data Sources] DB2=SPSS Inc. 6.0 DB2 Wire Protocol …(注:此处省略若干行) [DB2] …(注:此处省略若干行) #Collection applies to z/OS and iSeries only Collection= ConnectionReset=0 ConnectionRetryCount=0 ConnectionRetryDelay=3 CurrentFuncPath= #Database applies to DB2 UDB only Database=TEST DefaultIsolationLevel=1 DynamicSections=200 EnableBulkLoad=0 EncryptionMethod=0 FailoverGranularity=0 FailoverMode=0 FailoverPreconnect=0 GrantAuthid=PUBLIC GrantExecute=1 GSSClient=native HostNameInCertificate= IpAddress=192.168.1.123 KeyPassword= KeyStore= KeyStorePassword= LoadBalanceTimeout=0 LoadBalancing=0 #Location applies to z/OS and iSeries only Location= LogonID= MaxPoolSize=100 MinPoolSize=0 Password= PackageCollection=NULLID PackageNamePrefix=DD PackageOwner= Pooling=0 ProgramID= QueryTimeout=0 ReportCodePageConversionErrors=0 TcpPort=50000 TrustStore= TrustStorePassword= UseCurrentSchema=1 ValidateServerCertificate=1 WithHold=1 XMLDescribeType=-10 |
至此 SDAP 配置完成,但 Linux/UNIX 平台上的 SPSS Modeler Server 还 需要一个步骤才能调用到 SDAP 数据源,即在 modelersrv.sh 脚本中添加 SDAP 的 odbc.sh 路径,如下:
. /usr/SDAP6.0.3.4/odbc.sh |
注意在“.”后有一个空格。重启 SPSS Modeler Server 后即可使用配置好的 SDAP 数据源。
对于某些特殊的数据库(如:Teradata, Netezza, Sybase) 我们需要数据库提供商发布的 ODBC 驱动,并且按照他们的说明进行安装配置。
之前的章节中,我们主要讲述了如何在操作系统中配置 ODBC。 下面我们将展示如何在 SPSS Modeler 中如何将数据导入 SPSS Modeler 及 如何将数据导出到目标数据库。首先为大家展示的是,如何在 SPSS Modeler 中 选择创建好的数据源并连接到目标数据库。在 SPSS Modeler 中, 点击工具菜单中的数据库菜单项,数据库连接对话框将被打开。 在数据库连接对话框中,服务器部分显示了当前连接的 Modeler Server 的地址 。数据源列表则列举了 Modeler Server 上所有可用的数据源。 用户可以点击刷新按钮刷新数据源列表。在此,用户需要选择目标数据源 ,并输入用户名和密码。当用户点击连接按钮时, SPSS Modeler 将使用用户输入的用户名和密码连接目标数据源。 当连接成功建立后,在该对话框的连接列表里将显示所有已经建立连接的数据源。
图 6.数据库连接对话框
SPSS Modeler 提供了一系列的节点为用户提供了将数据或执行结果写入 特定文件或数据库的功能。其中,数据库导出节点提供了将执行结果写入 遵循 ODBC 标准的数据库的功能。当然,使用该节点时目标数据库必须存在 并且当前连接用户必须拥有足够的权限。数据库导出节点为用户提供三种 导出模式,用户可以根据自己的需要定制相应的数据库操作。这三种模式 分别是:创建表模式,插入表中模式和合并表格模式。
考虑到读者可能会没有合适的数据用来做练习,本文将会先把源数据通 过 SPSS Modeler 导出至数据库,而不是从使用数据库中已有的数据建模开始。 然后将使用数据库源节点从数据库读入数据并替换示例流中现有源节点进行建模, 最后将建模后的评分结果导出并合并至数据库中存储。本示例使用了名为 modelingintro.str 的流,数据文件是 tree_credit.sav。 (与示例一起使用的数据文件和样本流安装在产品安装目录下的 Demos 文件夹中。)此 数据流用来预测客户是否会拖欠贷款,以此来帮助决定是否发放贷款给此客户。 有关此数据流的详细讲解请参考数据挖掘产品 IBM SPSS Modeler 新手使用入门。
首先打开流,此时假设数据库内没有我们建模所需要的数据, 我们需要在类型节点后面连接一个数据库导出节点,如下图
图 7.流 modelingintro.str
双击数据库导出节点打开其编辑对话框,这时我们可以选择在数据库 连接对话框里建立的数据库连接,或者直接在这里调出数据库连接对话框 连接新的数据库,方法为:在数据源栏下拉框选择 添加新数据库连接, 将调出数据库连接对话框,剩下的操作与前面相同。连接成功后可在下方列表里看到 已连接成功的数据源,选中它并点击 确定,即可在数据库导出节点中对此 数据源中的数据进行操作。
图 8.数据库导出编辑对话框——数据源
创建表模式
选中此模式时 SPSS Modeler 将创建一个新的数据库表或覆盖现有的数据库表。
在使用创建表模式时,用户须要在表名称一栏添写将要创建的新数据库表的名称。 此时若选中选项放弃现有表,则可在创建新表时删除所有名称相同的现有表, 然后创建同名的新表。若没有选中该选项,并且数据库中已经存在同名表时, SPSS Modeler 会在执行时报告有同名表存在并终止运行。
图 9.数据库导出编辑对话框——创建表模式
当选择创建表模式时,除了使用默认设置外,用户还可以利用数据库导出“计划”对话框, 设置字段的 SQL 数据类型,指定主要关键字字段,自定义 CREATE TABLE 语句。 该对话框由几个部分组成:
InfoSphere Warehouse 选项部分包含导出到 InfoSphere Warehouse 数据库 (IBM DB2 9.7 或更高版本)的选项。如果没有连接到类似数据库, 则不会显示此部分。
中间的文本字段显示用于生成 CREATE TABLE 命令的模板,该字段的默认格式:
CREATE TABLE <table-name> <(table columns)>下方的表格用于指定每个字段的 SQL 数据类型,并指明如下所述的哪些字段为主要关键字。 该对话框将根据表中的设定自动生成 table-name 和 table columns 参数的值, 此处我们不做演示,请点击取消放弃保存设置。
图 10.计划对话框
使用“索引”对话框,可创建数据库表索引,指定要包含的字段集合并根据需要自 定义 CREATE INDEX 命令。
该对话框由两部分组成,上方的文本字段显示可用于生成一个或多个 CREATE INDEX 命令 的模板,该字段的默认格式为:
CREATE INDEX <index-name> ON <table-name>
对话框下方的表用于指定要创建的各个索引。可指定每个索引的名称以及要包含的字段或列。 对话框将依次自动生成 index-name 和 table-name 参数的值。 例如,可以为字段 Age 和 Income level 生成如下所示的单索引 SQL 语句
CREATE INDEX MYTABLE_IDX1 ON MYTABLE("Age", "Income level" )
可以添加多行创建多索引。每一行将单独生成一个 CREATE INDEX 命令。 比如下图我们为字段 Age 生成索引,确定保存后运行流。
此外还可以为所有索引或仅为特定索引自定义 CREATE INDEX 命令。 通过此选项可以灵活地调整设置,以兼容特定数据库要求或选项, 还可以根据需要对所有索引或仅对特定的单个索引进行自定义。 选择对话框上方的自定义 CREATE INDEX 命令选项,可修改所有 后续添加的索引使用的模板。请注意,系统不会自动对已添加到 表中的索引应用更改。
图 11.索引对话框
插入表中模式
选中此模式可将数据作为新行插入现有的数据库表中。
当使用此模式时,用户需要选择一个已存在的表或直接输入一个已存在 表的名称。若用户输入的表名不存在,则 SPSS Modeler 会在执行过程中报 错并停止执行。
当使用此模式时,用户可以通过选中“删除现有行”将所选表中的所有 行全部删除,然后将新数据插入表中。若该选项没有选中,则新生成的 数据会被直接插入表中,不会对原有数据造成影响。
图 12.数据库导出编辑对话框——插入表中模式
合并表格
选择此模式以使用相应源数据字段中的值更新所选数据库列。
图 13.数据库导出编辑对话框——合并表格模式
选中该选项后,合并按钮将被激活。点击合并按钮,打开“将数据 合并到数据库”对话框。此处,用户可以将源数据字段映射到目标数据 库表中的列,并选择可能的关键字。在运行流时,根据用户选择的关键 字以及字段和数据库列的对应关系,映射的数据库字段值将被替换为 源数据值,而未映射的字段在数据库中保持不变。
例如我们运行数据流 modelingintro.str 里的 CHAID 模型节点生 成一个模型块,连接模型块与数据导出节点
图 14.将数据合并到数据库对话框流
我们已经知道在模型节点中会新生成两个预测字 段:$R-Credit rating 和 $RC-Credit rating。如果我们希望只 更新这两列数据进入数据库,而不改动数据库中表 tree_credit 已有的数据,那么就可以使用合并功能。很明显这种方式比起重新将 所有数据写入数据库中会节省很多时间。
图 15.将数据合并到数据库对话框
另外还有 将记录添加到数据库选项,可以用来将数据集里新添加的数据 插入到数据库表中而不改变数据库中原有数据,这里不再演示
批量导出
数据库导出高级选项对话框里有一项设置可以在数据量大的时候显著提高性能。 选择 使用批量载入 - 通过 ODBC项可使用 ODBC API 执行多行插入, 比正常导出到数据库的速度更快。在选中 通过 ODBC时可以选择 ODBC 高级选项:
行为主- 选择逐行绑定,可使用 SQLBulkOperations 调用将数据载入数据库。通常,与逐条插入数据的参数化插入相比, 逐行绑定的速度更快。
列为主- 选中此项可使用逐列绑定将数据载入数据库。 逐列绑定可通过为每列数据库(位于参数化 INSERT 语句中) 绑定一组 N 值提高处理速度。每次执行 INSERT 语句时都会 在数据库中插入 N 行。此方法可以大大提高处理速度。
图 16.批量导出选项
在执行 SPSS Modeler 数据流的时候,可以在流属性消息页面看到流执行完成。 可以通过在数据流上点击右键选择流属性打开该页面。
图 17.流执行消息
如上图所示,如果没有进行特殊设置,则消息相当简单且没有相关 SQL 的消息, 我们可以通过设置 SPSS Modeler 的相关选项,从而使用户能够看到 SPSS Modeler 生成的 SQL,以及每条 SQL 的执行结果。
从主菜单工具 - 选项 - 用户选项,选择 执行流期间 在消息日志中显示 SQL 与流准备期间在消息日志中显示关于 SQL 生成的详细信息。
图 18. SQL 相关的用户选项
设置该选项后,再次运行流即可看到更为详细的 SQL 消息。 如下图,此为执行将数据合并到数据库时所报告消息。
图 19.详细流执行消息
SPSS Modeler 的源节点提供了将存储在各种文件或数据库中的数据导入 SPSS Modeler 的功能。用户可以在源节点后添加其他节点对导入的数据 进行进一步处理,或使用导入的数据进行建模工作。在所有的源节点中, 数据库源节点提供了将数据从各种遵循 ODBC 标准的数据库中导入到 SPSS Modeler 的功能。数据库源节点为用户提供了两种 使用模式:表模式和 SQL 查询模式。
表模式
如其名所示,表模式为用户提供了将单张数据库表或视图 中的数据整体导入 SPSS Modeler 的功能,使用此种模式时, 用户只需选择需要导入的表或视图即可。下面是使用该模式的一个简单示例
图 20.数据库导入节点示例
双击数据库导入节点,将打开编辑对话框后在数据源栏下拉框, 选择在前面的演示中已经成功连接的数据源并点击确定, 即可以使用数据库导入节点将此数据源中的数据 导入 SPSS Modeler。在选择好数据源之后,用户要需要填写表名称。
图 21.数据库导入节点编辑对话框
在此,用户可以点击 选择按钮,选择表 / 视图对话框将被打开。 用户可以再次浏览该数据源中的表和视图并进行选择, 选择的表明将被显示在表名称栏。用户也可以直接编辑该栏, 填入目标表或视图的名称即可。运行表节点即可将目标表中 的数据导入 SPSS Modeler 并显示在输出表中。我们可以从图中 看到 CHAID 模型新产生的两列数据 $R-Credit rating 和 $RC-Credit rating。
图 22.选择数据库表或视图
图 23.数据库导入结果
表模式简单易用但是提供的功能也相对比较单一, 如果用户需要剔除表中的某些字段或需要导入多个表 或视图关联的数据,则这种模式无法满足用户的需求。 在这种状况下用户可以选择使用 SQL 查询模式
SQL 查询模式
当选择 SQL 查询模式时,用户将看到一个查询编辑器窗口。 在查询编辑器中创建或载入 SQL 查询,则该查询的结果集合将 被导入到数据流中。比如下面示例中,可以通过编写 SQL 查询语句, 只导入 Age, Incoming level 和新产生的两列,如图所示。
图 24.数据库导入节点查询编辑器
图 25.数据库导入 SQL 查询结果
其实在这里不仅仅可以输入查询语句,用户甚至可以把它当作一个简单的 SQL 客户端来使用。
本文从 IBM SPSS Modeler 所需数据库驱动程序及配置开始, 通过介绍常用数据库节点的操作,使读者初步了解 SPSS Modeler 基 本的数据库集成功能,下一部分将介绍数据库内建模。
学习
-
“数据挖掘产品 IBM SPSS Modeler 新手使用入门”介绍使用 IBM SPSS Modeler 进行数据挖掘的基本流程。
- 在 developerWorks 中国网站 Information Management 专区 了解关于信息管理的更多知识。可以从那里查找技术文档、how-to 文章、教学、下载、产品信息等。
- 随时关注 developerWorks 技术活动 和 网络广播。
获得产品和技术
- 通过 IBM 产品评估试用版软件构建您的下一个开发项目,该软件可直接从 developerWorks 下载。
讨论
- 参与论坛讨论。
- 查看 developerWorks 博客,并加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。
