专栏首页PPV课数据科学社区数据流编程教程:R语言与DataFrame

数据流编程教程:R语言与DataFrame

DataFrame

DataFrame 是一个表格或者类似二维数组的结构,它的各行表示一个实例,各列表示一个变量。

一. DataFrame数据流编程

二. 数据读取 readr/httr/DBI

1. readr

readr简化了我们读取多种格式表格型数据的方法,包括分割文件withread_delim(),read_csv()read_tsv()read_csv2()、固定宽度文件读取的read_fwf()read_table()以及read_log()来读取Web日志文件。在参数配置方面是和原生的read.xxx()函数族是看齐的。

readr是利用C++和RCpp编写的,所以执行的速度是相当快的,不过相对于直接用C语言写的data.table::fread()就稍微慢大概1.2-2倍左右。在实际使用中,data.talbe::fread()的读取速度可以比原生的read.csv有3-10倍的提升速度。

2. httr

httr是一个高级的网络请求库,类似于Python中的Tornado和Requests,除了提供基本的Restful接口设计功能,比如GET(), HEAD(),PATCH(), PUT(), DELETE()POST(),还提供了OAuth的调用,比如oauth1.0_token()oauth2.0_token()。而且httr还提供了诸如session、cookie、SSL、header、proxy、timeoutd等更过高级管理功能。当然你可以用它来做简单的爬虫应用,如果需要更高级的爬虫,我们需要投入rvest的怀抱来支持诸如xpath等高级爬虫特性。

3. DBI

DBI是一个为R与数据库通讯的数据库接口。相当于Java里面的DAO,Python里的Torndb和Tornlite,方便多种关系型数据库的SQL请求。其中最亮眼的是,R中的DataFrame和数据库之前可以以整个数据框插入的形式插入数据而不需要再拼接SQL语句。

以下是一个官方文档的示例:

三. 数据清洗 tidyr/jsonlite

1. tidyr

tidyr是一个数据清洗的新包,正在取代reshape2spreadsheets等包。清洁的数据在数据处理的后续流程中十分重要,比如数据变化(dplyr),可视化(ggplot2/ggvis)以及数据建模等。tidyr主要提供了一个类似Excel中数据透视表(pivot table)的功能,提供gatherspread函数将数据在长格式和宽格式之间相互转化,应用在比如稀疏矩阵和稠密矩阵之间的转化。此外,separateunion方法提供了数据分组拆分、合并的功能,应用在nominal数据的转化上。

2. jsonlite

