EARL 是一个关于 R 语言的会议。今年的会议中却出现了大量关于Python的讨论。我认为,这个现象部分归功于在会议前一天举办的,关于整合 Python 和 R 的三小时研讨会。

本文是此系列三篇文章的第一篇。这个系列的文章旨在:

• 介绍整合 Python 和 R 的基本策略

• 盘点此过程涉及的各个步骤

• 用实例说明如何/为何这么做

作为这个系列的开篇,本文将:

• 阐述在同一个流程中使用 Python 和 R 的原因

• 介绍通过命令行使用 R 和 Python 的方法

• 展示如何将输入内容作为参数,并将输出内容写成多种文件格式

为什么要“整合”而不是“二选一”?

在网上简单搜索有关“R Python”的文章,前十条结果里只有两条是讨论同时使用 R 和 Python 的好处,其余的讨论都将它们置于竞争对立之中。这件事并不难理解,从创立之初,两种语言就拥有各自鲜明的优点/缺点。从历史上看,Python 和 R 的分界有关学科背景:统计学家倾向于 R ,而程序员选择 Python 。不过,随着数据科学家这个职业的兴起,原有的分界变得模糊起来。

“数据科学家 (名词): 比软件工程师更擅长统计,比统计学家更擅长软件工程的人。”-twitter 网友 @josh_wills

R 和 Python 都有丰富的资源库,而数据科学家越来越需要学会平衡利用它们各自的优势。

在以下领域 Python 的表现比 R 更优异:

• 网络爬虫/抓取:尽管 rvest 已经让 R 的网络爬虫/抓取变得容易,但 Python 的 beautifulsoup 和 Scrapy 更加成熟、功能更强大。

• 连接数据库: R 提供了许多连接数据库的选择,但 Python 只用 sqlachemy 一个包就可以解决,且在生产环境中广泛使用。

在以下领域 R 比 Python 表现更优异:

• 统计分析: 尽管 Python 里 Scipy、Pandas、statsmodels 提供了一系列统计工具 ,R 本身是专门为统计分析应用建立的,所以拥有更多此类工具。

• 互动式图表/面板: 近来 bokeh、plotly、 intuitics 将 Python 的图形功能扩展到了网页浏览器,但 R 的 shiny 和 shiny dashboard 速度更快,所需代码更少。

此外,当今数据分析团队拥有许多技能,选择哪种语言实际上基于背景知识和经验。对于一些应用,尤其是原型设计和开发类,工作人员使用已经熟悉的工具会比较快速。

策略:使用没有相对结构的文件格式作为中转

在本系列的文章中,我们探讨最简单的整合 R 和 Python 的方法。使用没有相对结构的文件格式作为中转需要执行如下步骤。

1. 重构 R 和 Python 的脚本使其在命令行可执行,并能接受命令行的参数。

2. 将共享的数据输出为一种通用的文件格式。

3. 在一种语言中执行另一种,需要的情况下传递参数。

此策略的好处:

• 最简单,通常也最快。

• 容易查阅中间的输出。

• 常用的文件格式 CSV, JSON, YAML已有解析器。

此策略的坏处:

• 需要对一种通用结构或文件格式达成共识。

• 如果流程变复杂,管理中间输出会很麻烦。

• 在数据量大的情况下,硬盘读写会成为一个瓶颈。

命令行脚本

对于 R 和 Python ,用在 Windows /类 Linux 终端环境运行脚本是相似的。要执行的命令可以被分解成下面这种形式:

<命令> <脚本路径> <附加参数>

这里:

<命令>是要运行的可执行文件类别 (对于 R 代码来说是 Rscript ,对于 Python 代码来说是 Python )

<脚本路径> 是脚本的完整或相对路径。如果路径名有空格,整个路径必须加双引号。

<附加参数> 是一组用格分隔的参数的list,由脚本文件自己解析。注意,它们会作为字符串被传入。

举例说明,一个 R 脚本要在终端环境打开,运行方式如下:

