OSC第91期高手问答—R语言的核心技术

发布时间: 2015-10-09 阅读数: 1948

这篇文章的内容选自OSC(开源中国社区)第91期高手问答—R语言的核心技术。问题的答复主要由bsspirit(张丹)和陈堰平完成。

张丹,R语言资深用户,系统架构师,况客科技联合创始人(Qutke.com)。有10年IT程序开发和系统架构设计的经验,精通Java、R和Javascript三种编程语言,熟悉数据挖掘、统计和金融的多种算法。目前在互联网金融量化投资方向创业中,个人博客Alexa全球排名前10万。

高手R语言系列博客:http://blog.fens.me/series-r/

陈堰平,《R语言编程艺术》一书的译者,毕业于中国人民大学统计学院,曾任国家金融信息中心指数研究院研发部负责人,从事指数编制、指数化投资、金融衍生品方面的工作,对金融数据分析有多年的研究。统计之都的创始人之一,中国R语言会议理事会成员,《R语言编程艺术》的主要译者,博客地址http://yanping.me。现创办北京数博思达信息科技有限公司和中文数据科学免费学习网站雪晴数据网


问:您好,R语言适合做什么方面的开发啊,它有什么样的优势呢,很少见公司有单纯的招R的哦

答:

陈堰平:我们公司就招R的工程师和分析师,请看http://supstat.com.cn/join-us/

张丹:R语言本身的关注点有3个:面向数据,统计计算,可视化。优势就体现在这3个方面。


  1. 面向数据,R淡化了程序化思维,你更多地需要考虑有什么数据,如何处理数据,而不是架构和性能方向。 
  2. 统计计算,R是统计学家设计的语言,提供了大量统计计算库,方便够建各种模型。
  3. 可视化,数据经过处理后,显示变得非常重要,R语言很好的集成了这个特点。 单纯用R可能只能在建模上面,但是让R和不同语言结合,那就可以干很多的事情了。 R语言做模型很方便,


数据挖掘,咨询公司,金融量化都会招R的。

问:对于新手来说,能不能谈一下学习R语言的经验以及如何避免踩坑?

答:

张丹: 如果以程序的角度学,那么就要说学其他语言一样,多看多写多用多思考。如果是数据分析的角度,先找数据后写程序,函数式用来替代SAS或Excel的工作。


问:要是自学R语言,那部分最难?

答:

张丹:R的难度,不是语言本身,而在于数学、统计、行业知识等。自学R,跟着书敲几天代码就入门了。

问:我们公司也在用R语言,建模,使用R爬虫,用R做了个杜邦模型,java和R对接方面有没有什么好的建议??

答:

张丹:可以用rjava包,结合还是不错的,有很多的R包都通过rjava使用Java的类库。

问:r语言在大数据时代,如何保持优势

答:

张丹:如果每个人都愿意贡献代码,把自己的成果拿出来分享,那么优势自然就可以保持了。 每种语言都需要有领袖来引领一个时代,最近几年R界就是Hadley。

问:R语言和matlab相比呢,我只知道R语言出图很厉害,不知道R语言写起来效率怎么样?

答:

张丹:matlab很强大,是收费软件,在win平台的运行,官方自己做各种库。 R也很强大,是免费的,跨平台都很稳定,而且R的库都是广大的开发者提供的。

问:学习R语言需要学习什么基础知识?

答:

张丹:学好R需要3方面知识: 1. IT技术 2. 数学,概率,统计 3. 业务知识

问:我问的可能小白了。我很想知道R语言的核心优势。之前我的理解是数据图表化,这个虽然重要但是也不至于成为杀手锏啊。针对大数据计算,R语言是速度快吗?是内置算法库多吗?抑或是什么其他的优势?求解惑,谢谢。

答:

张丹:R的核心优势是:快速建模,R是面向数据的,提供了非常多的算法包,非常方便可视化。 R的性能不太好,少量数据可以用单机解决,海量数据需要与其他的工具配合。

问:R的机器学习的库多?R和Python相比有什么优势?谢谢!

答:

陈堰平:有的算法R有,Python没有,有的算法Python有但是R没有。R的机器学习库更多地用在前期算法原型的开发上,Python更多地用于生产环境 。

