深度学习
书名:R的极客理想——工具篇 (数据分析技术丛书)
作者:张丹 著
格式:EPUB, HTMLZ, PDF
路径:点击打开
出版:机械工业出版社
排序作者:著, 张丹
排序书名:R的极客理想——工具篇 (数据分析技术丛书)
日期:09 12月 2018
uuid:96d09c82-3753-4306-92ca-9d2d52009991
id:504
出版日期:8月 2014
修改日期:09 12月 2018
大小:8.52MB
语言:中文
整本书涵盖的内容比较广,每一节的篇幅相对较短,我觉得这种写作风格挺好,每天晚上睡前打开一节看看,在口水浸湿书之前应该可以看完一节,既能学到知识又合理利用了睡前时间。如作者自己所说,这书不是写给初学者的,所以看第1章的不要被“R基础”的标题给骗了,全是些奇门遁甲之术,一个基础包都没介绍!虽然我不敢讲R是不是最值得学习的程序语言,但我对1.1节的观点深表同意:R往往用两三行代码解决问题,不会时时考虑最优与否(很多需要优化的地方都已经用C/Fortan等底层语言打包好了)。R“它爹”S语言的主要作者John Chambers在几十年前就说了:S语言的目的是让我们(统计学家)快速而可靠地把脑子里的想法变成软件。将数据拿到手之后甩开膀子从各个角度去分析就好了,想画图画图,想跑模型跑模型,而不必先考虑定义一个结构体以及某个成员是整型还是浮点型。书里主要用到的操作系统是Windows和Ubuntu,不过苹果(OS X)用户不必担心,R在OS X上跑起来也是妥妥的,个人推荐用Homebrew安装R。
如果要问在Node、Lua、Python、Ruby和R这5种语言中,哪个语言在2014年的应用前景会更好,我会毫不犹豫地选择R,而且我认为R语言不仅是2014年,也是以后更长一段时间内的明星。在本书开篇,我们就谈谈为什么R语言是最值得学习的编程语言。
本人是程序员、架构师,从编程入门到今天,一直深信着Java是改变世界的语言,Java已经做到了,而且一直很辉煌。但当Java越来越强大,覆盖领域越来越多,变得无所不能的时候,它反而不够专业,这就给了其他语言发展的机会。
每种语言都有自己的设计理念和哲学,而我体会的R的哲学就是“静下心做事情”。R不需要很长的代码,也不需要设计模式。一个函数调用,传几个参数,就能实现一个复杂的统计模型。我们需要思考的是用什么模型、传什么参数,而不是怎么进行程序设计。我们可能会用R实现“从一个数学公式,变成一个统计模型”的过程,我们也可能会考虑“如何让一个分类器结果更准确”,但我们不必思考一个算法的“时间复杂度是多少,空间复杂度是多少”。
R的哲学,可以让你把数学和统计学的知识,变成计算模型,这也是R的基因所决定的。
R语言让我跳出了原有的思维定式。使用R语言,我们应该像统计学家那样思考问题,而不是拘泥于程序员的思维模式。统计学家的思维模式,是先考虑为什么,再考虑做什么。而程序员的思维模式,是直接考虑怎么做,等有了结果再考虑为什么。
R语言是直接面向数据的语言。在我们的日常生活中,无论做什么事情都会产生数据,上网有浏览数据,买东西有消费数据,就算什么都不干,也会受大气PM2.5的影响,有空气污染指数数据。利用R语言,我可以直接分析这些数据。面向什么业务,就分析什么数据,不需要从产品经理向程序员的角色转换,不需要考虑有什么功能,更不需要考虑程序设计的事。跳出程序员的思维模式,我们所能认知的东西会更多,于是也能找到更适合自己的定位。
当数据成为生产资料的时候,R就是为人们能运用生产资料创造价值的生产工具,R语言主要解决的是数据的问题。整个人类文明所获得的全部数据中,有90%以上是自互联网诞生以来产生的;当Hadoop帮助人们解决了大数据存储的问题后,如何发现数据的价值,则成为当前最火的话题。R语言具有强大的统计分析能力,这就让它成为数据分析最好的工具。所以,R要解决的问题,就是如何挖掘数据价值的问题。
R语言已进入到了3.0的时代,但有些第三方的R包还处于2.15的状态,没有升级,如RHadoop等。我们要用这些R包的时候,就需要指定版本的R软件。对于Windows来说,这是很简单的操作,只要安装不同的(.exe)文件就行了;对于Linux系统来说,就不那么容易了,需要我们手动进行配置。不熟悉Linux系统的同学,在这里就很容易卡住。所以,本节就讲一下如何在Linux Ubuntu系统中安装R语言软件包的指定版本。
R语言是在大数据“火”起来后,映入人们眼球的。但R语言的社区已经存在很多年,我们并不知道,R语言在很长的历史时期,有着什么样的智慧。不过,正有人悄悄地记录着R语言的大智慧。
新手写的代码,大都不注重代码规范,以为实现功能就算完成了。这种代码不仅别人不愿意读,过几个月后再看自己都会觉得很烂。不仅仅新手如此,大多数程序员写的代码都没有考虑如何让别人看着更方便。程序员最痛苦的事情,不是每天加班写程序,而是每天加班读懂别人写的程序。最后,有人实在忍受不了其他人的丑陋代码,便开始制定代码编程规范,又有人去实现代码的自动化排版工具。formatR就是这样的一个R语言自动化排版的工具。
RStudio是R语言开发中的利器,是最好用的R语言IDE集成环境。RStudio Server更是利器中的神器。不仅提供了Web的功能,可以安装到远程服务器上,通过Web进行访问,还支持多用户的协作开发。如此神器,快来动手试一下吧。
JSON作为一种轻量级数据格式,被大量地应用在各种程序环境中。JSON(JavaScript Object Notation)是JavaScript的内嵌的标准对象,同时也是MongoDB的表结构存储类型。JSON是半结构化的,可以表达出丰富的文档含义。JSON文档比XML文档要少很多,更适合于网络传输。早期R语言编程很少会用到JSON,但随着R语言的壮大,R也在伸向各种领域,JSON就是与其他领域的一个交点。如何让R语言傻瓜式转型JSON呢?请看下文介绍。
R语言不仅在统计分析和数据挖掘领域计算能力强大,它在数据可视化领域也不逊于昂贵的商业软件。当然,R在可视化上强大,其背后离不开各种开源软件包的支持,Cairo就是这样一个用于矢量图形处理的类库。Cairo可以创建高质量的矢量图形(GIF、SVG、PDF、PostScript)和位图(PNG、JPEG、TIFF),同时支持在后台程序中高质量渲染!本节将介绍Cairo在R语言中的使用。
R语言生来就是自由的,不像Java和PHP等有统一的规范约束。R语言不仅命名、语法各包各异,就连功能也是各种混搭。caTools库就是这种混搭库,包括了不相关的几组函数工具集,有图片处理的,有编解码的,有分类器的,有向量计算的,有科学计算的,而且都很好用!以至于我都不知道如何用简短的语言去描述这个包了!唯有用“奇特”来概括它的特点。
时间序列分析是一种动态数据处理的统计方法,通过对时间序列数据的分析,我们可以感觉到世界正改变着什么!R语言作为统计分析的利器,对时间序列处理有着强大的支持。在R语言中,单独为时间序列数据定义了一种数据类型zoo,zoo是时间序列的基础,也是股票分析的基础。本节将介绍zoo库在R语言中的结构和使用。
r-bloggers的一篇博文:plot.xts is wonderful!(http://www.r-bloggers.com/plot-xts-is-wonderful/),让我有动力继续发现xts的强大。xts扩展了zoo的基础数据结构,并提供了更丰富的功能函数。xtsExtra补充库从可视化的角度出发,提供了一个简单而效果非凡的作图函数plot.xts。本节将用plot.xts来演示xts对象的时间序列可视化!
缓存技术在计算机系统中运用得非常广泛,对于高并发访问的应用来说,缓存技术是性价比最高的性能提升方案,特别是对于重复性计算,缓存能为我们节省大量的CPU时间,可能达到99%。R语言以统计计算著名,但其中很多算法包都是在进行大量重复的计算。优化正在进行,改变已经开始。以Hadley Wickham为代表的R语言领军人物,正在让R快起来!
数据可视化越来越受到人们的追捧,图形比文字更有表达力,基于HTML的可交互的图形比静态的PNG图片更让人惊喜。R语言已经为数据可视化做了充分的准备,比如,图形可视化包ggplot2,世界地图可视化包ggmap,股票可视化包quantmod,基于HTML的可交互的可视化包googleVis等,简简单单的几行代码,就可以让数据变成图片,再让图片变成会动的图片。本节以“性能报告”为切入点,讲述R语言可视化包lineprof。
当前主流的异构跨平台通信组件Apache Thrift已经火遍大江南北,支持15种编程语言,但是到目前为止还没有加入R语言。要让R实现跨平台的通信,就只能从R的社区(CRAN)中找方案,像rJava、RCpp、rpy都是2种语言结合的方案,这些方案类似地会把R引擎加载到其他语言内存环境。这类方案的优点是高效,缺点是紧耦合,扩展受限,接口程序无法重用。
Rserve给了我们一种新的选择,它是抽象R语言网络接口,基于TCP/IP协议实现与多语言之间的通信。Rserve支持R语言与其他语言通信,通过C/S结构的程序调用,支持C/C++、Java、PHP、Python、Ruby、Node.js等。Rserve支持远程连接、用户认证、文件传输等功能。我们可以设计R作为后台服务引擎,处理统计建模、数据分析、绘图等的任务。本节我们就来体验Rserve与Java的跨平台通信。
Rserve作为R语言的通信接口,已经成为了R语言扩展的重要通道。但Rserve过于底层,用Java调用Rserve的API接口,也有些难于理解。于是就出现了Rsession项目,Rsession是对Rserve的封装,提供了更高层的API接口,包括Rserve服务器控制和多会话机制,并支持Windows环境。Rsession简化了Java调用Rserve的API接口的难度,提供了一种简单的方式,让Java可以访问远程或本地的Rserve实例。另一个R和Java通信的库JRI,并不支持多会话机制,在下一节中会介绍。
Java语言在工业界长期处于霸主地位,Java语法、JVM、JDK、Java开源库,在近10年得到了爆发式的发展,几乎覆盖了应用开发的所有领域。伴随着Java的全领域发展,问题也随之而来了。语法越来越复杂,近似的项目越来越多,学好Java变得很难。对于没有IT背景的统计人员,学用Java更是难于上青天。
R一直是统计圈内处于佼佼者的语言,语法简单,学习曲线不太长也不太陡。如果能结合Java的通用性和R的专业性,碰撞出的火花,将会缤纷绚烂。本节将介绍R与Java连接的高速通道,rJava实现双向通信方案。
做Web开发还没有用过Node.js的同学已经落后了。Node.js是基于JavaScript实现的一款后台程序开发平台,以笔者个人的体验来说,Node.js的开发效率比PHP还要高一些,完全异步加载,性能一点也不落后,假以时日还有赶超PHP的趋势。
HTML5作为Web前端大量使用JavaScript,各种炫效果层出不穷。如果能把R语言的效果图,都用HTML5重新做渲染,并增加时时通信和用户交互,两种语言各取优势,必然产生惊为天人的效果。长话短说,下面就来介绍Node.js与R跨平台通信
RSclient是实现Rserve通信的R语言客户端程序,这种通信对于实际应用架构来说是很有帮助的,因为这不仅可以统一Rserve的接口,还可以从架构上实现R语言的跨虚拟机的分步式程序设计。
一直以来R语言都被用在基于个人电脑的客户端程序上。我们习惯性地下载R安装包,在自己的电脑上面装好,写算法,运行。然后,以贴图或者文档的形式,发表自己的作品。R如果可以运行在Server端,把结果以Web的方式发布,这才是互联网的工作方式!FastRWeb提供一种方式,可以实现B/S结构的R应用。
MySQL是一款最常用的开源数据库软件,安装简单(关于MySQL的安装和配置,请参考附录B),运行稳定,非常适用于中小型的数据存储。R作为数据分析的工具,当然要支持数据库驱动接口。让R和MySQL配合在一起,所能爆发出的能量是巨大的。
RMySQL是一个R语言程序包,提供了访问MySQL数据库的R语言接口程序,RMySQL的依赖于DBI包。RMySQL不仅提供了基本的数据库访问、SQL查询,还封装了一些方法,比如读整表、分页、data.frame快速插入等功能。掌握好RMySQL,数据库编辑将得心应手!
由于操作系统的原因,Windows和Linux有不一样的字符集,不一样的运行时环境。所以,本节将分别介绍如何在Linux和Windows上面安装和使用RMySQL。
MongoDB作为一种文档型的NoSQL数据库,使用起来非常灵活,它回避了关系型数据库前期的复杂数据库设计。MongoDB存储基于JSON格式,同时用JavaScript作为数据库操作语言,给了使用者无限想象的空间,可以通过编程在MongoDB服务器中解决非常复杂的条件查询的问题。本节将介绍通过rmongodb包让R程序轻松连接MongoDB。
Redis是常用的基于内存的Key-Value数据库,比Memcache更先进,支持多种数据结构,高效,快速。用Redis可以很轻松地解决高并发的数据访问问题,作为时时数据存储也非常不错。本节将介绍rredis,让R程序轻松连接Redis。
Cassandra是由Facebook开发,然后开源的一套分步式数据存储系统,用于海量数据的高伸展性存储。Cassandra的无中心设计、一致性哈希、BloomFilter等技术为之后的NoSQL产品提供新颖的设计思路。本节将介绍RCassandra,让R程序轻松连接Cassandra。
Hive是Hadoop的一个程序接口,使用了类SQL的语法,数据分析人员可以快速掌握。Hive让Java的世界变得简单而轻巧,让Hadoop普及到了程序员以外的人。从Hive开始,分析师们也能玩转大数据。本节将介绍RHive,让R程序轻松连接Hive。
笔者接触金融时间并不太长,操作的第一个产品就是逆回购。逆回购对于大部分人来说,都是一个新鲜词,就算是炒股多年的玩家,可能也是在2013年6月份发生银行缺钱的事件之后才了解逆回购的。隔夜的银行间拆借利率达到了30%,简单来说银行缺钱了!各种机构分分出售股票、债券,兑换成现金借给银行。个人用户也都取出存款,通过逆回购,把钱借给银行。30%的利率,让所有人在那一周都为之兴奋,只有银行在惶恐。
R语言和Hadoop分别属于两个不同的学科,有着两类完全不同的用户,基于两种不同的知识体系,做着不同的事情。但数据却是它们的交集,数据让R语言结合Hadoop成为一种跨学科选择,一种挖掘数据价值的工具。
RHadoop产品第一次实现了R语言与Hadoop的结合,进行海量数据分析。Hadoop主要用来存储海量数据,R语言完成MapReduce算法,用来替代Java的MapReduce实现。有了RHadoop可以让广大的R语言爱好者,有更强大的工具处理大数据,10G、100G、TB、PB,由于大数据所带来的单机性能问题可能会一去不复返了。但对于单独的R语言使用者、Java使用者或者Hadoop使用者来说,同时具备三种知识并不容易。
通过RHadoop我们可以用R语言实现MapReduce的开发,比起上百行的Java代码来说,R的代码是这么的简洁。本节将介绍一个统计需求案例。
由于RHadoop的rmr2包对Hadoop操作有一些特殊性,所以代码实现有一定难度。需要深入学习的同学,请多尝试并思考MapReduce算法中的key/value值的设计。
HBase是Hadoop家族中的一个分布式数据库产品,HBase支持高并发读写,列式数据存储,高效的索引,自动分片,自动Region迁移等许多优点,已经越来越多地被业界认可,并被实际应用。
一行错误难倒一片同学,在使用RHadoop的rmr2包过程中,经常会遇到的一个错误是PipeMapRed.waitOutputThreads():subprocess failed with code 1。错误原因是什么,又该如何解决呢?本节将告诉你答案。
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=1193
微信号:qq444848023 QQ号:444848023
加入【我是码农】QQ群:864689844(加群验证:我是码农)
全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试
var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!
评论专区