码迷,mamicode.com
首页 > 其他好文 > 详细

New packages for reading data into R — fast

时间:2015-04-11 22:13:25      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

小伙伴儿们有福啦,2015年4月10日,Hadley Wickham大牛(开发了著名的ggplots包和plyr包等)和RStudio小组又出新作啦,新作品readr包readxl包分别用于R读取text数据和Excel电子表格数据。事实上,R已经有了一堆读取数据的函数,比如read.table家族以及其巨多的变形,那么为了牛牛们为什么还要开发这两个包呢?原因很简单,这两个包的读取速度比R内置数据读入函数更快!!!记住哦,是快很多哈!不信,我们下来试试就知道啦!哈哈!平时读取小数据的童鞋可能不会有感觉,但读入的数据量比较大时,速度快就是一个很突出的优势啊,有木有?!废话不多说,上菜!

1)readr包示例

readr包提供了几个用R读取表格/文本数据的函数,并增添了额外的功能,而且更快!这在之间通常是用read.table家族函数来完成这些使命,现在可以轻松很多了啊!

首先,来看看readr包中第一个牛逼轰轰的函数read_table,它替换了之前read.table的功能,关键是更快,请记住,快、速度是这个包诞生的重要原因,可能是受大数据时代这股趋势的推动!我们来做一个实验!让这两个函数同时读取一个包含了4百万航数据的文件(数据地址:http://academic.udayton.edu/kissock/http/Weather/gsod95-current/NYNEWYOR.txt ),看看有什么有趣的发现!

Step1

看看数据格式,可以看到有四列,分别代表日,月,年和一个数值

技术分享

Step2

打开R,运行以下命令,看看两个命令的运行时间!

> system.time(read_table(file = ‘http://academic.udayton.edu/kissock/http/Weather/gsod95-current/NYNEWYOR.txt‘,col_names = c(‘DAY‘,‘MONTH‘,‘YEAR‘,‘TEMP‘)))

用户 系统 流逝

3.30 11.06 14.43

> system.time(read.table(file = ‘http://academic.udayton.edu/kissock/http/Weather/gsod95-current/NYNEWYOR.txt‘,col.names = c(‘DAY‘,‘MONTH‘,‘YEAR‘,‘TEMP‘)))

用户 系统 流逝

1.92 1.62 96.10

这两个命令看起来类似,但是read.table函数大约花费了96.1秒完成,而read_table再不到15秒就完成啦(这可能是我这台破电脑的原因,官方的说法是:前者花了30秒左右,而后者不到一秒就搞定啦!!擦….这性能…无法比啊!)。也许有人会问,为什么会这样呢?原因在于:read_table函数把数据当成一个固定格式的稳健,底层使用C++快速的处理数据(与之对比的是,read.table支持列间任意数量的空格,而read_table要求每一列都排的很整齐,即一列中不能有"出头鸟")。但是,话是这么说,实际运用时,并没有这样严格的限制!

R基本包中有一个读取固定宽度数据集的函数,请看下面,再次见证readr包的神奇,对!!!就是这么神奇!!!

> system.time(dat <- read_fwf(‘http://academic.udayton.edu/kissock/http/Weather/gsod95-current/NYNEWYOR.txt‘,

+ fwf_widths(c(3,15,16,12),

+ col_names=c("DAY","MONTH","YEAR","TEMP"))))

用户 系统 流逝

0.67 1.70 2.40

> system.time(dat2 <- read.fwf(‘http://academic.udayton.edu/kissock/http/Weather/gsod95-current/NYNEWYOR.txt‘, c(3,15,16,12),

+ col.names=c("DAY","MONTH","YEAR","TEMP")))

用户 系统 流逝

0.73 0.49 89.03

看吧,这一对比,知道readr包的腻害了吧!

当然,上面只是readr包中一个简单的例子!readr中包括的其他函数还有:

readr::read_csv        Read a delimited file into a data frame.

readr::read_file        Read a file into a string.

readr::fwf_empty        Read a fixed width file.

readr::read_lines        Read lines from a file or string.

readr::read_log        Read common/combined log file.

readr::read_table        Read text file where columns are separated by whitespace.

 

2)readxl包示例

对于Excel格式的数据,对应了这里的readxl包,这个包提供了读取后缀为.xls和.xlsx格式的Excel表格。

需要注意地是,readxl包是托管在https://github.com/hadley/readxl 上的,因此,安装的时候安装地址要指定是github上的readxl库!

> library(devtools) #先安装这个包,可以快速的完成readxl包的安装!!!

> library(devtools)

> devtools::install_github("hadley/readxl")

目前,readxl包提供的函数只有read_excel,格式如下

Read_excel(spreadsheet, sheet=1, na,…. )

使用方法一看便知,这里就不再啰嗦啦!感兴趣的小伙伴儿赶紧去亲自探索吧!!!

技术分享

 

New packages for reading data into R — fast

标签:

原文地址:http://www.cnblogs.com/Bfrican/p/4418402.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!