类似于Python中的json库,参考前文 [[原]数据流编程教程:R语言与非结构化数据共舞](https://segmentfault.com/a/11...,我们可以知道jsonlite是一个标准的json转化库,依赖于jsonlite我们可以自由地在JSON和DataFrame之间相互转化。

四. 数据处理 dplyr/rlist/purrr

1. dplyr

dplyr包是现在数据流编程的核心,同时支持主流的管道操作 %>%,主要的数据处理方法包括:

(1)高级查询操作:

select(): 按列变量选择 filter(): 按行名称分片 slice(): 按行索引分片 mutate(): 在原数据集最后一列追加一些数据集 summarise(): 每组聚合为一个小数量的汇总统计,通常结合gruop_by()使用 arrange(): 按行排序

(2)关联表查询

inner_join(x, y): 匹配 x + y left_join(x, y): 所有 x + 匹配 y semi_join(x, y): 所有 x 在 y 中匹配的部分 anti_join(x, y): 所有 x 在 y 中不匹配的部分

(3)集合操作

intersect(x, y): x 和 y 的交集(按行) union(x, y): x 和 y 的并集(按行) setdiff(x, y): x 和 y 的补集 (在x中不在y中)

更多详细操作可以参考由SupStats翻译的 数据再加工速查表,比Python的老鼠书直观很多。

2. rlist

[参考前文 [原]数据流编程教程:R语言与非结构化数据共舞](https://segmentfault.com/a/11...,我们知道,区别于dplyr包,rlist包是针对非结构化数据处理而生的,也对以list为核心的数据结构提供了类似DataFrame的高级查询、管道操作等等方法。

3. purrr

purrr向Scala这样的具有高级类型系统的函数式编程语言学习,为data frame的操作提供更多的函数式编程方法,比如map、lambda表达式。此外,purrr引入了静态类型,来解决原生的apply函数族类型系统不稳定的情况。

我遇到过一个非常头疼的apply函数的问题:apply内的表达式计算结果不一致。

于是改成分步计算才能得到正确答案。

如果使用purrr包就可以很好的解决这一问题。参考 Wisdom's Quintessence: Purrr package for R is good for performance 的例子:

具体使用可以参考Rstudio Blog:purrr 0.2.0

五. 数据可视化 ggplot2/ggvis

1. ggplot2

ggplot2 是一个增强的数据可视化R包,帮助我们轻松创建令人惊叹的多层图形。它的设计理念类似于PhotoShop,具体参数包含设计对象、艺术渲染、统计量、尺寸调整、坐标系统、分片显示、位置调整、动画效果等等。

更多操作可以查看ggplot2与数据可视化速查表官方文档

实战可以参考R Graphics Cookbook一书

2. ggvis

ggvis是吸收了ggplot2vega以及d3的精华,目标旨在配合shiny打造动态可 交互的可视化组件。ggvis最明显的区别就是在作图时直接支持%>%的管道操作,比如:

ggplot2与ggvis的关系类似于plyr与dplyr的关系,都是一种演化过程。

六. 数据建模 broom

1. broom

在机器学习的本质其实就是各种姿势的回归,而在R中的各种回归分析往往不会返回一个整齐的data frame 结果。比如

这时候broom包就派上用场了,直接将统计结果转化为data frame格式:

glance()函数,返回data frame格式的部分参数结果

七. DataFrame优化

1. data.table

众所周知,data.frame的几个缺点有:

(1)大数据集打印缓慢

(2)内部搜索缓慢

(3)语法复杂

(4)缺乏内部的聚合操作

针对这几个问题,data.table应运而生。data.table完美兼容data.frame,这意味着之前对data.frame的操作我们可以完全保留,并且支持更多方便的数据操作方法。

data.table还参考了NoSQL中流行的Key-Value形式,引入了setkey()函数,为数据框设置关键字索引。

值得一提的是data.table引入了全新的索引形式,大大简化了data frame的分片形式,提供接近于原生矩阵的操作方式并直接利用C语言构造底层,保证操作的速度。

2. 对比操作

对比data.table 和 dplyr 的操作:

3. apply函数族
4. join 操作
5. 拼接操作

更多操作详情可查看data.table速查表

八. DataFrame可视化

DT包是谢溢辉老师的大作,为data frame数据提供了非常好的可视化功能,并且提供了筛选、分页、排序、搜索等数据查询操作。

九. 分布式DataFrame

DDF的全称是 Distributed Data Frame, 也就是分布式数据框。DDF用一个统一的跨引擎API简化了多数据源的分析操作,进一步将data frame底层的分布式傻瓜化。

在R中使用DDF,我们不需要修改之前任何的代码,并且绕过Hadoop的绝对限制,就可以让data frame格式的数据,自动获得分布式处理的能力!

DataFrame在R、Python和Spark三者中的联系

参考资料

1.Medium:6 Differences Between Pandas And Spark DataFrames

2.Quora:What are the differences of DataFrame between R and Pandas?

3.R Tutorial: Data Frame

4.Python Pandas 官方文档

5.知乎:R语言读大数据?

6.知乎的高分问答:如何使用 ggplot2?

7.R Graphs Cookbook

8.SparkR: Distributed data frames with Spark and R

9.Vimeo:R Data Structures

10.Announcing SparkR: R on Spark

11.amplab: SparkR R frontend for Spark

12.codementor: data frame operations with SparkR

13.Spark Summit: Distributed DataFrame (DDF) Simplifying Big Data For 14.The Rest Of Us

15.SparkR 官方文档

16.粉丝日志: 超高性能数据处理包data.table

17.yhat ggplot2 doc

18.Fast Data Processing with Spark, 2nd Edition

Harry Zhu 的 FinanceR专栏:https://segmentfault.com/blog...

来源:R语言中文社区

本文分享自微信公众号 - PPV课数据科学社区(ppvke123),作者:HarryZhu

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-10-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 从0到1掌握R语言网络爬虫

    引言 网上的数据和信息无穷无尽,如今人人都用百度谷歌来作为获取知识,了解新鲜事物的首要信息源。所有的这些网上的信息都是直接可得的,而为了满足日益增长的数据需求,...

    小莹莹
  • 多图技术贴 | 深入浅出解析大数据平台架构

    参加活动赢取话费和一个月免费会员 点击底部阅读原文,参加PPV课玩转可视化图表,赢取话费和PPV课一个月免费会员,精品课程免费看! 目录: 什么是大数据 Had...

    小莹莹
  • 大数据在医疗领域的七大应用

    原文:7 Big Data Use Cases for Healthcare 来源:http://www.ingrammicroadvisor.com/data...

    小莹莹
  • 谷歌大脑新算法,不折腾TPU就能加快AI训练速度

    GPU和像谷歌TPU这样的硬件加速器大大加快了神经网络的训练速度,推助AI迅速成长,在各个领域发挥超能力。

    量子位
  • 使用 Node.js 定制你的技术雷达:上篇

    最近在梳理团队项目依赖和各个项目技术栈的时候,发现使用技术雷达的形式来进行呈现和管理是个不错的点子。但是没找到维护简单,界面又清爽好看的 UI。

    soulteary
  • 使用 Node.js 定制你的技术雷达:上篇

    最近在梳理团队项目依赖和各个项目技术栈的时候,发现使用技术雷达的形式来进行呈现和管理是个不错的点子。但是没找到维护简单,界面又清爽好看的 UI。

    soulteary
  • AngularJS 用 $http.jsonp 跨域SyntaxError问题

    必须添加参数:callback=JSON_CALLBACK , 才能进success方法,如下: $http.jsonp("https://request.ad...

    庞小明
  • 手把手教你调试代码并使用Echarts进行数据可视化

    大家好,在昨天的文章中我们详细讲解了如何使用requests+bs4爬取美国疫情实时数据,但是在文章发布之后大约三个小时就有读者后台留言说怎么代码不能用了,在第...

    刘早起
  • Python3分析CSV数据

    with语句在语句结束时自动关闭文件对象。 使用csv模块reader函数创建文件读取对象filereader,读取输入文件中的行。 使用csv模块的wri...

    用户1250179
  • 浅谈HBase

    “ 数据的价值已经超越了传统企业广泛认同的价值边界,海量数据的存储将是企业所面临的的挑战。HBase正是这种背景下的产物,用以存储海量数据的,支持高并发、高性能...

    搬砖俱乐部

扫码关注云+社区

领取腾讯云代金券