最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

深入对比数据科学工具箱:Python和R之争

[复制链接]
跳转到指定楼层
楼主
发表于 2016-4-9 20:17:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
概述
在真实的数据科学世界里,我们会有两个极端,一个是业务,一个是工程。偏向业务的数据科学被称为数据分析(Data Analysis),也就是A型数据科学。偏向工程的数据科学被称为数据构建(Data Building),也就是B型数据科学。

从工具上来看,按由业务到工程的顺序,这个两条是:EXCEL >> R >> Python >> Scala
在实际工作中,对于小数据集的简单分析来说,使用EXCEL绝对是最佳选择。当我们需要更多复杂的统计分析和数据处理时,我们就需要转移到 Python 和 R 上。在确定工程实施和大数据集操作时,我们就需要依赖 Scala 的静态类型等工程方法构建完整的数据分析系统。

Scala 和 Excel 是两个极端,对于大多数创业公司而言,我们没有足够多的人手来实现专业化的分工,更多情况下,我们会在 Python 和 R 上花费更多的时间同时完成数据分析(A型)和数据构建(B型)的工作。而许多人也对 Python 和 R 的交叉使用存在疑惑,所以本文将从实践角度对 Python 和 R 中做了一个详细的比较。

应用场景对比
应用Python的场景




  • 网络爬虫/抓取:尽管 rvest 已经让 R 的网络爬虫/抓取变得容易,但 Python 的 beautifulsoup 和 Scrapy 更加成熟、功能更强大,结合django-scrapy我们可以很快的构建一个定制化的爬虫管理系统。
  • 连接数据库: R 提供了许多连接数据库的选择,但 Python 只用 sqlachemy 通过ORM的方式,一个包就解决了多种数据库连接的问题,且在生产环境中广泛使用。Python由于支持占位符操作,在拼接SQL语句时也更加方便。
  • 内容管理系统:基于Django,Python可以快速通过ORM建立数据库、后台管理系统,而R
    中的 Shiny 的鉴权功能暂时还需要付费使用。
  • API构建:通过Tornado这个标准的网络处理库,Python也可以快速实现轻量级的API,而R则较为复杂。


应用R的场景




  • 统计分析: 尽管 Python 里 Scipy、Pandas、statsmodels 提供了一系列统计工具 ,R 本身是专门为统计分析应用建立的,所以拥有更多此类工具。
  • 互动式图表/面板: 近来 bokeh、plotly、 intuitics 将 Python 的图形功能扩展到了网页浏览器,甚至我们可以用tornado+d3来进一步定制可视化页面,但 R 的 shiny 和 shiny dashboard 速度更快,所需代码更少。


此外,当今数据分析团队拥有许多技能,选择哪种语言实际上基于背景知识和经验。对于一些应用,尤其是原型设计和开发类,工作人员使用已经熟悉的工具会比较快速。
数据流编程对比
接着,我们将通过下面几个方面,对Python 和 R 的数据流编程做出一个详细的对比。




  • 参数传递
  • 数据读取
  • 基本数据结构对照
  • 矩阵转化
  • 矩阵计算
  • 数据操作


参数传递

Python/R 都可以通过命令行的方式和其他语言做交互,通过命令行而不是直接调用某个类或方法可以更好地降低耦合性,在提高团队协作的效率。

数据传输与解析

对于数据传输与解析,我们首推的格式是csv,因为一方面,csv格式的读写解析都可以通过 Python 和 R 的原生函数完成,不需要再安装其他包。另一方面,csv格式可以很快的转化为 data frame 格式,而data frame 格式是数据流分析的核心。
不过,实际情况中,我们需要传输一些非结构化的数据,这时候就必须用到 JSNO 或者 YAML。


基本数据结构

由于是从科学计算的角度出发,R 中的数据结构非常的简单,主要包括 向量(一维)、多维数组(二维时为矩阵)、列表(非结构化数据)、数据框(结构化数据)。而 Python 则包含更丰富的数据结构来实现数据更精准的访问和内存控制,多维数组(可读写、有序)、元组(只读、有序)、集合(唯一、无序)、字典(Key-Value)等等。

矩阵操作

实际上,Python(numpy) 和 R中的矩阵都是通过一个多维数组(ndarray)实现的。


数据框操作

参考 R 中的 data frame 结构,Python 的 Pandas包也实现了类似的 data frame 数据结构。现在,为了加强数据框的操作,R 中更是演进出了 data table 格式(简称dt),这种格式以 dt[where,select,group by] 的形式支持类似SQL的语法。
数据流编程对比的示例

Python 的 Pandas 中的管道操作
R 的 dplyr 中的管道操作

数据可视化对比

绘制相关性散点图
对比数据相关性是数据探索常用的一种方法,下面是Python和R的对比。
Python


R

虽然我们最终得到了类似的图形,这里R中GGally是依赖于ggplot2,而Python则是在matplotlib的基础上结合Seaborn,除了GGally在R中我们还有很多其他的类似方法来实现对比制图,显然R中的绘图有更完善的生态系统。

绘制聚类效果图
这里以K-means为例,为了方便聚类,我们将非数值型或者有确实数据的列排除在外。
Python


R


结论

Python 的 pandas 从 R 中偷师 dataframes,R 中的 rvest 则借鉴了 Python 的 BeautifulSoup,我们可以看出两种语言在一定程度上存在的互补性,通常,我们认为 Python 比 R 在泛型编程上更有优势,而 R 在数据探索、统计分析是一种更高效的独立数据分析工具。所以说,同时学会Python和R这两把刷子才是数据科学的王道。

参考资料




  • pandas doucumentation: Comparison with R / R libraries
  • Comparison – R vs. Python: head to head data analysis
  • Hacker News: Comparison – R vs. Python
  • Quora: How does R compare with pandas?
  • yhat: R and pandas and what I've learned about each
  • Why are pandas merges in python faster than data.table merges in R?
  • Python和R科学计算操作速查表
  • 知乎:R 和 Python (numpy scipy pandas) 用于统计学分析,哪个更好?


转载请保留作者信息并注明作者 Harry Zhu 的 FinanceR专栏如果涉及源代码请注明GitHub地址:https://github.com/harryprince。商业使用请联系作者。


楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-4-29 21:13

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表