张丹:R是面向数据的,而Python是面向程序的。写R的时候,更关心怎么建模;写Python你还要考虑架构、性能、项目结构、代码规范等。

问:请教,有尝试过R语言做一些统计工作,但数据量稍大比如几十万的时候,R的速度下降很明显,是不是说R只能适合做少量数据的分析工作?对于数据量较大情况下使用R,有什么好的建议?

答:

陈堰平:几十万其实不算大,初学者在使用R的过程中没有掌握R的特性,导致效率很低,都很正常。我们的在线学习网站——雪晴数据网有很多针对R的学习资料,有空了可以来看看

张丹:如果是大数据,建议用Rhadoop,RSpark等框架处理。R原本是用于建模的,现在硬件很便宜,所以单机已经有能力处理几G的数据了。 如果从算法复杂度的角度考虑,数据量越大,算法越简单。更多要考虑你做什么事情,再选择最适合的工具去做。

问:linux下画图乱码如何解决如果输出为pdf则调用pdf函数加入字体参数可以解决 但直接显示却不行 还有java调用R使用啥比较好?

答:

张丹:乱码通常有2种问题。1. Linux没有装中文字库。2. Linux是utf-8,而win是gbk,同文件需要编码转型。Java调R,可以用rsession这个包http://blog.fens.me/r-rserve-rsession/

问:我也感觉R在读取大量数据量速度有明显下降,例如我在读取一个有17万行*20列的csv载入时间接近1分钟。我是8g内存cpu扯了点奔腾的系统fedora不知道是那些因素导致的?

答:

陈堰平:你可以试试data.table这个包https://cran.r-project.org/web/packages/data.table/读数据、处理数据都很快

张丹:如果你用的是read.table,read.cvs等函数,会非常慢的,因为要做各种验证和转型。可以直接用scan,先加到内存,再自己转型处理。

问:请问R相对Matlab的优势在那?

答:

陈堰平:matlab是面向工程计算的,R是面向数据分析的。R里面的数据分析、数据挖掘的包远远超过matlab

张丹:免费,库很多,库的增涨速度很快。

问:R是否只适合建模,不适合生产环境?

答:

张丹:建模是基本的,生产环境需要做很多的性能上优化事情,我现在都在把R用到生产环境。

问:R能直接在Excel里面用吗?

答:

陈堰平:RExcel组件,可以在Excel中调用R,相当于在Excel增加了插件,可以在菜单中选择R命令

张丹:R有调用Excel库,可以直接处理xls,xlsx文件。 但是建议转成csv,进行处理。

问:请问,R的优势是统计,绘图,而python,也很好得做到了,该如何选择?如果你是程序员,学习曲线会很陡峭,要成为高手,还需要学统计、数据挖掘等知识

答:

张丹:举个例子吧,比如看到一篇最新论文,上面有一组公式,可能是微积分,回归,分类算法等。如果你很熟悉Pyhon的话,是否能在短时间,用程序实现这个公式呢?但我可以用R很快实现。

Booklearn:oracle的bi大会上用也是 R语言,微软收购了R语言的商业化公司,学习一下大公司的选择即可!

问:R语言的学习梯度是否平滑,前置技能需求有哪些?

答:

张丹:以替代Excel, SAS的角度并不难,但是要学好也并不容易。

陈堰平:如果你是程序员,学习曲线会很陡峭,要成为高手,还需要学统计、数据挖掘等知识。

问:三个问题1、在大数据的情况下,怎么提升单机R语言的处理性能(数据加载,运算)? 2、在大数据的情况下,单机性能不足的情况下,R语言怎么支持分布式计算来扩展性能的?3、R语言的可视化绘图能力很强,比如一个Java搭建的web可视化平台怎么借用R语言的可视化能力?目前通常的做法是基于前端可视化组件,如百度的echarts,国外的d3之类的js开源组件。

答:

