PythonR语言-python和r相遇

前言

  如果你是数据分析领域的新兵,那么你一定很难抉择——在进行数据分析时,到底应该使用哪个语言,R还是Python?在网络上,也经常出现诸如“我想学习机器语言,我应该用哪个编程语言”或者“我想快速解决问题,我应该用R还是Python”等这类问题。尽管两个编程语言目前都是数据分析社区的佼佼者,但是它们仍在为成为数据科学家的首选编程语言而战斗。

  最近几年,用R和Python的人越来越多,于是出现了众多关于用哪个做数据分析最好的争议。从整体来说,个人认为数据分析需要的是在有限时间内,用最可行的方式拿到最有用的结果。因此,不应该局限于任何单一的编程方法,而应该是各取所长,根据个人特点,问题的形式而灵活选取或者结合。

  Python和R是统计学中两种最流行的的编程语言,关于R做数据分析的优势已经不言而喻了,众多和全面的统计方法使得从方法上来说,R的数据分析能力(模型方法众多且可视化功能强大)是其它语言不能比拟的。其实争议最多的也就是出现在其计算性能和全面性上。而Python因为编程灵活方便,语法易于理解而被大家所接受。如何将两者结合起来,发挥更大的作用,值得探索。


目录

  • 1.R简介

  • 2.Python简介

  • 3.R&Python相遇

1. R简介

  R(又称R语言)是一款开源的跨平台的数值统计和数值图形化展现工具。通俗点说,R是用来做统计和画图的。R拥有自己的脚本语言和大量的统计、图形库(得益于开源社区),这让她看起来既美又实用。与其他同类软件(如 SPSS)相比,R的特点是纯命令行的,这倒也好,我们更应该把注意力放在数据本身,而非统计工具的UI。

  Ross Ihaka和Robert Gentleman于1995年在S语言中创造了开源语言R,目的是专注于提供更好和更人性化的方式做数据分析、统计和图形模型的语言。起初R主要是在学术和研究使用,但近来企业界发现R也很不错。这使得中的R成为企业中使用的全球发展最快的统计语言之一。

  R的主要优势是它有一个庞大的社区,通过邮件列表,用户贡献的文档和一个非常活跃的堆栈溢出组提供支持。还有CRAN镜像,一个用户可以很简单地创造的一个包含R包的知识库。这些包有R里面的函数和数据,各地的镜像都是R网站的备份文件,完全一样,用户可以可以选择离你最近的镜像访问最新的技术和功能,而无需从头开发。

  R虽说有一套自己的语言,还挺完备,但她最专业的还是做统计和画图,而像连接数据库、文本处理、文件操作等这些脏活可不能委屈R来干哪,这些得有其 他语言来负责,我的选择是咱最熟悉的、做这些脏活最棒的Python。

  如果你是一个有经验的程序员,你可以不会觉得使用R可以提高效率,但是,你可能会发现学习R经常会遇到瓶颈。幸运的是现在的资源很多。

