要资料 文章 文库 视频 Code iProcess 课程 认证 咨询 工具 火云堂 讲座吧   成长之路  
会员   
 
  
每天15篇文章
不仅获得谋生技能
更可以追随信仰
 
 
     
   
分享到
使用 RDOM 程序包进行数据挖掘
 
作者 Casimir Saternos,火龙果软件    发布于 2013-12-17
 

数据挖掘、预测分析和统计技术通常不会成为重大新闻。然而,New York Times 去年引用了 Google 首席经济学家 Hal Varian 对未来十年统计学家的巨大需求之预测。他们还发表了一篇有关日益流行的 R 语言作为数据分析工具的文章。

R 是 SPSS 和 SAS 等统计软件的一个开源替代品。它类似于 S 语言(由 John Chambers 和贝尔实验室的其他人员开发),同样受到 Scheme(一种重要的 Lisp 方言)的影响。它可用于通过交互式编程环境执行数据分析和可视化。

Oracle Database 包括广泛的统计和分析功能。其标准安装中提供了许多特性,包括 Oracle SQL 分析功能和 DBMS_STAT_FUNCS 程序包。Oracle Database 还提供可选的程序包来补充这些功能,包括 Oracle OLAP。

在所有高级分析功能中,最强大的或许就是 Oracle Data Mining (ODM) 选件,它提供了 12 种数据挖掘算法,用以发现数据库中的模式和关系、在数据库中构建和应用描述性、预测性的数据挖掘模型。

本文将介绍如何结合使用 Oracle Database 11g 企业版和通过一个 R 接口 (RODM) 访问的 ODM 选件。ODM 可以对数据库内的数据进行分析。这样能消除传输数据所需的时间、开销和资源。数据安全地保留在数据库中,从而减少因信息延迟而造成的问题。

Oracle Database 还有一个名为 Oracle Data Miner“Classic”的 ODM 图形用户界面以及一个全新的 Oracle Data Miner 11g 第 2 版工作流 GUI,后者是 SQL Developer 的一个扩展,即将推出早期试用版。现在,对于已经熟悉了开源 R 语言的数据分析师,还有另外一种解决方案:RODM 程序包

RODM 程序包允许 R 用户与 Oracle Database 和 ODM 功能交互。用户可以分析和操作数据,而无需使用 SQL 或 PL/SQL。这个程序包由 Pablo Tamayo 和 Ari Mozes 编写,可从 Comprehensive R Archive Network (CRAN) 下载。该程序包依靠 RODBC 包与 Oracle 数据库连接并执行基本数据操作。

RODM 允许 R 用户使用熟悉的 R 语法访问 ODM 数据库中函数的强大功能。RODM 提供了一个强大的环境,用于构建数据分析和数据挖掘方法的原型。RODM 在以下方面特别有用:

1、快速构建垂直的或基于域的由 Oracle Database 支持的应用程序原型

2、编写“生产”数据挖掘方法的脚本

3、定制 ODM 数据挖掘结果的图形(例如:分类、回归、异常检测)

RODM 接口允许 R 用户在 R 编程环境中使用 ODM 挖掘数据。它包含一组用 R 语言源代码编写的函数包装器,这些包装器通过开放数据库连接 (ODBC) 接口将 R 环境中的数据和参数作为标准用户 PL/SQL 查询传递给 Oracle Database 11g 企业版。RODM 接口代码是一个瘦的逻辑和 SQL 代码层,其包含的逻辑和 SQL 代码通过 ODBC 接口进行调用。RODM 未使用或提供任何 Oracle 产品代码,因为它完全是一种外部接口,并非任何 Oracle 产品的一部分。RODM 类似于展示 ODM 使用的示例脚本(例如,PL/SQL 演示代码),举例来说,展示如何创建数据挖掘模型、传递参数、检索结果等。

软件前提条件

如果尚未安装,请在您的 Microsoft Windows 工作站上安装 R 语言。随后,即可随意安装任何 R 程序包,包括 RODM 程序包。

请注意,要使用 RODM,您将需要访问(或安装)带有 ODM 选件的 Oracle 11g Database。如果您尚未安装 Oracle Database 并且需要从头开始安装,我们强烈建议您遵从 Oracle 数据挖掘管理员指南中的指导。Oracle Database 快捷版(Oracle Database XE)不包括此选件。您还需要一个具有适当安全性和权限的数据库用户以及与数据库的 ODBC 连接。这个数据库用户应具备连接数据库、创建表、创建视图、创建挖掘模型的权限。

以下是创建这种用户的一个脚本。该脚本(请针对您的环境进行修改)需要由 DBA 或其他具有管理权限的人员运行。

