zoukankan      html  css  js  c++  java
  • R0—New packages for reading data into R — fast

    小伙伴儿们有福啦,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,…. )

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

  • 相关阅读:
    010906侯舒舒(作业信息收集笔记)
    010806侯舒舒(作业信息收集)
    011106侯舒舒(作业计算机基础)
    011006侯舒舒(作业大型扫描)
    011006侯舒舒(日报)
    011106侯舒舒(日报)
    010906侯舒舒(日报)
    010606侯舒舒(作业基础)
    010706侯舒舒(作业漏洞测试)
    信息收集总结(慢慢扩充)
  • 原文地址:https://www.cnblogs.com/Bfrican/p/4418402.html
Copyright © 2011-2022 走看看