谢佳标:R语言初学者必须要知道的事儿
2017年1月24日晚8点半,乐逗游戏挖掘团队负责人、资深R语言用户谢佳标带来了主题为“数据分析利器:R语言快速入门”的Chat交流。以下是主持人孙莫默整理的实录,记录了谢佳标与读者之间交流的精彩问答。
问:常用的数据分析工具有哪些?为什么选择R语言作为分析工具?
答: 常用的数据分析工具有很多,包括大家平时一直在用的excel,这就是个不错的分析工具,我们可以实现常用的数据分析、绘图功能。但是涉及到复杂的模型时,excel就显得很吃力,此时就需要运用专业的数据分析挖掘工具,比如spss、sas、R、Python等等。
下面给大家看一个2013年的分析工具排名,最近几年R和python的热度有增无减:
因为R语言是开源的,所以很多互联网企业在用,还有一些通迅行业的咨询公司,不过上手还是需要长期的学习;SPSS界面友好些,不过企业用正版也要很大一些数,不过一般是市场研究用的比较多,如果你会用SPSS编程其实功能还是比较强大的,建议如果想先练手可以学这个,上手快;SAS一般是金融企业,特别是银行业和医学统计用,银行业人员有一些是用SAS做统计,一般是银行业内部人做的,另一种是给银行业做数据挖掘的公司,不过正版一年也要上百万,不是土豪也用不起,听说支付宝都不用,而是用R语言,而且SAS学习没人指导很难学;所以看小伙伴的选择,想在传统或者咨询公司做的SPSS比较合适,想去金融特别是银行业SAS不错,想进互联网公司学R语言可能是比较明智。我们互联网、游戏公司很多数据分析师都是使用R语言和Python进行分析挖掘工作。
另外,R语言也可以跟Python结合,也能与其他专业的挖掘工具接触集成,比如下图:
可以利用R语言调出rattle,帮助对代码不熟悉的新手利用图形化界面快速完成数据分析工作。右上角这个工具是非常不错的工具,大家如果感兴趣可以通过install.packages("rattle")在R内安装此包,然后利用:library(rattle);rattle()命令就可以调出那个界面,由于R的极大灵活性和扩展性,也使得R是近几年数据分析师的首选工具。
问:R语言与Python的对比?优势劣势?
答: Python和R是统计学中两种最流行的的编程语言,R的功能性主要是统计学家在开发时考虑的(R具有强大的可视化功能),而Python因为易于理解的语法被大家所接受。
起初R主要是在学术和研究使用,但近来企业界发现R也很不错,这使得R成为企业中使用的全球发展最快的统计语言之一。如果有了解过中国R语言会议的读者应该知道,这几年参加R会的人数越来越多,有不少是来自企业界。我在演讲后都有很多企业界的数据分析师与我交流,都对R在企业中的实战很感兴趣。如果大家对R语言运用在实际工作中感兴趣,可以查询R会的一些资料。
R的主要优势是它有一个庞大的社区,通过邮件列表,用户贡献的文档和一个非常活跃的堆栈溢出组提供支持。还有CRAN镜像,一个用户可以很简单地创造的一个包含R包的知识库。这些包有R里面的函数和数据,各地的镜像都是R网站的备份文件,完全一样,用户可以选择离你最近的镜像访问最新的技术和功能,而无需从头开发。
所以我们数据分析师如果选择R语言,是为了让自己更专注数据,不是花太多时间去想想怎么实现某种算法,因为这些都是有现成的包。如果现成的算法不能满足你的分析需求,甚至我们可以通过修改源码来完成你的数据工作。
接下来,我们从数据科学行业的表现来对比下R和Python。如果你们看一下最近的民意调查,在数据分析的编程语言方面,R是明显的赢家。但也有越来越多的人从研发转向Python。此外,有越来越多的公司使用这两种语言来进行组合。如果你打算从事数据行业,你用好学会这两种语言。招聘趋势显示这两个技能的需求日益增加,而工资远高于平均水平。
我们来看下R的优缺点。
优点是:
可视化能力强。可视化通常让我们更有效地理解数字本身,R和可视化是绝配。一些必看的可视化软件包是ggplot2,ggvis,googleVis和rCharts。
完善的生态系统。R具有活跃的社区和一个丰富的生态系统。R包在CRAN,Bioconductor的和Github上。您可以通过Rdocumentation搜索所有的R包。
用于数据科学。R由统计学家开发,他们可以通过R代码和包交流想法和概念,你不一定需要有计算机背景。此外企业界也越来越接受R。最先进的算法一般在R中都能找到相应的包实现。
R的缺点就是基于内存,运算比较缓慢,但是这几年计算机性能的提升和很多扩展包的出现,很好地解决了这个问题。例如跟RHadoop、sparkR等包,还有与数据库的链接也实现了R能专心做数据分析和建模、可视化的工作。R语言的书好像也是不温不火,一直长销。
以上是R的优缺点,接下来我们简单了解下Python方面的优缺点。
Python的在数据分析方面的第一个优点是:IPython Notebook。IPython Notebook使我们更容易使用Python进行数据工作,你可以轻松地与同事共享Notebook,而无需他们安装任何东西。这大大减少了组织代码,输出和注释文件的开销。可以花更多的时间做实际的工作。
第二点是Python是通用语言。Python语言容易、直观,在学习上会比较简单,它可以加快你写一个程序的速度。此外,Python测试框架是一个内置的,这样可以保证你的代码是可重复使用和可靠的。
第三点是Python是一个多用途的语言,这也是广受程序员喜爱的原因之一。Python把不同背景的人集合在一起。作为一种常见的、容易理解,大部分程序员都懂的编程语言,可以很容易地和统计学家沟通,你可以使用一个简单的工具就把你每一个工作伙伴都整合起来。
Python的主要缺点之一是可视化方面。可视化是选择数据分析软件的一个重要的标准。虽然Python有一些不错的可视化库,如Seaborn,Bokeh和Pygal。但相比于R,呈现的结果并不总是那么顺眼。这几年Python一直在数据分析方面一直在赶超R语言,但是还不够。
对于我们数据分析人员,该如何选择R和Python。下面给几点建议:
你想解决什么问题?
什么是你的领域中常用的工具?
其他可用工具是什么以及如何做这些涉及到的常用工具?
所以工具的选择跟你做事情的目的有直接的关系,如果你是想快速实现数据分析和模型,做一些分析专项和可视化时,可以考虑使用R。如果是为了想实现数据弗恩系平台开发,可以考虑工程应用能力较强的Python。一般读数学和统计学的童靴偏好R,计算机出生的童靴偏好Python。如果有时间,最好两个都会。我们团队在工作中也是两种工具都有使用。
问:我的主要工作平台是win,想要愉快地使用R,完整的工具链及配置是怎样的?
答: R是一个跨平台的工具,可以完美在windows、unix和Mac上运行。我们在win上也是可以实现整个数据分析流程工作。
比如说利用RODBC包链接公司环境中的数据库,从数据库中直接读入或进行数据查询汇总,并将部分基础数据处理的统计工作交给数据库,然后R执行数据分析和挖掘的工作,完成后并将结果返回给数据库,或者利用与java、c++等语言的结合直接进行结果利用,也可以结合html、php进行数据模型和结果可视化。
对于数据分析师来说,如果对其他语言不熟,我们也可以利用shiny包实现快速开发数据分析平台原型的目的。接下来,我们重点聊聊数据分析之前的数据采集和数据分析结果之后的展示环节,尤其侧重聊下R与数据库的链接和快速开发web平台。
很多传统企业现在都还是用oracle、mysql进行数据存储。所以我们先以R与MYSQL的链接为例进行解释这部分的知识。在R中通过RODBC包访问一个数据库也许是最流行的方式。这种方式允许R连接到任意一种拥有ODBC驱动的数据库,其实几乎就是市面上的所有数据库。大家要留意的一点就是,你的R位数必须与数据库的位数一致。这点千万别忽视。
由于服务器上的MySQL是32位,计算机系统是64位,所以需要在C:\Windows\SysWOW64文件夹下找到odbcad32.exe,双击打开ODBC数据源管理器界面。这个32位的ODBC数据源管理器界面存放的地方大家可以先记下。
如果你们的mysql是32位,就需要在C盘的那个文件夹找到它,双击打开界面如图:
点击添加,选择MySQL ODBC驱动,点击完成之后弹出一个数据库配置窗口。
此处需要说明一下,如果你们在驱动中没有找到关于mysql驱动,就需要先下载个mysql odbc驱动进行安装即可。
大家选中mysql驱动以后的界面如上,我们可以填写你的DSN名称(这个可以随意),然后是ip地址和端口、mysql的登录账号和密码,都填写完毕后,点击test进行测试。
如果出现链接成功的提示,说明你们的ODBC数据源管理器已经设置成功了。接下来,我们就要回到R中进行后面的操作。在32位的R中利用install.packages(“RODBC”)命令进行RODBC包的安装。大家要留意,我们要利用32位的R来安装RODBC包。这也是我在文章中为什么建议大家同时安装两个位数的R软件的原因。如我计算机的截图,i386是32位的 x64是64位的。
我们RStuido一般是关联64位的,也可以自己进行修改,在options里面进行设置。
这个是RStudio进行设置的截图。
进去后,点击change。
此处可以修改关联的R。
继续回来我们的问题。RODBC包安装好后,我们就可以实现R与MYSQL的链接了。包下载安装好后,就可以利用包中的odbcConnect(dsn, uid = "", pwd ="", ...)函数进行数据库连接,并继续数据的传输及分析工作。
这个是本机mysql的一些信息,daniel是刚才ODBC数据源管理器里面设置的DSN,root是mysql的登录账号,123456是登录密码。如果你们能看到数据库信息,说明已经连通了。
我们先尝试如果将R的数据插入到数据库中。可以使用sqlSave(channel,dat,tablename=NULL,append=FALSE)命令将R中的数据框写入或更新(append=TRUE)到MySQL数据库的某个表中。比如我们想把R自带的mtcars数据写入到MySQL中,在数据库中生成新表mydata。
大家看到了,我们在MYSQL已经新生成一个表mydata。现在,尝试将数据库中的数据传入到R中。可以利用sqlFetch(channel, sqtable, ..., colnames = FALSE, rownames = TRUE)命令读取MySQL数据库中的mydata表到一个数据框中。
以上截图sqlFetch中的第一个参数是刚才建立的链接channel,第二个参数是数据库中存在的表mydata。我们运行命令后就将mysql中的mydata表全部读取到R中。有时候,我们并不想将原始表读入到R中,只想利用数据库中表的一些问题:可以利用sqlQuery(channel, query, errors = TRUE, ..., rows_at_time)命令向mysql数据库提交一个查询并返回结果。比如相对mydata表,统计按照vs和am进行分组,统计mpg的平均组,执行以下代码可以完成该操作。
以上是在win中实现R与数据库的链接。接下来,给大家快速过一下shiny包快速开发web app应用的过程。
Shiny是R中的一种Web开发框架,使得R的使用者不必太了解CSS、JS,只需要了解一些HTML的知识就可以快速完成Web开发,且Shiny包集成了Bootstrap、jQuery、Ajax等特性,极大解放了作为统计语言的R的生产力。使得非传统程序员的R使用者不必依赖于前端、后端工程师就可以自己依照业务完成一些简单的数据可视化工作,快速验证想法的可靠性。
Shiny应用包含两个基本的组成部分:一个是用户界面脚本(a user-interface script),另一个是服务器脚本(a server script)。
用户界面(ui)脚本控制应用的布局与外表;服务器(server)脚本包含构建应用所需要的一些重要指示。shiny包也自带了一些app应用例子帮助新手快速上手,比如我们想看一个交互直方图。执行以下代码:
if(!require(shiny) install.packages(“shiny”) runExample(“01_hello”)
执行命令会得到一个web app应用界面:
以上截图就是一个网页,我们可以拖动滑动条,直方图会立即发生变化。我们只需要在服务器上进行部署就可以实现网页共享,一个数据分析平台的应用就开发完成了。
以上是关于在win下做数据分析的一些经验分享。
问:除了Java,R还可以把展示结果输出到什么语言中呢?
答: R语言可以跟很多语言、工具实现完美集成。比如C++、Java这些底层编程语言,也能与PHP、JS、html等前端展示语言进行很好地结合,直接将R的结果进行展示。比如前面提到的shiny包的ui.R其实就是承担了客户端的html页面设计工作,我们也可以直接在ui.R直接编写html脚本来实现自定义的网页布局。比如大家刚刚看到的前端的展示,其实可以ui.R完全用html来写。
大家如果对各种工具集成感兴趣,可以看看张丹的那本《R的极客理想-——工具篇》,对于一位偏数据开发的童鞋会有很大的启发。
问:之前没有接触过R语言这块,但是明年可能要了解使用数据分析这块,可以推荐下可以循序渐进的学习流程吗?
答: 嗯,对于新手,我个人建议还是一步一个脚印,打好基础。做数据分析师没有捷径,只能一步一个脚印,循序渐进。但是有一些标准的流程可以参考,你平时的工作就有个方向,知道针对什么业务用什么方法实现。 给大家分享一个通用的行业流程。 跨行业的数据挖掘标准流程CRISP-DM方法论,是一种业界认可的用于指导数据挖掘工作的方法。按照CRISP-DM方法论,一个数据分析的完整流程包括6个阶段:分别是业务理解、数据理解、数据准备、建立模型、模型评估和模型发布。这6个阶段的顺序并不是固定不变的,在不同的业务场景中,可以有不同的流转方向。
拿我所在游戏行业的数据来说,我总结了以下几点:
业务理解: 该阶段的核心内容包括正确理解业务背景和业务需求,同时能把业务需求有效转化成合理的分析需求,并设计指标体系和拟定实施计划。
数据理解:该阶段从数据收集开始,并对可用的数据进行数据探索和评估,识别数据质量问题,发现数据不同属性间的关系。
数据准备:这个阶段属于数据清洗和转换工作,包含数据缺失值和异常值的处理,保证建模前的数据质量;数据的重组、转换以及衍生等处理,比如对数据进行标准化处理、对某些指标进行分箱操作以便达到建模需求。
建立模型:该环节是游戏数据分析流程中技术含量最高的阶段,数据分析师应该根据项目需求和数据特点选择适合的算法,并使用专业的数据挖掘工具建立模型。
然后是模型评估和发布,评估这几年常用的是混淆矩阵和ROC曲线,还有多重交叉验证。
以上方法论对于一个初学者我觉得是非常重要的,你们需要知道你现在做的事情是属于哪个阶段,才能选择相应的工具和方法去实现。如果大家对数据分析整个流程感兴趣,可以关注我今年初将要出版的新书《R语言游戏数据分析》,这本书会详细介绍了各种阶段的知识和技巧。
这篇文章总结的很到位,大家可以看看。
以上是个人的一些建议,希望学任何东西都是多看多想多练,这次才能培养自己的分析思维。
问:扩展包的安装除了在线安装,还有其他方式吗?如果有些包不在cran上,通过什么命令进行安装?
答: 很多时候,大家安装包时会出现无法安装的情况,此时我们可以进行另外一种安装方式,就是可以下载压缩包进行本地安装。cran上的安装包可以直接去官网下载,如下截图。
大家可以看到,侧边栏有个叫Packages的菜单,我们点击即可进入cran所有包的页面。此时也是提供了windows、linux和mac不同系统的压缩包下载。如果大家用的是win,请下载后缀为zip的文件。下载后,我们就可以实现本地安装,以RStudio为例。
点击install 弹窗如下。
默认是在线安装,我们改为zip的本地安装即可。选中你需要安装的压缩包,然后点击Install就可以完成包的本地安装。不过,有一点需要注意的地方就是,此种安装方式会造成依赖包不能一并进行安装。所以如果进行本地安装时留意一下包所依赖的其他包。此外,我们有很多处于开发状态包放在github上面。此时不能用install.packages()命令进行安装,需要利用install_github()命令进行安装。
该命令在devtools包中,故需要先install.packages(“devtools”)进行devtools包的安装。包安装完后,就可以利用library或require命令进行包的加载,就可以利用包实现很多扩展功能了。如果是RStuido,也可以直接点击包名前面的小框√即可完成包的加载。
包的安装时很讲技巧的,今天就先简单分享到这里。比如rCharts、recharts等交互包就是在github上,大家有兴趣可以尝试下载安装。
问:如何将excel数据导入到R中?
答: 有多个包可以实现EXCEL数据的导入,不过最简单的方式是将其转化为csv再通过read.table或read.csv命令导入。给大家介绍几个专门导入excel数据的包。
例如,RODBC包中的odbcConnectExcel2007函数、xlsx包中的read.xlsx函数、XLConnect包中的loadworkbook和readWorksheet函数访问Excel2007文件。其中,RODBC、xlsx、XLConnect包都需要依赖于rJava包,也需要依赖于计算机的jre环境才行。
相对来说比较麻烦,给大家简单解释下。
先看看我们计算机的jre环境,先调出cmd窗口,输入java - version查看java版本。如下图所示。
大家可以看到,我这边的装好的是1.8 64位的java,此时需要利用64位的R来安装那几个扩展包来进行excel的读取。以下给大家演示下这几个包的加载。
大家看到的截图,是利用64位的R可以将这两个包加载到R中,接下来就可以完成excel数据的导入了。
大家如果以后遇到此错误,就说明你的rJava位数与本机的jre位数不一样。
这些包的安装比较麻烦,如果真要从excel中导入数据到R中,给大家介绍一个不需要依赖java环境的包:readxl包。直接通过install.packages("readxl")进行安装,然后read_excel函数进行excel数据的读取,具体大家有时间可以去尝试下,我就不进行案例演示了。
问:R语言能创建哪些数据挖掘模型?如何对模型效果进行评估?
答: 算法模型一般分为两种:有监督模型、无监督模型。比如我们常听到的聚类分析、关联规则就是非常出名的无监督模型。聚类分析用在用户分群业务领域,在R中可以利用kmeans函数实现K均值聚类,通过hclust实现层次聚类。例如无监督模型中的关联规则,R实现是非常方便的。我们利用arules包实现apriori算法,利用arulesViz包对规则进行可视化。这个也是我觉得R强大之一,可以把枯燥的模型结果进行可视化展示,让你的分析结果更具体更形象。
举一个道具销售的例子来说明,假如说我们数据库有这样的数据。
第一列是用户id、第二列是道具名称、第三列是购买数量。关联关系,我们想从这堆数据里面发现一些购买偏好和道具的关联惯性。 首先是数据重组:
然后是数据转换:
可以看到,实现了数据转换,为建模做好了准备,现在就可以建模和查看结果了。
rules <- apriori(data_class,parameter=list(support=0.005,confidence=0.1,target="rules"))
此行就是建模代码,R只需要一行命令就可以完成关联规则建模的工作。
这个是关联规则的结果,我们也可以进行可视化。
通过arulesViz包的plot函数实现的。以上就是无监督模型的一些介绍。
接下来,我们简单聊下有监督模型。经典的线性回归、Logitic回归、决策树、朴素贝叶斯、KNN近邻分类,还有这几年非常流行的袋装、随机森林、神经网络、支持向量机等等,这些都属于有监督模型,R都有相应的包可以实现,非常简单。决策树文章中已经分享过,我们就简单来了解下随机森林的R实现吧。
使用随机森林和袋装的目的是:实际中,只使用单一模型决定一组数据的分类常常并不可行,因为对数据分类描述比较清晰的一个模型也许异常复杂,只使用一种准则建立的模型很难避免不出现过度拟合。因而,一个更好的方法是采用投票方法从这些分类器的结果中选择最优的模型,换句话说,如果我们对不同算法的预测结果取平均,相比只使用一个分类器,可能会得到更好的分类模型。
R的randomForest包中的randomForest函数实现随机森林算法,并提供了importance和varImpPlot两个函数用来评估每个属性的重要性,其中importance函数将列表展示模型中的每个属性的重要性,而varImpPlot函数则可以通过绘制平均精确率下降及平均基尼下降曲线实现属性重要性的可视化。
> library(randomForest) > randomForest.model <- randomForest(accept~.,data=carTR)
以上语句就构建了随机森林模型。
这个是通过可视化的手段查看各个自变量(X)对因变量(Y)的重要性。可见,登录次数和活跃度是对是否付费影响最重要的因素。我们可以通过这种方式对内在规则也进行一定的探索。建立模型后,就可以predict对其他数据进行预测;利用table函数可以构建混淆矩阵查看模型的预测效果,对模型进行评估等等;里面有很多复杂的东西,大家可以查看相关资料。以上就是关于一个随机算法的实现例子的简单分享。
最后,感谢人民邮电出版社为本场Chat获奖读者提供《R语言初学指南》一书。
(以上内容转自GitChat,版权归GitChat所有,转载请联系GitChat,微信号:GitChat,原文:《曹园:八段锦是一种什么样的运动方式?》)
本文转载自异步社区。
原文链接:https://www.epubit.com/articleDetails?id=NC7E3EF9306B0000150F71F801890B8A0
- 点赞
- 收藏
- 关注作者
评论(0)