今天看到老同学@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转义的,可以执行,对于数据库而言不过是半分钟的事情。

相关文章:

  18 Responses to “数据挖掘之R与SQL”

  1. [...] [repost ]数据挖掘之R与SQL Data Mining, R Add comments Aug 182011 Google original:http://www.bjt.name/2011/08/r-and-sql-datamining/ [...]

  2. 看不懂的东西又出现了

  3. 您好,读了你的博文,学到很多关于R的知识。以前觉得R在处理大规模数据上性能不好,只能作为统计软件使用,现在突然觉得R无所不能! 谢谢你!

    还有请教你一个问题,当我用R连接mysql时,在数据库中没有出现中文乱码。可是在r的编辑器中总是显示乱码,我觉得是中文编码字符集的问题,可是我不知道如何解决,希望老师给我一个解决的方法。

    衷心感谢!

    • R 默认的字符编码好像是utf-8,而mysql在windows下安装有多种默认编码选择,你修改一下mysql的配置文件,使字符编码为utf-8就可以了吧。不会改的话,就重装,选择默认为utf-8

  4. 最近需要用数据库做些东西,不知道师兄说的转义是什么意思?是说将数据挖掘算法用SQL实现?有什么好办法吗?

    • 我还以为所有的评论都会后台邮件通知,囧
      对,是将数据挖掘的结果直接转义为SQL,丢到数据库里执行,这样就可以脱离数据挖掘的环境了。业界有PMML标准,号称挖掘结果可以跨平台使用,但有些环境并不支持,或者支持不好。而SQL则是任何环境下都可以实现的,尤其是分类算法的结果。

  5. [...] 数据挖掘之R与SQL [...]

  6. [...] 数据挖掘之R与SQL 此条目发表在 默认分类 分类目录。将固定链接加入收藏夹。 [...]

  7. [...] 来源:数据挖掘之R与SQL, 刘思喆 @ 贝吉塔行星 This entry was posted in 默认分类. Bookmark the permalink. [无所不包的R]多核计算multicore package → [...]

  8. R新手初来乍道。最近想试试 Rmpi + snow做kmeans算法的并行。已经在windows上试过socket通信的伪cluster了,现在往Linux集群上移。用的是实验室的Linux cluster,用slurm管理的。但一直不会安装配置,总在library(Rmpi)的时候出错。不知您是否可推荐相关的参考书籍或者link以供学习的?多谢您了!

  9. 不知道为啥,我从搜索引擎找到你的博客,点击链接,显示是危险网站,询问我是否要继续。而从微博上直接访问又没要这个问题

    • 前段时间托管网站的空间集体中招,而我又对这个底层不了解,所以就没敢怎么更新博客。似乎这两天好了,我直接访问没有问题。

      • 我想是你没有买独立IP,和别人共享IP导致被拖累的。我是在BlogHost买的,独立 IP是120元1年。买了独立IP搜索引擎给的权值也会高一些的

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

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