R和Python作为数据分析的两大主流语言,究竟哪一个更好的争论不绝于耳。但对于两个语言都了解尝试过的小伙伴而言,结论其实非常简单:都好但都有不好。下面从几个方面聊聊我的看法。
开发目的
据我近期的观察了解,国内对Python的推广和接受度更高,可是这并不能代表R就不好。我个人认为一个最根本的原因是Python非常容易上手,稍微有一点编程基础的朋友一周之内就可以开始自由编程。因此,对于很多数据分析的新手而言,学习Python无疑是最快捷的入门方法了。这就让我联想到Python的设计初衷不就是这样么?“优雅”,“明确”,“简单”等等。(Python设计哲学)。Python就是为了改善代码可读性和效率而生的。
那么 R?R不同于Python,它的出生就肩负着统计分析、绘图、数据挖掘的重要使命。那么可想而知,R在被开发的过程中就融入了很多统计学的血液。举一个重要的例子,R里read.csv("example.csv", stringsAsFactors = F)的第二项参数 stringsAsFactors的default值是TRUE,这就表示在没有说明的情况下文件内所有的string都被做factor处理。这个设计害我在几次读入数据时都吃了苦头,并且表示无法理解这样的设置,决心找R官方讨个公道。但在多方查证后真正理解了这样设计的初衷。R最开始就是被统计学家广泛使用,在许多统计学原理公式中string都直接被当做factor处理,例如很多modelling function“lm()”和“glm(),不如在一开始就以factor读入,方便操作(stringsAsFactors详解)。真是因为+这一系列的设计理念,导致没有统计学背景的初学者很难对R产生好感,作出R远不如Python的结论。
使用人群
也正是因为开发目的的不同,导致了Python和R粉丝群的不同。
对于有着编程经验的IT开发者而言,很多时候需要对数据做一些简单处理,这时候最快最易上手的Python就变成了首选。我的和我的朋友在做了一些Python项目过后,也深深明白了那种快感。从零开始,基本一个下午,就能完成一些简单的数据清洗小项目。我的一位从未接触过Python但一直用C的PhD朋友,三天内也完成了导师布置的用Python写的Hadoop小项目。
R的使用人群就像它的开发目的一样,主要是一些统计学家已经研究学者,他们从根本研究数据,对统计学有着十分深刻的理解,R也使他们在运用各种模型时更加方便。在学习R的过程中,有一句话让我印象十分深刻:”Thecloser you are to statistics, research and data science, the more you might preferR.”。
切身感悟
本科软件工程出身的我,粗浅的学习过C和JAVA,具备一定的编程理论知识。在研究生阶段开始数据分析学习时,毅然决然选择了Python以显示自己的编程能力。不夸张的说,Python帮助我解决了大部分数据作业,我也没有想过要去学习R。
在GeoSpatial Analytics forBusiness Intelligence门课老师的强制要求下,开始学习R。这是一门基于地理信息的数据分析课程,整个课程阶段我都惊叹于进行各种地理shape数据的modelling时代码的简洁和package的丰富。以及最近的几个月开始了对R从基础开始的学习,越来越感慨R对于统计学的意义,只要是你能想要的model在R里都可以找到对应的package。在学习R的过程也是不断巩固统计学知识的过程,而统计学也是数据分析各种模型的基础。
结论
在不停游走于Python和R之间,我终于摸索出了一套使用它们的方法论。
Python和R应该作为数据分析的左右手出现,而不是对手。
很多数据分析项目的完整流程包含:
需求定义 → 数据获取→ 数据治理→ 数据分析→ 数据可视化
Python在数据获取和数据治理上有着非常明显的优势。例如网络爬虫,Python很多广泛应用的框架Scrapy等等。数据治理包括很多很细节的数据清洗工作,这个时候使用灵活性较强的Ptyhon会大大提高效率。并最终得到可以进行分析的“干净”的数据集。
数据分析这一步其实一开始是一个探索分析的过程,R在这方面比Python要便利的多,可以通过各种function,例如dim(),summary()等,快速的了解到数据集的整体特性。之后可以回滚到数据治理环节,和Python一起完成模型的特征提取。再者就是R丰富的各类分析模型,在处理好Raw数据过后,基本只需要几行代码就可以得到想要的数据挖掘结果。
最后的一步是数据可视化,数据分析师在向他人展示数据分析结果时,直观的图形图像往往能让人更好的理解。虽说感觉谈到数据化都是JS的天下,d3.js、django、leaflet等等。所以我们应该再学一门JS?(想想心都累了。)依然惊叹于R的package的丰富,目前市面上大部分在Business Analysis应用的可视化JS库都被R语言大神封装好了,加上R shiny R 的web framework可以封装发布(我的研究生论文就用到的Shiny做结果展示),直接向客户展示各种业务场景,十分高效。
所以,
R还是Python? 真的是个问题么?