Rscript path/to/myscript.R arg1 arg2 arg3

常见小问题

• 可执行文件必须已经存在于当前路径。否则需要提供系统位置的完整路径。

• 有空格的路径名称会出现问题,尤其在Windows系统,因此必须加双引号使其被视作“一个”路径。

在R中获取来自命令行的参数

在上面的例子中,arg1, arg2, arg3 是 R 脚本要解析的参数。这些参数可以用 commandArgsfunction 获取。

# myscript.R

# 获取来自命令行的参数

myArgs <- commandArgs(trailingOnly = TRUE)

# myArgs是个包含全部参数的字符向量

print(myArgs)

print(class(myArgs))复制代码

设定 trailingOnly = TRUE ,则向量 myArgs 只包含你加入命令行中的参数。如果此项是 FALSE (默认设置),则向量中会有其他的参数,比如刚刚执行的脚本路径。

在Python中获取来自命令行的参数

Python path/to/myscript.py arg1 arg2 arg3

用这种方式在命令行中执行的 Python 脚本,可以通过事先 import sys 模块获取参数 arg1, arg2, arg3。这个模块有关各系统特有的参数和功能,但这里我们只关心其中的 argv 属性。argv 是传递给当前脚本的一组完整参数。第一个元素永远是脚本文件的完整路径。

# myscript.py

import sys

# 获取来自命令行的参数

my_args = sys.argv

# my_args是一个list,第一个元素是所执行的文件(路径)。

print(type(my_args))

print(my_args)

如果想要只保留参数,可以把第一个元素去掉。

# 选取除了第一个元素以外的全部内容

my_args = sys.argv[1:]复制代码

像上面关于 R 的例子一样,这里所有参数是作为字符串被解析的。如果有其他需要,须自行转换成想要的类型。

将输出内容写成文件

R 和 Python 的中介文件有几种备选格式。对于一般的无相对结构的文件格式,CSV 适合表格数据。JSON 或 YAML 适合更缺乏结构的数据(或元数据),数据可能包含许多不同的字段或是网状结构。

这些都是很常见的数据序列化格式,两种语言都有相应解析器。R中推荐使用下列几个包:

• CSV 使用 readr

• JSON 使用 jsonlite

• YAML 使用 yaml

Python:

• CSV 使用 csv

• JSON 使用 json

• YAML 使用 PyYAML

csv 模块和 json 模块是标准的 Python 库的组成部分,Python 语言本身自带。PyYAML 需要单独安装。至于上面提到的各 R 包,用正常方式安装即可。

总结

综上所述,同一个流程中,R 和 Python 相互传递数据可使用如下方式:

• 使用命令行传递参数,以及

• 用一个通用的,无相对格式的文件传递数据

然而,在一些情况下,使用文件作为中介存储会产生麻烦,且不利于表现。下一篇文章中,我们会探讨如何让R和Python直接相互调用,并把输出返回到内存中。

原作者:Chris Musselle & Kate Ross-Smith

翻译:数据工匠

原文链接:http://datartisan.com/article/detail/56.html

