左手是“Python”的身体,右手是“R”的灵魂,你爱哪个?
来源商业新知网,原标题:你爱 “Python”的身体,还是“R”的灵魂?
数据科学界有三大宝: Python、SAS和R,不过像SAS这种高端物种,不是我们这些平民能供养得起的啊。
根据 IEEE Spectrum的最新排名,R和Python仍然是最热门的数据科学编程语言。本文将从数据可视化、建模库、易学性和社区支持等四方面入手,比较R和Python的语言性能。
数据可视化
数据科学的一个重要部分是交流。分析成果需要以一种有效、易懂的方式展示出来。因此,任何用于数据科学的语言或软件包都应该具有良好的数据可视化工具。良好的数据可视化具有清晰性。无论模型有多复杂,都会用一种简单明了的方法来说明结果,即使是外行人也能理解。
Python
Python以其大量的库而闻名。有很多库可以用于绘图和可视化。最热门的库是matplotlib和seaborn。matplotlib库改编自MATLAB,具有相似的特性和风格。matplotlib库是一个非常强大的可视化工具,内置了各种功能,特别是在与其他Python数据科学库pandas和numpy很好地协作时,它可以非常容易地用于绘制简单的plot函数。
虽然matplotlib可以生成大量的图形和图表,但它缺乏简单性。最麻烦的方面是调整plot函数的大小:如果存在很多变量,那么你可能会花费很多功夫来试图把它们整齐地放在一个plot函数中。另一个大问题是创建subplot函数,同样,将它们都调整到一个图中可能会变得很复杂。
现在,基于matplotlib的seaborn包含了更多的美学图形和plot函数。这个库无疑是对matplotlib陈旧风格的改进,但它仍然存在同样的基本问题:创建图形可能非常复杂。这也是Python未来的改进方向。
R
有许多库可以用于R的数据可视化,其中ggplot2在使用和广泛度方面首屈一指。该库使用图形哲学语法,使用图层在绘图上绘制对象。层之间通常是相互连接的,并且可以共享许多共同的特性。这些层让你可以用很少的代码创建非常复杂的图。该库允许绘制摘要函数。综上,ggplot2比matplotlib更加灵活简洁,因此在这个领域R优势更为明显。
但是,值得注意的是,Python包含了一个与R中原始ggplot2功能类似的ggplot库。
建模库
数据科学需要使用许多算法。这些复杂的数学方法需要稳健的计算。重新编写算法代码对数据科学家而言相当费时,他们需要具有内置建模支持的语言。Python和R刚好满足这一点。
Python
Python拥有大量的机器学习库,包括scikit-learn、XGboost、TensorFlow、Keras和PyTorch等。Python也有pandas,它可以兼容表格形式的数据。pandas库使处理csv或基于excel的数据变得非常容易。除此之外,Python还有很优秀的科学软件包,比如numpy。numpy可以帮助你瞬间完成复杂的数学计算,比如矩阵运算。所有这些包组合在一起,使Python成为一个适用于硬核建模的强大工具。
R
和Python一样,R也有大量的库——大约10000个。其中应用最广泛的是mice,rpart, party和caret。这些包将从预建模阶段到后模型/优化阶段给予你帮助。
这些库几乎可以解决所有的数据问题。但相比之下,Python缺乏统计非线性回归(除了简单的曲线拟合)和混合效应模型。另一方面,R缺乏Python所提供的速度,尤其是在处理大量数据的时候。
易学性
市场对数据分析和处理人员的渴求度相当高。许多人都希望加入数据科学的大潮,其中很多人几乎没有编程经验。因此,在比较两种语言时,需要考虑其是否简单好学易上手。
Python
Python设计于1989年,其理念是强调代码的可读性和使编程变得简单或简洁,Python的设计者显然做到了,因为这种语言非常容易学习。虽然Python的语法灵感来自于C,但与C不同的是,它并不复杂。因此,Python作为初学者的语言学习首选,任何人都可以在相对较短的时间内学会它。
R
R语言也并不难学。它比c++或JavaScript等许多语言都要简单。与Python一样,R的大部分语法都是基于C的,但与Python不同的是,R最初是专门为统计学家和科学家设计的,因此门槛较高。
社区支持
作为一名数据科学家,需要经常解决一些数据难题。在难以找到相关的库或包解决问题的情况下,可以在语言的官方文档或在线社区论坛中搜索,从而获得良好的社区支持。
这两种语言都有活跃的Stackoverflow成员,并且都有一个活跃的邮件列表(在这个列表中,你可以轻松地向专家询问解决方案)。R有在线的R文档,可以在其中找到关于某些函数和函数输入的信息。大多数Python库,比如pandas和scikit-learn,都有自己的官方在线文档来解释每个库。
这两种语言都有大量的用户基础,二者都有非常活跃的支持社区。不难看出,两者在这方面似乎是平等的。
结论
R还是Python?无疑,这两种都是很优秀的语言。如果追求简单上手,可以选择Python,如果想轻松创建视觉效果,那么R语言是首选。
左手是“Python”的身体,右手是“R”的灵魂,你爱哪个?的更多相关文章
- Python计算身体质量指数BMI
使用Python计算身体质量指数BMI 运行结果如下: 源代码: 1 ''' 2 3. 利用函数思想,将"身体质量指数BMI"源程序封装成为一个函数并调用. 3 :param he ...
- 迷宫问题python实现(靠右手摸墙)
大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 这是大二时候的数学模型毕业课程设计,我选择了自己研究盲人穿越迷宫的问题.当然后来再在网上查了这个问 ...
- 一篇搞懂python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)
关于文件操作的几种常用方式,网上已有很多解说,内容很丰富,但也因此有些杂乱复杂.今天,我就以我个人的学习经验写一篇详细又易懂的总结文章,希望大家看完之后会有所收获. 一.核心功能 ‘r’ ...
- Python换行符问题:\r\n还是\n?
今天写一个Python脚本去读取一个txt文件时,发现一个很有趣的现象: 如果这个文件是用atom编辑器写的,发现换行符是'\r'.这样一来去逐行读取数据就失效了,因为用open函数 去打开该文件re ...
- python中字符串前的r什么意思
Python中,u表示unicode string,表示使用unicode进行编码,没有u表示byte string,类型是str,在没有声明编码方式时,默认ASCI编码.如果要指定编码方式,可在文件 ...
- python中的\n、\r与\b
python中使用print函数,有时候会使用end参数来控制字符输出效果,这时候\n.\r与\b就派上用场了. \n 代表换行,也就是从本行换到下一行 \r 代表回车,也就是回到本行最开始的位置,从 ...
- Python 字符串前面加u,r,b,f的含义
1.字符串前加 u 例:u"我是含有中文字符组成的字符串." 作用: 后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时 ...
- python 中 \n 和转义r的作用和\r的实际应用
我们先看看这张转义字符图: 1. 知识储备 \r 表示将光标的位置回退到本行的开头位置 \b 表示将光标的位置回退一位 在 python 语言中, 使用 print 打印输出时,默认是会进行换行的.如 ...
- python学习之 字符串前'r'的用法
在打开文件的时候open(r'c:\....') 加r和不加''r是有区别的 'r'是防止字符转义的 如果路径中出现'\t'的话 不加r的话\t就会被转义 而加了'r'之后'\t'就能保留原有的样子 ...
随机推荐
- Faster-RCNN理解
一.Faster-RCNN基本结构 该网络结构大致分为三个部分:卷积层得到高位图像特征feature maps.Region Proposal Network得到候选边框.classifier识别出物 ...
- 使用Netty开发RPC的技术原理
本片文字摘抄自https://www.cnblogs.com/jietang/p/5615681.html 1.定义RPC请求消息.应答消息结构,里面要包括RPC的接口定义模块,包括远程调用的类名.方 ...
- bzoj5109: [CodePlus 2017]大吉大利,晚上吃鸡!
Description 最近<绝地求生:大逃杀>风靡全球,皮皮和毛毛也迷上了这款游戏,他们经常组队玩这款游戏.在游戏中,皮皮 和毛毛最喜欢做的事情就是堵桥,每每有一个好时机都能收到不少的快 ...
- Node文件模块
在上一篇文章中有提到,Node模块分为核心模块和文件模块,接下来就简单总结一下文件模块. 文件模块则是在运行时动态加载,需要完整的路径分析.文件定位.编译执行过程.速度相比核心模块稍微慢一些,但是用的 ...
- 微软 workflow 工作流总结
1.状态机工作流 (1)状态机工作流从state1 流转到 state2 到stateN (2) state中有执行状态和退出状态 (3) 在进入下一个步骤(state1 到 state2)前,首先会 ...
- jupyter依赖tornado版本
使用jupyter莫名奇妙出现500错误,发现是更新tornado出了问题,我的jupyter版本是5.7.4不支持6.x版本的tornado,回退到5.x版本的tornado就好了. pip ins ...
- 刘志梅 201771010115 《面向对象程序设计(java)》 第十八周学习总结
实验十八 总复习 实验时间 2018-12-30 1.实验理论知识 (1)第一个关键词:public称为访问修饰符,用于控制程序的其他部分对代码的访问级别. 第二个关键词:class表明java程序中 ...
- 理解Linux文件权限
任何完整的系统都应该具备有某种形式的安全性.必须用过某种机制来保护文件不被未授权的用户查看或修改:Linux系统遵循了Unix的文件权限的方法,来根据用户与用户组授权,实现文件安全访问. 1.Linu ...
- C#将时间转化自定义类型格式,C#获取时间间隔
C# string.Format格式化日期: DateTime dt = ,,,,,,); string.Format("{0:y yy yyy yyyy}",dt); //17 ...
- leetCode53. 最大子序和
示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6. 进阶: /** * @param {number[]} nu ...