今天看到老同学@JulieJulieJulieJulie浪漫求婚,真的很浪漫、很唯美、很感动。正如评论说的,我们又相信爱情了!于是,小兴奋,睡不着,爬起来补一篇文章。

## 正文开始

最近在数据挖掘专业网站 KDnuggets 上刊出了2011年度关于数据挖掘/分析语言流行度的调查,不出意料R、SQL、Python果然排在了前三位。当然有看官说了,参与调查的样本数量太少,而且以登录KDnuggets网站的用户为主,样本的信息显然是有偏的。实话说,我也对KDnuggets网站的Poll持保留态度,但它的结果毕竟代表了某一类人群的使用偏好,尤其是在语言角度。

我们看排名前5位的语言:

  1. R:世界范围内的标准统计语言,以快速更新的算法,灵活的编程,广泛的扩展,绚丽的图形著称,遵循GPL协议的开源软件
  2. SQL:大部分企业使用的,数据仓库、集市的通用查询语言,在大型数据应用上有极大的优势,同时也是数据分析/挖掘的基础
  3. Python:传说中的Google的三大开发语言,适用于粘合一些复杂应用,我这里工作暂时没有涉及过
  4. Java:太多的应用都基于Java的,不然Oracle也不会花上74亿美元收购SUN了
  5. SAS:曾经的数据分析领域老大,当然现在市场份额依旧非常高。但SAS昂贵的使用费用迫使更多的分析工作者转到了开源领域,比如R

后四种语言同R语言还都有一些关系,闲扯起来还真是没完没了,这里就不再赘述,各位可以在搜索引擎上搜索R+XXX。如果我们将范围限制在数据挖掘这个主题,R同SQL的关系则变得非常非常紧密。

众所周知,R的强项在于灵活的算法,以及开发速度,但其所有的计算都是在内存中进行,一旦数据量达到了内存上限,基本上就是叫天天不灵,叫地地不应了。所以在使用R做数据挖掘时,就必须考虑使用其他的数据工具弥补R在这方面的劣势。尤其是在商业应用上,不能搭建R环境的条件下,SQL语言是提供挖掘结果的不二选择。

支持SQL的商用数据库比如Oracle、DB2性能优异,但对系统的占用非常厉害,假如本地装了Oracle,又开了点其他应用,2G的内存很快就会吃到1.5G甚至以上,再想用R做分析那只能用“捉襟见肘”这个词来形容了。当然如果在办公条件下有相应的服务器环境最好,在某些应用环境下,甚至可以通过本地多开R进程来达到并行计算的目的。

或者本地分析比较多,但数据量又时常上到百兆,虽然R也能够处理,但依然建议将数据移植到本地构建的轻量数据库环境,比如MySQL环境。从我的经验上看,虽然MySQL对比Oracle、DB2来说小巧很多,但在同R语言配合的本地应用上,性能更加有保证。

有了支持SQL的数据库环境,就要聊一聊R语言到底和SQL有什么关系:

  • 各大数据库厂商已经开发了相关的支持R语言的数据挖掘套件,比如Oracle的RODM,Teradata的 teradataR等。
  • R本身就可以通过扩展包来对数据库执行SQL,这时你可以把R语言作为调度环境。R的计算过程结果可以直接作为参数传递到数据库中,并将相应的结果返回,供R环境使用。
  • 通过sqldf包,在R内部使用标准SQL对数据进行预处理,包括group by,order by,join,where等操作。
  • 当然R最重要的用途是将数据挖掘的结果转义为标准SQL语言,利用数据库来实现挖掘结果。当然有人说了,不是有pmml可以将模型嵌入到数据库么?!扯!到现在我也没见pmml成为应用标准,老老实实的将模型结果转义到SQL才是王道。比如用于概率预测的Logistic回归或者分类模型的Tree-based Models,这些模型的转义工作都不难,这样最终的工程实施都脱离了R环境,更具通用性,且利用了数据库的高速性能。

说句题外话:不知道哪位看官见过70万字符长度的庞大SQL语句——是的,你没看错,70w,R转义的,可以执行,对于数据库而言不过是半分钟的事情。

 

2011年3月14日,IBM Netezza 同 Revolution R Enterprise 在 Netezza 数据仓库上搭载 Revolution Analytics 方面展开合作达成一致,二者将致力于整合 IBM Netezza’s i-class technology 和 Revolution 统计分析方面的卓越的能力。

延伸阅读:

  • 2010年9月20日,IBM以17亿美元的价格收购了Netezza,从而扩张其用于销售、市场营销和产品开发的商务分析产品。Netezza被公认为数据仓库市场中最具竞争力的厂商。
  • Revolution Analytics成立于2007年,是一家以R语言为核心的商业公司,其CEO是SPSS公司的创始人Norman Nie
  • 这里,还有IBM收购SPSS公司
 

Rexer Analytics 关于数据挖掘的年度调查开始于 2007 年,本次(2010年)是第四次年度调查,原文链接在这里

调查的关键要点如下:

1.调查样本量

2010年前期,735个参与者,来自于60个国家

2.数据挖掘覆盖领域

数据挖掘覆盖很多领域,但CRM/Marketing在过去的几年一直排名第一。

3.涉及算法

决策树、回归、聚类是主要的使用方法,但其他算法也被广泛使用。虽然第一次涉及 Ensemble Models,但22%的人宣称正在使用。

4.模型

三分之一的建模人员使用了10个及以下的变量建模,同时28%的建模人员宣称模型一般使用45个以上的变量

5.工具

随着过去几年稳定的增长,开源数据挖掘软件R已经成为挖掘人员的首选(43%),其次是 STATISTICA(18%)。STATISTICA、IBM SPSS Modeler 和 R 在2009、2010年被参与调查的挖掘人员给了最高满意得分。