CREATE USER dm IDENTIFIED BY  
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 20M ON users;

GRANT create mining model TO dm;
GRANT create table TO dm;
GRANT create view TO dm;
GRANT create session TO dm;

ODBC 连接配置

RODBC 程序包用于连接到 Oracle 数据库。要在 Microsoft Windows 中配置一个 ODBC 数据源,请单击 Start 菜单,依次选择 Control Panel、Administrative Tools 和 Data Sources (ODBC)。

如果尚未建立 Oracle 11g 数据库连接,单击 Add 按钮,输入相关信息。在输入连接信息和凭证之后,选择 Test Connection 按钮验证连通性。

从 R 连接到 Oracle 数据库

R 的交互式编程环境允许单命令的运行和求值单独进行。下面列出的每条命令都可在 R 中单独执行。第一步是载入所需的 R 库。打开 R,输入以下命令。

> library(RODM)

此命令将加载 RODM 库以及相关的 RODBC 程序包。下一步是建立数据库连接。

> DB <- RODM_open_dbms_connection(dsn="orcl", uid="dm", pwd="dm")

后续命令将使用 DB 对象(RODBC 类的一个实例)连接到数据库。命令中指定的 DNS 是您之前在 ODBC 连接配置中对 Data Source Name 使用的名称。通过只键入函数名称(不带圆括号),您可以查看该命令所执行的实际 R 代码。

> RODM_open_dbms_connection

此函数调用 RODBC odbcConnect 函数来建立数据库连接,另外,它还验证数据库的版本(在 Oracle 数据字典 product_component_version 表中)并确保 ODM 选件可用(检查 v$option 表,其中 parameter 列设置为 Data Mining)。它还会验证要建立连接的用户是否具有必要的凭证(查看 user_sys_privs 表),如果需要的话,会创建 RODM_SETTINGS_TABLE 临时表。

对于不关心底层细节的用户来说,最重要的是:成功调用此函数表示您已使用凭证连接到了 Oracle 数据库,这些凭证允许您使用 ODM 程序包。

数据帧和 Oracle 表

R 用户通常操作数据帧、列表和向量等对象。Oracle 数据库在表中存储数据。RODM(和 RODBC)提供了一个转换层,这个转换层用一条命令将 R 数据帧映射到 Oracle 数据库表。

要执行您的首次 Oracle 数据库数据挖掘测试,请选择一个用于统计分析和预测分析任务的标准数据集。使用 data 函数可列出系统中可用的数据集。

> data()

我们将使用 Orange 数据集,这个表包含树木编号、树龄及其周长。查看前几行数据,大体了解 Orange 对象的结构和内容。

> head(Orange)

我们不会直接使用这个 R 数据对象,而是创建一个具有自己名称的变量:

> orange_data=Orange

这并不是必须的,但这么做是为了强调几点。R 中的变量名称用于在 Oracle 数据库中自动创建表。R 区分大小写,但 Oracle 数据库对象名称通常不区分大小写。

在 Oracle 数据库中创建表(将由 ODM 算法和处理使用):

> RODM_create_dbms_table(DB, "orange_data")

您可以查看所创建的表,为此,您可以使用 SQL 查询 user_tables 表,也可以直接使用以下 R 命令列出可用表:

> sqlTables(DB, schema='DM')

您还可以在 R 中列出该表中的列:

> sqlColumns(DB, 'orange_data')$COLUMN_NAME

此功能可能需要您对编码风格进行一些调整。例如,R 用户通常会在其变量名称中包含点。

> orange.data<-Orange

此类变量名称如果用于创建 Oracle 数据库中的表,则会导致出错。

> RODM_create_dbms_table(DB, "orange.data")

Error in sqlSave(database, dat = eval(parse(text = data_table_name)), :
HY000 1918 [Oracle][ODBC][Ora]ORA-01918: user 'ORANGE' does not exist

[RODBC] ERROR: Could not SQLExecDirect 'CREATE TABLE ORANGE.DATA ("TREE" varchar(255),
"AGE" double precision, "CIRCUMFERENCE" double precision)'

错误非常明确,可以轻松避免。选择变量名称时,应使其仅包含字母数字字符和下划线,并且长度不超过 30 个字符。

有些数据挖掘算法要求数据帧包含唯一的“Case ID”,以便唯一地标识一行。下面的 R 命令集就可以对 Orange 数据集做出这样的调整。

> numrows <- length(orange_data[,1]) 
> orange_data.rows <- length(orange_data[,1])
> orange_data.id <- matrix(seq(1, orange_data.rows), nrow=orange_data.rows, ncol=1, dimnames= list(NULL, c("CASE_ID")))
> orange_data <- cbind(orange_data.id, orange_data)