陈堰平:


  1. 方法有很多,基本的有这几个(a)更换基础的代数运算库(b)编程的时候要注意利用R的语言特性(c)使用高效率的包,比如data.table在读数据的时候很快,dplyr(http://www.xueqing.tv/course/31)在做数据整理的时候效率很高,bigmemory系列包可以处理大于内存的数据(d)使用商业版R—— RRE(http://www.xueqing.tv/course/19
  2. 想要分布式,可以用rhadoop、rhive、rspark
  3. 如果要调用R生成的静态图片,可以用http://blog.supstat.com/cn/2014/04/08/php-call-r/里的思想。如果要生产动态的图,就可以用R来处理数据,把数据导出成json格式,交给js库来做。


问:java如何调用r语言的接口,获取r运算输出的json数据?

答:R里面有rjson、jsonlite等包,可以把R的对象转换成json格式的文本,接下来怎么办,你们搞java的应该更懂

张丹:


  1. 单机性能,可以通过snow等多核并行包,进行程序优化。
  2. R的分布式,需要用到rhadoop, rspark等
  3. R做的图,虽然很漂亮但大多是静态的,这个部分可以考虑用JS来做动态图。把web,计算,可视化分开。


问:数学和算法功底不好,学习数据挖掘是不是很蛋疼啊。自学过Ruby?

答:

张丹:也许可以通过R,能更好的理解数据挖掘的那些算法,事半功倍的效果。

问:你好,能谈一下R语言和Julia语言间的优缺点对比吗?

答:

陈堰平:Julia在设计的时候就是奔着并行的方向的,而R在当初设计的时候没考虑到这点(当初年代太早),Julia现在刚刚起步,没积累多少包,也经常在变,等几年再看看吧,或者参与到Julia的开发中。

张丹:Julia目前还没有用过,不清楚使用细节。

问:我接触过Matlab,看了上述介绍也了解一些R语言,所以我想问,能否用R语言来辅助我在Linux上的应用进行大批量的数据处理和图形化显示;这里面涉及到了混合编程,即如何将R语言的优势和遍历发挥出来,应用到现成的项目中去?另外一方面,就是性能,除了机器配置,R语言在性能上还依赖什么?最后,我想问问R语言是免费开源的,中国开发者如何参与到其中,是否有诸如mail-list、论坛之类的平台供使用者或开发者进行讨论交流?

答:

陈堰平:如果有兴趣在R的开发方面深入了解的话,可以与我联系QQ:47702091以前可以在统计之都交流R的技术,现在基本也没落了。希望更多感兴趣的人加入我们SupStat。R在设计上比较原始,是上世纪六、七十年代的设计,靠R的解释器去调用C、Fortran库来实现交互式的运算。现在国外不少团队在研究重写R,比如让R运行上jvm上,但都在探索中,请看宫雨老师的slides(链接:http://pan.baidu.com/s/11AadC 密码: 2csy)

张丹:


  1. R可以做matlab一样的事情。
  2. R跨平台的支持比较好,可以很方便地在Linux环境运行。
  3. 我现在就是多语言混编,R,Java, Node等 
  4. R的性能确实不太好,需要做很多的优化。比如 rhadoop, rspark, bigmemory, snow 等。这些优化需要针对你的数据和业务情况。


问:您好。我们工作中有大量的数据16亿左右数据目前,需要做多维度即时统计分析及,一直在找比较好的解决方案。有几个疑问想请教: 1、请问R语言能否和程序对接么?(如 Asp.net Js Java等) 2、R语言在大量数据处理上的优势是什么?(来源R语言一直和大数据、统计分析连在一起) 3、R语言统计分析是即时性的么?

答:

张丹:


  1. R可以和其他程序对接,rjava,rpy,rcpp,RODBC,使用难度因人而已
  2. R无法处理大数据,需要配合其他工具,如rhadoop, rspark 
  3. 实时计算R可以做,但需要很多的优化。我现在做金融量化的策略,很多都是实时计算的。


陈堰平:


  1. R语言跟其他程序的对接不太容易,rjava、rsession等方案在实际应用中有很多坑,可以试试RRE里的deployR,请看http://t.cn/RZEjDGq 
  2. R在大量数据处理上基本没什么天然优势,总是提它是因为它是种数据分析的语言,这与其他语言的定位不同。大家都希望能够在大数据上用R很方面地分析数据。虽然R天然不能处理大数据,但是有很多第三方包为R增强了这方面的能力,比如bigmemory系列包、rhadoop、rhive、rspark等,据说dato公司即将开源一款产品,可以用R的语法处理大数据。另外,现已被微软收购的Revolution Analytics有款产品叫RRE,可以轻松分析上亿行的数据,请看http://www.xueqing.tv/course/19
  3. 即时性是什么意思?实时性吗?可能没那么实时,因为数据量太大或者计算复杂度太高的话,需要等待。


问: R语言很实用,ggplot画图也很赞,就是数据量大的时候就歇菜了,什么GPU运算啊,R-Spark啊,优化起来都不容易,有什么好的办法吗?

答:

张丹:R更适合用于建模,尽量控制数据规模;对于大数据来说,R并无特别的优势,但是sas, matlab也有同样的问题。

问:只要我懂数据分析,用java不是也可以分析出来么?不用再学习一门新语言啦。

答:

陈堰平:R语言是交互式的,比较适合数据分析的探索过程。同时它也是脚本语言,可以批处理执行。R语言从设计思想上说,是调用现成的用C、Fortran写的数据分析模块,避免了重复劳动,数据分析师只需要花时间在思考上就行了,把思考过程变成R代码。

张丹:用哪种语言都可以数据分析,Java会会花时间在写程序上,可能随便一写就100-200行。R做同样的事情,也就5-10行。

问:是使用java调mapReduce好,还是通过java调R再通过RMapreduce来建模比较好?Rhbase和Rhive使用的情况怎么样?如果我们用了Rspark,是不是就可以替换mapReduce

答:

张丹:


  1. 当然直接用Java写MR好啦,原生的是支持最好的。
  2. Spark可以在很多场合下,替代MR。 
  3. R在这里,仅仅是做了一个外壳。


问:R可以用了搞算法啥的,聚类,分类,推荐啥的吗? 和mahout相对比,mahout怎么样,mahout做算法的公司,多不多,如果是你,你会用哪个做算法模型?

答:

张丹:Mahout复杂度其实很高的,能把mahout源代码看一遍都不容易。

问:对于没有统计基础的人来说,是不是学习统计知识比学习R本身更重要?

答:

张丹:可以学边统计边学R,用R来验证书本的知识 。 陈堰平:是的,不过,不管你用什么语言做数据分析,都得学学统计和模型。你可以通过学R来学统计。

问:R和mahout对比,各有什么优点,和缺点,怎么互相配合?

答:

张丹:R很灵活,自己想做什么就做什么,通常代码量都不会超过100行。 MAHOUT自己封装了一套模型,按照他的框架要求,提供标准化的数据进行计算,不难,而且运行效率很高。但如果你想改模型,几乎不可能。

问:我对金融方面的数据分析感兴趣,只是不知道要看些什么资料, 可以通过一下资料么?或者提供个学习的思路呀。

答:

张丹:先看《投资学》这本书吧,按金融的思路学习。

本文整理自OSC(开源中国社区)转载请注明本文原链接,http://www.xueqing.tv/cms/article/view/id/38

分享到:
热门文章

REmap发布,用R绘制百度迁徙图

2015年07月23日更新 21725次阅读

学习R语言,一篇文章让你从懵圈到入

2016年05月09日更新 15399次阅读

在R中填充缺失数据—mice包

2015年12月31日更新 11842次阅读

清华大学教授:大数据时代 统计学依

2015年08月07日更新 11480次阅读

精通 R plot—第一部分:颜色

2016年01月20日更新 10744次阅读

学习Tableau的六大好处(一个

2015年12月24日更新 8611次阅读
热门课程

R语言初级课程

2015年02月20日发布 3293名学员

R语言高效数据清理工具包dplyr

2015年08月30日发布 1728名学员

R语言数据分析入门

2016年05月10日发布 1625名学员

如何用R做数据预处理

2016年06月03日发布 1180名学员

全栈数据工程师养成攻略

2016年11月08日发布 1068名学员

R语言大规模数据分析实战

2015年12月17日发布 959名学员
登录 注册