2. Python简介

  Python([KK] 英语发音: /'paɪθɑn/, [DJ] 英语发音: /ˈpaiθən/),是一种面向对象、直译式的计算机程序设计语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。Python的语法非常简捷和清晰,与其它计算机程序设计语言最大的不同在于,它采用缩进来定义语句块。

  Python的官方介绍是:Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,能简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的很多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。

  Python是由Guido van Rossem创建于1991年,并强调效率和代码的可读性。希望深入的数据分析或应用统计技术的程序员是Python的主要用户。

  当你越需要在工程环境中工作,你会越喜欢Python。它是一种灵活的语言,在处理一些新东西上表现很好,并且注重可读性和简单性,它的学习曲线是比较低的。

  和R类似,Python也有包,pypi是一个Python包的仓库,里面有很多别人写好的Python库。

  Python也是一个大社区,但它是一个有点比较分散,因为它是一个通用的语言。然而,Python自称他们在数据科学中更占优势地位:预期的增长,更新颖的科学数据应用的起源在这里。

3. R&Python相遇

  • a).运算速度:

  针对于程序速度的比较,有众多的测试方法和不同的结果。比如,这个链接里的结果(http://attractivechaos.github.io/plb/)。

  综合其他各个地方的测试结果,其实大体说来从基本运算速度来说,Python > R. 但是要注意,这里所说的运算速度是“基本计算”。也就是说不涉及引用特殊package,不用特殊数据结构和运算方式(比如R中的矢量化运算)的运算。而这样的运算比较很大程度上取决于基本程序逻辑的速度,比如for循环。R在这点的表现是很差的。基本上会比pyhon慢 3~10倍。

  但是,如果你愿意多花些心思更好的利用矢量化编程进行计算,那么无论从程序的长度来是速度上,都会使R的表现有显著性提高。我之前的一个帖子做过这样的比较 (http://bbs.pinggu.org/thread-1042435-1-1.html),具体的内容就不重复了。总之,在这样的使用方式下,对大部分运算,R的速度是可以和python接近的,当然,用户也需要花更多地心思去优化程序。

  除此之外,在实际使用的角度来说,数据分析在R中大部分时候使用已有的方法,因此可以使用众多已经成型的package。如果你使用的package质量很好,通常在大计算量的程序中,作者实际使用的都是更低级更高效的语言(比如C, Fortran)。因此,这些大计算量的步骤实际上是以最高效的方式完成的。如果相应的运算在pyhon里面没有调用其他低级语言的优化,R就可以在这些方面胜过python。我这里说到的是不需要自己编写的底层语言调用,在R和python中都可以实现调用别的语言,但是这需要用户自己编程,从人工角度来讲,专业性较高,不在讨论范围。

  整体来说,对于对R使用和编程有一定深入理解的人来说,我不认为R做数据分析的速度会比python差。但是对于简单粗暴的编程方式,python的确更胜一筹。

  • b).全面性:

  从这点来说,我认为Python的确胜过R。无论是对其他语言的调用,和数据源的连接、读取,对系统的操作,还是正则表达和文字处理,Python都有着明显优势。毕竟,python本身是作为一门计算机编程语言出现的,而R本身只是源于统计计算。所以从语言的全面性来说,两者差异显著。

  综上所述,本人认为,对于本地文件直接的数据分析,大部分时候R是比较Python更好的 (速度相近,但分析更专业)。如果涉及多方资源的协调(比如远程、数据库、系统、网页),那么最好的方式是将python和R相结合使用。

  当然,每种语言有自己的学习曲线。因此学习本身也要多花时间,因此如何选取还要依赖于个人而论。

  • c).优势对比:

    • 在以下领域中,Python 比R 更有优势:

        ◆ 网络爬虫和数据抓取:虽然R中的rvest已经简化了网页抓取, Python的beautifulsoup和Scrapy更加成熟,并提供更多的功能。◆ 数据库连接:虽然R有大量的用于连接到数据库的选项, Python的sqlachemy只用了一个程序包就提供了所有的数据库连接功能,并可广泛用于生产环境。
    • 而在以下领域中,R比Python更有优势:

        ◆ 统计分析选项:尽管Python的SciPy和 Pandas以及 statsmodels的组合提供了很大的一套统计分析工具,而R是专门围绕着统计分析应用等创建的,因此提供了更多的相关工具。◆ 交互式图像或控制板:bokeh, plotly和intuitics最近都把Python的图形使用扩展到了Web浏览器,但是举个使用shiny的例子,R中的shiny 控制面板运行速度更快,而且往往需要更少的代码。

    此外,由于数据科学团队现在拥有一个比较广泛的技能库,任何应用程序所选择的编程语言都可能用到以前的知识和经验。对于一些应用,特别是原型设计和开发应用,人们使用他们已知的工具则速度会更快。

    • 纯文本 的“Air Gap(网闸)”策略

      指在完全断开网络物理连接的基础上,实现合法信息的共享。本文中指用纯文本文件实现两种语言间代码的共享——译者注。使用纯文本作为两种语言之间的物理隔离,你需要按如下步骤进行。

        1.从命令行中重构你的R和Python脚本,并接受命令行参数。2.输出共享数据到公共文件格式。3.在一种语言中执行另一种语言,按要求传递参数。
    • 优势:

        ★ 最简单的方法,通常最快★ 可以轻松查看中间输出结果★ 已有常见文件格式,如: CSV , JSON , YAML的解析器
    • 劣势:

        ☆ 需要事先商定一个共同的模式或文件格式☆ 如果流程变长的话,难以管理中间输出结果和路径☆ 如果数据量变大,本地磁盘读写将成为瓶颈
  • d).R和Python:数据科学行业的表现:

      ★ 如果你看一下最近的民意调查,在数据分析的编程语言方面,R是明显的赢家。★ 有越来越多的人从研发转向Python。此外,有越来越多的公司使用这两种语言来进行组合。★ 如果你打算从事数据行业,你用好学会这两种语言。招聘趋势显示这两个技能的需求日益增加,而工资远高于平均水平。

