我会的语言
数据分析工具太多了:简而言之,我推荐R语言作为“分析语言”,Python可以作为“全能工具”语言,另外需要学习一门建站语言。除此以外,最好学会Markdown,git(svn),linux bash. 此外,鉴于现在数据量越来越大,感觉最好学一学Scala和Spark集群。(上述差不多就是我会的语言,我还会C++,不过似乎长期没有发挥过什么作用了……)。下面详细说一下这些语言的选择依据:
R: 有很多人拿他和Matlab和Python对比,说它们都差不多的。我的理由是,Matlab是付费软件。至于Python,再做一些基本的数据分析的问题上可以与R媲美,但是R再复杂算法、最新方法、包管理等问题上,真的是无与伦比的,大概很多说Python的人不需要用到特别复杂的数学模型。比如说,用Python的Numpy包也可以实现矩阵运算,这与R很像。但是,如果想要用Python马上找到ICA包,nnPCA包,分析各种特殊数据的接口包和函数,一般不会用R那么方便。再科研界,一般来说,一片文章发出来了,附带的R语言代码就出来了,因为R语言写起来实在是太快了。综上,再数据分析过程中,你绝大多数代码,都是把数据载入,看一下均值,方差,做一个小图等等,R语言绝对要快过其他大部分语言。
*Python: 我用过的最好用的胶水语言和全能语言,几乎大部分问题都能插上一脚的语言。做异步网站Python不如Nodejs,但是Python也能做网站。实现数学模型Python不如R快,但是Python确实也能写模型……这就Python的优势,我一直觉得,如果能把Python学到精通,那也是相当厉害的。
建站语言:这就太多了,从Java,C#到PHP,再到Python和Ruby,再到Nodejs,不同的语言有不同的框架可以让你快速起步,至于谁最好网上也是吵得一塌糊涂。个人感觉,无论什么语言,精通就好。精通建站语言的目的在于:如果想做一个东西能让更多人看到,不会做网站肯定要受制于别人。
Markdown:快速写出漂亮的文档(比如这个文档)。。。看起来可能没用,适用于对自己有要求,对质量有要求的人。一句话形容就是,5分钟学完,然后从此再也不用排版了。
git:版本管理软件,我一开始用的是svn(由于Bioconductor的关系)。用来让你的程序不断迭代,自己也不会忘记曾经做过什么改变。
**bash:**linux系统的基本操作得会。不过严格来说,我目前再linux上遇到的所有问题,似乎其实再Windows上都能得到解决方案……
scala和Spark:分布式计算是过去三四年的热点,原因就是它确实能在一定程度上解决数据量过大的问题。比如基因组数据,人体有30亿对碱基,常规的分析软件可能需要跑很久,而用Spark只需要几分钟就能跑完。我曾经短暂地用过一下Spark,当时就觉得好厉害……不过,Spark一类的工具,只能逐行解决问题,就是说,如果你需要做矩阵运算一类的问题,就不可能了。
图:最新的2017编程语言榜单,R能名列14,肯定是数据分析撑起来的,因为R不是工程开发常用语言。转自链接
R语言的优势
这个问题网上有很大多答案,就我自己而言,我觉得R语言最大的优势有下面几个:
免费:鉴于它是免费的,所以很多人都回去用,所以它发展的特别快。导致每个月都会有几百个新的R包出现。
算法实现容易:一个线性回归函数,用R来写不到10行,用C++可能200行都打不住,工作效率就是这样提升的。
数据可视化: R语言可以完成从简单到复杂的一系列可视化作图。这个太重要了,再近几年,伴随着Shiny这一类工具的出现,R已经可以做一些小网页了。
交互平台做的好:你每次输入一行代码,马上就能看到结果。不需要编译,也不需要运行脚本,这在写程序的过程中是很方便的。
基本上我觉得最大的优势就是上述这几个,网上还可以看到各种各样的解释。
R语言的劣势
R语言不是无所不能的,它肯定有其限制所在。根据我一段时间的使用,感觉在以下问题上R语言还有待改进:
IDE太少:至今我没有见到什么我特别喜欢的IDAT,所以我用vim写程序,用直接的交互界面进行运行。RStudio似乎是目前唯一的R语言IDE,但是我不是很喜欢用,原因是一方面它的交互框与原生的交互框不一样,另外,它甚至不能同时开好几个R交互框!(所以直到今天,我还在寻找Windows平台上的最优IDE)。
R包质量不一定高:很多R包其实都是各种领域的科学家为了发文章写出来的脚本集合,他们有些运行起来很费劲,需要你去满足各种条件和要求。很多R包根本不具备工程开发可能性。(我本人就重写过好几个R包和函数,因为自己写的比原本的R包可靠很多。)
受到内存限制: R不能处理太大的数据,我说的太大大概意味着上亿行吧,千万行级别的数据我还是成功读入处理过的。不过在生产环境下,我估计100万行可能都不行,因为读取速度可能会很慢很慢……近段时间出现的RHaddop和RSpark是值得探索的工具。我用过R Spark,效果还是不错的,可以用于解决一些问题。
总而言之,这是一个很值得学习的语言。而且我也坚信,再未来很长一段时间,R语言都会变得越来越重要与主流。