r与python语法_Python和R:我推荐Python的几大理由

大家好,我是老乔,这里是超智学堂的《超智·统计学》系列课程。

本文是系列课程的第九期,3779个字,预计用时6分钟。

为了让学习更加体系化,本系列所有的内容,我都同步放在了【超智星球】网站上。

# 为什么要使用Python进行数据分析

先回顾一下,上一篇文章的内容。上篇文章,我重点推荐了R语言。主要理由如下:

1. R的使用模式是脚本(如果你对编程不感兴趣,选R)

2. 对于数据科学任务,R的语法更直观形象

3. 在数据处理方面,R非常优秀

4. 在数据可视化方面,R非常优秀

5. R在统计学地位突出(如果你是统计学相关,学R)

6. R也有其缺点,但依旧备受青睐(学了R不会没有用)

尽管我强烈推荐学R,但它也不是唯一的选择。对于某些人,Python可能是最好的选择。下面讲一下哪些情况下选择Python更好。

R说:“我R天生就是为这个领域而设计的。你Python是个外来户,凭什么跟我争地盘?“

Python说:“哼,你做的了也能做好的事,我也能做好;你做不好的事,我也做的很好;你做不了的事,我完全能做好”

嗯,很像《龙门飞甲》里面那句话:“你问我西厂什么东西,,,,东厂管得了的我要管,东厂管不了的我更要管,,,这就是西厂”。

### Python说:你做不了的,我做得了

我已经说了R更擅长数据科学。但如果你想建立软件系统的话,我认为Python更合适。

这涉及到两种场景与能力:通用编程能力、数据分析能力。

* 【在通用编程能力方面】,自从1991年诞生以来,Python现在已经成为最受欢迎的动态编程语言之一(其他还有Perl、Ruby等)。由于拥有大量的Web框架(比如Rails(Ruby)和Django(Python)),自从2005年,非常流行使用Python和Ruby进行网站建设工作。

* 【在数据分析能力方面】,近年来,由于Python的库(例如pandas和scikit-learn)不断改良,使其成为数据分析任务的一个优选方案。

我想澄清一下,不是说R“不能”写软件,只是说它“不适合”。R语言一出生就是为了数据分析领域设计的,它的常规语法、语义表达都更加适合数据领域。但是,这种特定领域的“便捷”,在熟悉通用编程语言的人看来,可能就是“灾难”。

Python的闪光点就是写软件。在这一点上,不只是跟R相比更适合写软件,而是跟所有编程语言JAVA、C等等比起来,Python都是一个很受推崇的语言。事实上,许许多多的人(包括我自己)都很容易爱上Python这门语言。

Python是一门解释型语言。这些语言常被称作脚本(scripting)语言,因为它们可以用于编写简短而粗糙的小程序(也就是脚本)。就像一些专家所说的那样,写Python代码就如同写伪代码。

但我个人并不喜欢“脚本语言”这个术语,因为它好像在说这些语言无法用于构建严谨的软件。

事实上,大多数代码都可以两部分:少量需要占用大部分执行时间的代码,以及大量不经常执行的“胶水代码”。大部分情况下,胶水代码的执行时间是微不足道的。我们可以把大量不经常执行的代码用Python,来写。然后就有精力去优化计算瓶颈的代码。

由于程序员的时间通常都比CPU时间值钱,这种在“程序性能”与“工作效率”之间的权衡,是非常有意义的。这也就是常说的“人生苦短,我用Python”。

选择Python不只是关乎易用性,更关键的是关乎一致性。Python可以避免“两种语言”问题。