4. 总结

  这两种语言从一开始都具有非常显著的优缺点。从历史上看,尽管把两者分割开来是因为教育背景:统计学家们倾向用R,而程序员则选择了Python语言。然而,随着数据科学家的增加,这种区别开始变得模糊起来。数据科学家就是这样一种人:软件工程师中最懂统计学,统计学家中最会编程的人。由于这两种语言各自提供大量独特的库资源,对能够利用这两种语言的相对优势的数据科学家的需求正在不断增长。

转载于:https://www.cnblogs.com/cloudtj/articles/6362514.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人脸识别案例:【实战】opencv人脸检测+Haar特征分类器

1 基础 我们使用机器学习的方法完成人脸检测,首先需要大量的正样本图像(面部图像)和负样本图像(不含面部的图像)来训练分类器。我们需要从其中提取特征。下图中的 Haar 特征会被使用,就像我们的卷积核&…

Android input 子设备adb 调试命令

adb shell getevent 查看input设备属于哪一个event adb shell getevent dev/input/event1 与input event 对应的信息 rootandroid:/ # cat/proc/bus/input/devices 查看TP上报的速率: getevent -r /dev/input/event1 查看TP上报的键值:getevent -l…

数据结构之图:用图解决案例,Python代码实现——24

用图解决畅通工程案例与途径查找 代码中需要引入的类方法代码链接: 无向图Undigraph深度优先搜索DFS与广度优先搜索BFS 畅通工程-续 介绍 案例和之前并查集中实现的一样,但问题略有改动,需要判断9-10城市是否相通,9-8城市是否…

【在虚拟环境下完美解决】1698: error: (-215:Assertion failed) empty() in function cv::CascadeClassifier

问题描述 官方文档做的Demo发现遇到了错误提示如下: error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier::detectMultiScale’ 错误的原因: 出现 error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassif…

在线生成大全(这里真的什么都有)

粉丝身份证:http://id.igogo8.com/ 制作印章:http://www.makepic.com/print.php 邮址图片生成:http://www.makepic.com/email.php条形码生成:http://www.makepic.com/barcode.phpKiss学堂 颁发结业证:http://www.makep…

Git 忽略一些文件的提交