python中数据分析的流程为-在数据分析流程中整合Python和R(一)相关推荐

  1. Python数据分析 找出数组中每行(或每列)中指定的百分位数 numpy.percentile()

    [小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] Python数据分析 找出数组中每行(或每列) 中指定的百分位数 numpy.percent ...

  2. Python爬虫+数据分析+数据可视化(分析《雪中悍刀行》弹幕)

    Python爬虫+数据分析+数据可视化(分析<雪中悍刀行>弹幕) 哔哔一下 爬虫部分 代码部分 效果展示 数据可视化 代码展示 效果展示 视频讲解 福利环节 哔哔一下 雪中悍刀行兄弟们都看 ...

  3. python计算消费总额_Python在校园数据分析中的应用——以一卡通消费为例

    Python 在校园数据分析中的应用--以一卡通消费为例 王全胜 [期刊名称] <电脑知识与技术> [年 ( 卷 ), 期] 2017(013)009 [摘要] 随着大数据时代的到来 ,P ...

  4. Python数据分析小技巧:如何在Pandas中实现数据透视表?

    Python数据分析小技巧:如何在Pandas中实现数据透视表? 数据透视表是数据分析中非常有用的工具,可以帮助我们快速了解数据的结构.关联和趋势.在Pandas中,我们可以使用pivot_table ...

  5. python数据分析书单排行_数据分析有哪些好书值得推荐?

    1.统计学书单 如果你打开招聘的职位要求,都会要求具有统计学的知识,这是因为统计学是数据分析.机器学习的基础知识,是必须要学习的. 推荐理由:很多人感到统计学无聊,是因为从一开始就没有明白学习这门课的 ...

  6. python 科学计算基础教程电子版-自学Python 编程基础、科学计算及数据分析

    自学Python 编程基础.科学计算及数据分析 epub pdf mobi txt 下载 自学Python 编程基础.科学计算及数据分析 epub pdf mobi txt 下载 ☆☆☆☆☆ 李金 著 ...

  7. python编程入门与案例详解-自学Python 编程基础、科学计算及数据分析

    自学Python 编程基础.科学计算及数据分析 epub pdf mobi txt 下载 自学Python 编程基础.科学计算及数据分析 epub pdf mobi txt 下载 ☆☆☆☆☆ 李金 著 ...

  8. 工业制造中的大数据分析应用_工业大数据分析方案-美林数据

    认识工业大数据 什么是工业大数据? 我们先看看维基百科的说法:"工业大数据(Industrialbig data)是构成工业人工智能的重要元素,指由工业设备高速产生的大量数据,对应不同时间下 ...

  9. python金融风控评分卡模型和数据分析

    python金融风控评分卡模型和数据分析微专业课(博主录制):http://dwz.date/b9vv 作者Toby:持牌照消费金融模型专家,和中科院,中科大教授保持长期项目合作:和同盾,聚信立等外部 ...

最新文章

  1. 使用dom4j解析XML例子
  2. 移动应用交互设计中合理使用动态
  3. centos 7 mysql 默认_centos7 mysql 5.6.30 默认配置文件
  4. AndroidStudio cmakelist找不到问题
  5. linux驱动编写(虚拟字符设备编写)
  6. Spring与SpringMVC的区别
  7. 70% 的Chrome漏洞是内存安全问题,谷歌和开发人员约法三章
  8. 张宇高等数学强化阶段笔记并标记重点
  9. 网络端口和端口扫描简介
  10. keil编译后MCU需要的flash和RAM容量
  11. 看到越来越多的人用奇怪的域名,其中有china.xx之类的好域名。
  12. 15分钟看完:悉尼科技大学入选 CVPR 2021 的 9 篇论文,都研究什么?
  13. 全国私营企业调查数据(CPES1993-2014)
  14. 进程切换及一些常见概念(面试必问)
  15. 计算机专业申请ps怎么写,美国留学申请:个人陈述PS范文(计算机专业)
  16. 给app加一个启动图
  17. 手机访问本地配置域名下的项目
  18. 小程序自动化测试工具之AirTest
  19. 如何零基础学习安卓开发?
  20. 黑苹果hidp显示不清楚_macOS开启HiDPI外接2K显示器(解决字体发虚问题)

热门文章

  1. Android layout布局属性、标签属性总结大全
  2. 总结20121016
  3. CIO职业生涯如何进行三级跳
  4. 想学Python,怎么开始才好呢?
  5. 【计算机视觉】背景建模之PBAS
  6. jquery 向上滚动【四】个人认为好一些,哈
  7. 会计有必要学python吗-工作三年却被实习生抢了饭碗,学会Python到底有多吃香?...
  8. 零基础入门学python 第二版-《零基础入门学习Python》第二版和第一版的区别在哪里呢?...
  9. python详细安装步骤-Pycharm及python安装详细教程(图解)
  10. python资料库-Python对接六大主流数据库,只需三步