对数据帧的此项调整随后需要传播到数据库。可以使用 sqlColumns 函数确认更改,如前所述。

> RODM_create_dbms_table(DB, "orange_data")
> sqlColumns(DB, 'orange_data')$COLUMN_NAME

请注意,没有必要显式删除表并重新创建表。如果有必要,这些操作将自动完成。

创建并应用一个模型

下表显示了 RODM 函数与对应的数据挖掘算法之间的关系。

函数 描述
RODM_create_ai_model 属性重要性
RODM_create_assoc_model 关联规则
RODM_create_dt_model 决策树
RODM_create_glm_model 一般线性模型
RODM_create_kmeans_model 分层 k-均值
RODM_create_nb_model 朴素贝叶斯
RODM_create_nmf_model 非负矩阵因子分解
RODM_create_oc_model O-cluster
RODM_create_svm_model 支持向量机

所有这些函数都会在后台调用 RODM_create_model 函数,并将数据检索回 R 中。如果您对后台执行的 SQL 和 PL/SQL 语句的细节感兴趣,请设置 sql.log.file 参数,查看日志文件中的命令。

下面这个示例展示了如何创建一个模型。该例使用一般线性模型对 orange_data 执行回归分析。大多数参数是不言自明的。请记住,所指定的 model_name 将在许多数据库对象的名称中使用。默认挖掘函数为 classification,因而本例中需要指定 regression。

> glm <- RODM_create_glm_model(
database = DB,
data_table_name = "orange_data",
case_id_column_name = "CASE_ID",
target_column_name = "circumference",
model_name = "GLM_MODEL",
mining_function = "regression")

通过对从该模型返回并保存在名为 glm 的变量中的值进行分析可获得有关此模型的信息。

> glm$model.model_settings
> glm$glm.globals
> $glm.coefficients

建立了模型之后,即可将模型应用到新数据集。首先,创建或检索与培训数据格式相同的样本数据。

> query<-('select 999 case_id, 1 tree, 120 age, 
32 circumference from dual')

> orange_test<-sqlQuery(DB, query)
> RODM_create_dbms_table(DB, "orange_test")

本例旨在表明,所分析的数据不一定来自 R,还可以来自数据库本身。数据将带回到 R 中,并发送回数据库。然而,如果您具备一些 SQL 认识,您无需使用 CREATE TABLE AS 语法在 R 和 Oracle 数据库之间来回移动数据即可完成此任务。

> RODM_drop_dbms_table(DB, "orange_test")
> sqlQuery(DB, paste('create table orange_test as ', query))

这个方法可提高性能和效率,特别是在处理大型数据集时。最后,该模型可应用于新数据集,结果将得到分析。

results <- RODM_apply_model(database = DB, 
data_table_name = "orange_test",
model_name = "GLM_MODEL",
supplemental_cols = "circumference")

会话完成时,您可以清除所创建的对象(如果您希望这样做),还应关闭数据库连接:

> RODM_drop_model(database=DB,'GLM_MODEL')
> RODM_drop_dbms_table(DB, "orange_test")
> RODM_drop_dbms_table(DB, "orange_data")
> RODM_close_dbms_connection(DB)

总结

人们日益认识到,需要对海量数据进行有效的分析,大部分此类数据都存储在 Oracle 数据库中。统计和建模技术用于改善各种业务功能。使用 R 语言访问 ODM 可发现更多信息,从而提高您的数据价值。RODM 是一个强大的工具,使您的组织能够做出预测、对数据进行分类并创建可视化,获得最高的有效性和效率。

相关文章 相关文档 相关视频



我们该如何设计数据库
数据库设计经验谈
数据库设计过程
数据库编程总结
数据库性能调优技巧
数据库性能调整
数据库性能优化讲座
数据库系统性能调优系列
高性能数据库设计与优化
高级数据库架构师
数据仓库和数据挖掘技术
Hadoop原理、部署与性能调优
 
分享到
 
 
     


MySQL索引背后的数据结构
MySQL性能调优与架构设计
SQL Server数据库备份与恢复
让数据库飞起来 10大DB2优化
oracle的临时表空间写满磁盘
数据库的跨平台设计
更多...   


并发、大容量、高性能数据库
高级数据库架构设计师
Hadoop原理与实践
Oracle 数据仓库
数据仓库和数据挖掘
Oracle数据库开发与管理


领先IT公司 android开发平台最佳实践
北京 Android开发技术进阶
某新能源领域企业 Android开发技术
某航天公司 Android、IOS应用软件开发
阿尔卡特 Linux内核驱动
艾默生 嵌入式软件架构设计
西门子 嵌入式架构设计
更多...   
 
 
 
 
 
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号