首先 git init 初始化一个git 代码仓库 git add . 向这个仓库提东西 git config --global core.excludesfile .gitignore 用.gitignore 这个文件来忽略不比较的内容 vi .gitignore /Music/res/对这个文件下的内容不进行比较然后还要 git rm --cached /Music/res/* -r …

计算机视觉概述:视觉任务+场景领域+发展历程+典型任务

一、什么是计算机视觉 定义:计算机视觉(Computer vision)是⼀⻔研究如何使机器“看”的科学,更 进⼀步的说,就是指⽤摄影机和计算机代替⼈眼对⽬标进⾏识别、跟踪和测量 等,⽤计算机处理成为更适合⼈眼观察…

数据结构之图:有向图的介绍与实现,Python代码实现——25

有向图的介绍 引入 在实际生活中,很多应用相关的图都是有方向性的,最直观的就是网络,可以从A页面通过链接跳转到B页面,那么a和b连接的方向是a->b,但不能说是b->a,此时我们就需要使用有向图来解决这一类问题,它和我们之前学习的无向图,最大的区别就在于连接是具有方向的…

Linux加载vmlinux调试

使用gdb加载内核符号表 arm-eabi-gdb out/target/product/msm8625/obj/KERNEL_OBJ/vmlinux 在内核的.config里面要打开 DEBUG_INFO和DEBUG_VM 定位故障代码 (gdb) l * qrd7627a_add_io_devices+0x100 0xc07cd05c is in qrd7627a_add_io_devices (/home/yejialong/GH700C/kernel…

图像分类_01图像分类简介:挑战+近邻分类器+CIFAR-10数据集概述

2.1.1 图像分类 任务目的:对输入的图像赋予一个标签,这个标签在指定类别集合中。 下面这个例子中,图像分类模型拍摄一张图像并将概率分配给4个标签{cat,dog,hat,mug}。如图所示,请记住&#xf…

数据结构之图:有向图的拓扑排序,Python代码实现——26

有向图的拓扑排序 拓扑排序介绍 什么是拓扑排序? 一个有向图的拓扑排序(Topological sort 或 Topological ordering)是根据其有向边从顶点U到顶点V对其所有顶点的一个线性排序举个例子:让一个拓扑排序的图中的所有顶点代表某项…

Openstack 一直在调度中解决

查看日志/var/log/nova/nova-scheduler.log,/var/log/nova/nova-compute.log,均无报错 查看/var/log/nova/nova-conductor.log报错为 2017-02-06 09:27:04.976 2206 ERROR oslo_messaging.rpc.server OperationalError: (pymysql.err.OperationalError) (1040, uToo many conne…

图像分类_02神经网络(NN)简介:定义+ 感知机+历史

2.2.1 什么是神经网络 人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN)。是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)结构和功能的 计算模型…

【Github教程】史上最全github使用方法:github入门到精通

原文 http://www.eoeandroid.com/thread-274556-1-1.html 【初识Github】 首先让我们大家一起喊一句“Hello Github”。YEAH!就是这样。Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理。在推出后,Git在其…

图像分类_03分类器及损失:线性分类+ SVM损失+Softmax 分类+交叉熵损失

2.3.1 线性分类 2.3.1.1 线性分类解释 上图图中的权重计算结果结果并不好,权重会给我们的猫图像分配⼀个⾮常低的猫分数。得出的结果偏向于狗。 如果可视化分类,我们为了⽅便,将⼀个图⽚理解成⼀个⼆维的点,在下⾯坐标中显示如下…

数据结构之图:加权无向图与寻找最小生成树,Python——27

加权无向图与prim算法和Kruskal算法寻找最小生成树 加权无向图的介绍 引入 加权无向图是一种为每条边关联一 个权重值或 是成本的图模型。这种图能够自然地表示许多应用。在一副航空图中,边表示航线,权值则可以表示距离或是费用。在一副电路图中,边表示导线,权值则可能表示导…

课程简介

什么是网页布局? 网页布局是网页制作的基础。 DIVCSS布局网页 流式布局、浮动布局、绝对定位布局 相关知识点 标准文档流 盒子模型 float属性 position属性 三个案例 自动居中-列布局案例--盒子模型的使用方法 浮动布局案例--float属性 解决浮动影响的方法 绝对定位…

图像分类_04神经网络最优化过程:反向传播+代码实现

logistic模型原理与推导过程分析(1)https://blog.csdn.net/qq_39237205/article/details/121031296https://blog.csdn.net/qq_39237205/article/details/121031296 logistic模型原理与推导过程分析(2)https://blog.csdn.net/qq_3…

数据结构之图:加权有向图与dijkstra算法找到最短路径,Python——28

加权有向图与dijkstra算法找到最短路径 加权有向图的构造 最短路径问题与最短路径树 最短路径问题(The shortest path problem)定义 最短路径可以是时间花费最短,也可以是距离最短,或是花费最少在图论中,最短路径问…

【转】构建微服务架构的最佳实践2/3

本文是这一系列文章的第二篇,将介绍服务的交互。 服务的交互 微服务架构提倡有许多职责单一的小服务组成,这些服务之间互相交互。然而这就造成了一系列的问题,比如:服务之间如何发现彼此?是否采用统一的协议&#xff1…