6.技能

数据挖掘依然主要发生在个人电脑上(而不是服务器),数据一般也是存储在本地。模型的结果依然主要依赖于软件本身。STATISTICA 用户比其他软件用户,更倾向于使用PMML标准。

7.挑战

脏数据,数据挖掘概念的普及、对数据的访问

8.未来

参与调研的人员对于数据挖掘还是非常乐观的。这个领域仍然有上升空间,只有13%的挖掘人员给自己的公司的分析能力评为“excellent”,只有8%的人认为他们的数据质量可以被认为“very strong”。

同往常一样,一些评论:

  1. 鉴于数据挖掘从业人员的总体数量,有735个样本已经很不错了。
  2. CRM/Marketing在中国国内也依然是数据挖掘最重要的应用领域。
  3. 比较惊讶的是,Ensemble Models 居然在国外的使用率已到到22%。
  4. 模型的变量问题是具体业务所决定,甚至是效率、成本的考虑,多少都是正常。
  5. R语言成为挖掘人员的首选工具是必然的(包括在 KDNuggets 上的调查也是如此)。当然如果从数据分析的本源出发的话,R语言有不可替代的天然优势。
  6. PMML标准依然可以在R语言上实现,感谢Graham Williams和他的同事。
  7. 挑战估计是每个挖掘从业人员都遇到过的问题,大家多多交流吧
  8. 数据挖掘的未来是美好的,毕竟我们生活的世界数据越来越多,扔在那儿太可惜了~~
 

(我承认,这个是标题党!)

今儿看到 Ajay Ohri 那儿推荐了多伦多大学 S. Sayad 教授的关于数据挖掘的一个在线介绍。这个介绍包含了完整的数据挖掘过程,以及数据挖掘技术的分类,并且每一项都可以通过超链接到相应的分支。让人爱不释手,大赞之!

S. Sayad 教授在数据挖掘过程定义上同从比较流行的 CRISP-DM(Cross Industry Standard Process for Data Mining)有些区别:

  1. Problem Definition
  2. Data Preparaion
  3. Data Exploration
  4. Modelling
  5. Evaluation
  6. Deployment

(但个人认为这两种说法其实没有脱离问题的本质,是一致的)。

而重头戏则是关于数据挖掘(统计分析)技术的两大领域

  • 描述
  • 推断

挖掘(分析)技术的对应关系(超链接的脑图?),

首先是——描述:

然后是——推断:

最后是 S. Sayad 教授的数据挖掘在线 intro,请猛击之!

再补一句:关于数据挖掘软件的介绍,没有 R,抱怨一下~~

附1:

标准的“商业”数据挖掘过程:

  1. Business Understanding
  2. Data Understanding
  3. Data Preparaion
  4. Modelling
  5. Evaluating
  6. Deployment

固定链接:http://www.bjt.name/2010/12/toronto-data-mining-intro/‎

 

一则令人兴奋的简讯:

Oracle官方博客 最近更新的 New R Interface to Oracle Data Mining Available for Download,甲骨文开始正式支持R语言在Oracle数据库中的应用(简单的非官方说法是:甲骨文贡献了一个提供Oracle和R之间接口的附加包)。

援引博客中对R-ODM(R-Oracle Data Mining)的介绍:

R-ODM is especially useful for:

  • Quick prototyping of vertical or domain-based applications where the Oracle Database supports the application
  • Scripting of “production” data mining methodologies
  • Customizing graphics of ODM data mining results (examples: classificationregressionanomaly detection)

众所周知,R在实现原型算法方面有着不可替代的巨大优势。诚然,通过R实现的一般性数据挖掘算法都可以嵌入到数据库中,但Oracle提供的这个接口,极大地提高了挖掘算法的部署效率。

今天(2010.06.08),CRAN上更新了RODM包的1.0-2版本,支持Windows、Linux、MacOS X系统。

下面是RODM包帮助文档中的一个例子,可以初步地体会算法高效的部署:

### GLM Regression
## Not run:
x1 <- 2 * runif(200)
noise <- 3 * runif(200) - 1.5
y1 <- 2 + 2*x1 + x1*x1 + noise
dataset <- data.frame(x1, y1)
names(dataset) <- c("X1", "Y1")
RODM_create_dbms_table(DB, "dataset")   # Push the training table to the database

glm <- RODM_create_glm_model(database = DB,    # Create ODM GLM model
                             data_table_name = "dataset",
                             target_column_name = "Y1",
                             mining_function = "regression")

glm2 <- RODM_apply_model(database = DB,    # Predict training data
                             data_table_name = "dataset",
                             model_name = "GLM_MODEL",
                             supplemental_cols = "X1")
windows(height=8, width=12)
plot(x1, y1, pch=20, col="blue")
points(x=glm2$model.apply.results[, "X1"],
       glm2$model.apply.results[, "PREDICTION"], pch=20, col="red")
legend(0.5, 9, legend = c("actual", "GLM regression"), pch = c(20, 20),
                col = c("blue", "red"),
                pt.bg =  c("blue", "red"), cex = 1.20, pt.cex=1.5, bty="n")

RODM_drop_model(DB, "GLM_MODEL")            # Drop the model
RODM_drop_dbms_table(DB, "dataset")   # Drop the database table
RODM_close_dbms_connection(DB)
RODM_close_dbms_connection(DB)

说一句题外话:
R的影响力除了在统计分析领域(SAS、SPSS、Statistica已经都开始支持R接口)外,已然发展到了商业数据库领域。

永久链接:http://www.bjt.name/2010/06/oracle-data-mining-r/

© 2012 刘思喆 @ 贝吉塔行星 Suffusion theme by Sayontan Sinha