做数据科学,到底应该学习哪门编程语言呢?本文将从语言的特性、第三方库、公司使用情况来做一些分析。对大数据和人工智能感兴趣的朋友可以添加我的微信:aistevelu,大家一起交流学习。三种语言第三方库分布 来源:ActiveWizards
Python
Python无疑是近几年来的编程语言界的明星。
Python的优势简单易用
有丰富的第三方库,支持Web、科学计算和机器学习
胶水特性,可以将各种不同的程序粘接在一起
可以在生产环境中使用
在数据科学领域,Python有众多框架可供使用者调用:机器学习框架scikit-learn,TensorFlow,XGBoost;数据预处理模块pandas;科学计算模块NumPy以及可视化工具。这些框架的使用者众多,支持很好,网上的教程非常丰富,适合初学者入门。此外,Python对Web编程支持很好,两个常用的Web框架Django和Flask都很容易上手,可以用来将数据科学的研究结果放到Web界面上展示。
对于复杂的数据流,Python可以像胶水一样,将shell、Hive SQL等ETL代码粘在一起。
Python的缺点原生Python速度慢,不适合直接做在线服务
原生Python速度慢的问题一直被诟病,也正因为此,原生Python代码不适合直接部署在生产环境。注意,这里强调的是“原生”,很多第三方库为了解决速度慢的问题,底层均使用C/C++或Fortran实现,如TensorFlow,NumPy等,可以有效解决速度慢的问题。另外,TensorFlow还提供了TensorFlow Serving,可以将训练好的模型部署到生产环境,虽然执行速度仍然比C++慢一些,但可以加快编程迭代速度,因此被很多公司采用。
因为可以快速部署在生产环境,Python被各个公司所青睐。
R
与Python一样,R也是一款自由开源的编程语言,上手很简单,并且有众多研究开发人员为其开发第三方库,是一个研究人员经常使用的语言。很多统计学领域的研究人员喜欢使用R。
R的包非常丰富,有支持机器学习的线性和非线性模型库,可视化工具ggplot2等等。而且R的第三方库更加开放,很多人通过github与全世界的R语言使用者共享自己开发的包。开放的缺点是,一些个人开发的R包质量参差不齐,可能有一些小问题,而且不一定能得到及时的修复。
R一大问题也是速度慢,不适合大规模的数据处理,R的一些底层包为了解决这个问题,使用C或Fortran编写,能在一定程度上解决速度慢的问题。相比之下,R仍然不适合多机器的并行计算。
R经常与Python对标,与Python相比,R是一个学院派。因为无法处理大规模数据,所以很少有互联网公司把R部署在生产环境。因此很多掌握R语言的应届生会发现在找工作时,R没有太大优势。
Scala
Scala是大数据领域的新秀。Scala建立在Java虚拟机上,因此很多Java的第三方库都可以被Scala调用。要知道,Java可是编程语言界里的当仁不让的老大。Scala是一种“函数式”编程语言,这种函数式编程非常适合大数据处理,第一次接触函数式编程的朋友可能需要一段时间来适应这种编程思想。
Scala的优势Scala更快
比起Python和R,Scala的变量类型是确定的,即静态类型
支持高并发,执行效率更高,适合计算密集型算法
主流大数据计算引擎均基于Scala,如Spark、Flink等
GB级以上数据量的公司都在使用Scala在Spark或者Flink上进行数据预处理,特征工程和数据分析,可能一些小公司不需要Scala,但是大公司都会要求Scala技能!
小结
我认为,Scala用来做大数据,Python用来做机器学习。每种语言都有其优势和缺点,编程语言的选择通常与所要解决的问题、数据量大小、公司的技术栈等多种因素影响,而且很多任务可能需要多种语言一起完成。比如,在数据量较大的推荐系统中,需要先使用Scala做数据分析和特征工程,生成中间数据,再使用TensorFlow训练模型,并使用TensorFlow Serving部署上线。
欢迎各位朋友在评论区分享你自己关于数据科学编程语言的经验和想法。