很多组织通常都会用一种类似于领域特定的计算语言(如SAS和R)对新的想法进行研究、原型构建和测试,然后再将这些想法移植到某个更大的生产系统中去(可能是用Java、C#或C++编写的)

而如果选择Python,我们完全可以只使用Python这一种语言去构建以数据为中心的应用程序。为什么一种语言就够了,却要使用两个语言的开发环境呢?

我相信越来越多的企业也会这样看,因为研究人员和工程技术人员使用同一种编程工具将会给企业带来非常显著的组织效益。

此外,在对其他语言的调用,和数据源的连接、读取,对系统的操作,正则表达和文字处理等方面,Python都有着明显优势。

正因如此,许多企业和国家实验室也利用Python来“粘合”那些已经用了多年的遗留软件系统。这意味着学Python的学员,往往可以更快的适应一个复杂零散的工作场景需求。

总之,如果你曾经有软件开发经验或者你是计算机科学专业的话,我认为Python会更适合你。

## Python说:你做不好的,我做的好

在上一篇文章的最后,我们讲了R的诸多缺陷,并且,我们认为最致命的,还是性能。这使得它更适合个人学习和个人小型科研,很难在企业中、大型实验室中应用(或应用范围极大受限)

Python与R相比速度要快。Python可以直接处理上G的数据,而R不行。Python的数据挖掘包Orange canve 中的决策树分析50万用户10秒出结果,用R几个小时也出不来,8G内存全部占满--除非你水平很高,R矢量化编程做得好(对我上大学时用的ThinkPad T450来说,感觉只要是100M以上的数据,R都很难胜任,但是Python却基本胜任)

R分析数据时需要先通过数据库把大数据转化为小数据(通过groupby)才能交给R做分析,因此R不可能直接分析行为详单,只能分析统计结果。所以有人说:Python=R+SQL/Hive,并不是没有道理的。

Python能变为成功的科学计算工具的部分原因是,其胶水语言的特性,使得它能够轻松地集成C、C++以及Fortran代码。这进一步强化了性能方面的优势。

由于Python是一种解释型编程语言,因此大部分Python代码都要比用编译型语言(比如Java和C++)编写的代码运行慢得多。

对于高并发、多线程的应用程序而言(尤其是拥有许多计算密集型线程的应用程序),Python并不是一种理想的编程语言。

在那些要求延迟非常小或高资源利用率的应用中(例如高频交易系统),就需要使用诸如C++这样更低级、更低生产率的语言进行编程。

在这类问题上,Python允许用户使用原生的C或C++的来完成任务。比如,你可以调用基于C实现的线性代数、优选、积分、快速傅里叶变换以及其他诸如此类的算法。

当然了,咱这个系列的课程,完全不会出现这类代码。

## Python说:你的过去,我正在追赶

2012年的时候我们说R是学术界的主流,但是今天是2020年了。时代变了啊,R大人。

在过去的10年,Python从一个边缘或“自担风险”的科学计算语言,成为了数据科学、机器学习、学界和工业界软件开发最重要的语言之一。

至今,Python已经发展出了一个巨大而活跃的科学计算(scientific computing)社区。

以前,R的优势在于有包罗万象的统计函数可以调用,特别是在时间序列分析方面,无论是经典还是前沿的方法都有相应的包直接使用。

现在Python已经有了pandas。pandas提供了一组标准的时间序列处理工具和数据算法。因此,你可以高效处理非常大的时间序列,轻松地进行切片/切块、聚合、对定期/不定期的时间序列进行重采样等。

可能你已经猜到了,这些工具中大部分都对金融和经济数据尤为有用,但你当然也可以用它们来分析服务器日志数据。于是,近年来,由于Python有不断改良的库(主要是pandas),使其成为数据处理任务的一大替代方案。

在数据可视化方面,Python也有诸多的库和包,我们后面会讲。但我要提的是,Python可以结合前端技术(html等),做出来的可视化图效果更酷炫。

比如百度Echarts:

## Python说:我的未来,你很难到达

现在Python正在慢慢取代R在学术界的地位。但Python之于R,不只是追赶,还是在超越。其未来的路子比R要宽广。很清晰的看到,R代表着过去,Python代表着未来。

这种取代,不是偶然的,而是历史的必然,其核心原因,是因为相比于R,Python更加适合当今这个时代数据科学的特点。

第一点,大数据。不多说了,前面我们讲过Python的性能。补充一下,我们有Pyspark,用于处理更大的大数据问题。

第二点,人工智能。Python比R更适合各类人工智能问题。我们本文主要说下机器学习和深度学习。

如果你想长期从事机器学习方面的研究,我建议你学Python。

客观的讲,R也有机器学习生态系统。特别地,R的caret包开发得很好,它有能力完成各种机器学习任务。比如:使用caret包建立回归模型(regression model)、支持向量机(SVM)、决策树(包括回归和分类)以及执行交叉验证(cross validation)等等。总之,R的机器学习生态系统发展得很好。

但是,Python在机器学习方面的支持出现更早。为实现各种不同机器学习方法,Python的scikit-learn库提供了一套更加简洁和易读的语法。而R中caret包的语法有时有点拙劣。尤其,caret包与Tidyverse包兼容得不是很好,输出的结果有时也很难处理。相反,Python的scikit-learn库与Python生态环境整合得很好。

市面上有关机器学习的书籍,其算法实现很多都是用Python写的。总之,如果你想致力于机器学习,我认为Python会更好。

除了传统机器学习,此外,深度学习可谓是目前人工智能领域最热门的技术之一,而Python是深度学习使用最热门的语言。

大多数深度学习框架都有Python接口,比如:TensorFlow,Keras,Pytorch,Theano,MXNET等等。

Python与各框架兼容得非常好,拥有大量贡献者、搜索结果、相关书籍和学术文章;Github上的深度学习项目大多数都是用Python写的。如果你是刚入门深度学习的新手,使用Keras是不错的选择。

相比较,R对深度学习框架兼容方面表现不佳。因此如果你想专注深度学习,Python可能更适合。

## 总结

至今为止,Python和R这是第二篇了。一篇写R,一篇写Python。

整体上来看,对于不喜欢编程的,我推荐R;喜欢编程的,我推荐Python。

选择困难症的:我推荐都学,并且推荐先学Python。除非有外部因素要求学R。

事实上,Python和R我都会,我个人会结合使用,下期,我会讲一下怎么让R和Python共舞。

感谢大家。可以关注我的公众号【超智星球】,或是知乎留言我。一起学习进步。我们下期再见。

你可能感兴趣的:(r与python语法)