R语言ETL工程系列:读写(read/write)

浏览: 1717

作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。

邮箱:huang.tian-yuan@qq.com


前言

    基本概念设置,我们都已经完成了,那么就可以进入实战阶段了,本篇主要讲解如何把手头的一些数据顺利地导入到R的平台中。

    巧妇难为无米之炊,做数据分析的第一步,首先要有数据。狭义来说,在我们的软件平台进行数据分析,首先要把数据导入到软件平台中。尽管本系列的例子主要利用R语言以及相关包中自带的数据集,但是我们的终极目标是你能够把自己获取的任意形式的数据导入到R语言平台中,然后进行自由操作。
本文不会讲得太细,否则就成为一个帮助文档,但是我会保证你读完本文之后,能够把手头的一些数据顺利地导入到R的平台中,以便在往后的工作中,利用本系列的操作技巧来对自己的数据集进行丰富多样的操作。

CSV

csv格式的数据也许是我们做数据的时候遇到的最常见的格式了,它的全称叫做comma-separated values,逗号分隔数值。我们姑且理解为一个表格数据,以逗号作为列之间的分割点,以回车作为行的分割点。这种数据可以用Excel直接打开,所以如果你有Excel格式能够打开的任意文件,也可以在Excel中导出为csv,从而变为R语言能够直接迅速读取的数据。
本系列谈到的数据操纵,主要是针对表格的,也就是关系型的二维表结构。为了保证你能够拿到数据,我们直接从R基本包里面读出来:

library(tidyverse)
iris %>%
  write_csv("D:/iris.csv")

上面这一步操作,我们就把iris数据集直接读到D盘根目录下(函数中放的就是输出路径,以及你想要输出的文件名称),你可以到D盘去找到它,并用Excel打开它,看看里面有什么数据。
下面我们要把写出去的csv读回来,并存放在mydata中:

read_csv("D:/iris.csv") -> mydata

## Parsed withcolumn specification:
## cols(
##  Sepal.Length = col_double(),
##   Sepal.Width= col_double(),
##  Petal.Length = col_double(),
##   Petal.Width= col_double(),
##   Species =col_character()
## )

mydata

## # A tibble:150 x 5
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##          <dbl>       <dbl>        <dbl>       <dbl> <chr>  
##  1          5.1         3.5          1.4         0.2 setosa 
##  2          4.9         3            1.4        0.2 setosa 
##  3          4.7         3.2          1.3         0.2 setosa 
##  4          4.6         3.1          1.5         0.2 setosa 
##  5          5           3.6          1.4         0.2 setosa 
##  6          5.4         3.9          1.7        0.4 setosa 
##  7          4.6         3.4          1.4         0.3 setosa 
##  8          5           3.4          1.5         0.2 setosa 
##  9          4.4         2.9          1.4         0.2 setosa 
## 10         4.9         3.1          1.5        0.1 setosa 
## # ... with 140 more rows

我们可以看到,数据已经读入mydata中,而且read_csv会自动把数据转变为tibble格式。tibble是增强型数据框,不会因为数据量的大小溢出屏幕,只会显示部分数据。另一个特点是,它在读取的时候会对变量的数值类型进行判断,在显示的时候也会对每个变量的类型进行标注。

read_csv的特性还有很多,比如skip可以帮你跳过几行再开始读取。如果有仔细观察,你会发现csv文件中,首行一般都是列的名称,而read_csv也会自动把第一行默认为列名称读入,如果需要直接读入纯数据,需要设置col_names = FALSE.如果能把数据整理成首行为列名称的数据格式,那么你就可以顺利地用我们的代码读入任意的csv格式文件了。

read_csv与read.csv两者之间的不同在于:read_csv返回tibble,read.csv返回data.frame;read_csv默认字符变量就是字符变量,read.csv会自动把所有字符变量转化为因子变量(如果没有R基础,请忽略);read_csv会进行变量类型的判断,read.csv不会(因此有时候用read_csv读取数据会失败,但是用read.csv就会成功)。

其他格式

就目前来讲,我认为R语言能够直接读入任何数据,但是我们不会在这里一一介绍,我们只会告诉大家一个终极目标:无论是任意格式,我们都希望把它转化为R中的二维表形式,从而进行自由地操纵。那么如果你有一份不是csv格式的数据,但是有办法快速把它转格式为csv格式,请毫不犹豫地使用这个方法。下面我们会提供一些R读取其他格式文件的函数,如果感兴趣的可以按图索骥,在网上找到帮助文档。

  • readLines:按行读取

  • readxl:读Excel文档

  • read_html:读html/xml格式数据

  • read_file:读原始文档

  • fromJSON:读json格式文件

  • dbConnect:连接数据库

  • readTIFF:读tiff格式文件

  • read.bib:读bib格式文件

其实还有很多,只要认真找,我们发现R几乎能够读入任意格式的文件。如果你想要使用本系列的操作,最佳的方法就是:1.把这些格式转为csv,然后读取csv;2.把这些文件导入后,想办法把数据转化为data.frame或者tibble格式。

小结

本文主要讲了如何读写csv数据,因为它是与二维表结合得最紧密的文件格式,读取后直接就能够使用。我们只讲了如何使用read_csv来读取,实际操作中,为了速度,你可能需要用到fread函数,我个人经常用的方法就是:fread() %>% as_tibble…如果你已经熟练运用read.csv,而数据集本身又不算特别大,也可以继续使用它。通过这种读取方式,我们直接就得到了以二维表形式存在的tibble格式文件,方便我们进一步进行其他操作。建议在本系列中尽量使用tibble格式进行操作,这样便于统一风格。但是记住,tibble本身也属于data.frame的一种,因此所有在data.frame中能够实现的操作,都能够在tibble中无缝使用。

往期精彩:

R语言ETL工程系列:总论

R语言ETL工程系列:R语言基础设置

R语言文本特征工程:词袋模型

公众号后台回复关键字即可学习

回复 爬虫             爬虫三大案例实战  
回复 Python        1小时破冰入门

回复 数据挖掘      R语言入门及数据挖掘
回复 人工智能      三个月入门人工智能
回复 数据分析师   数据分析师成长之路 
回复 机器学习      机器学习的商业应用
回复 数据科学      数据科学实战
回复 常用算法      常用数据挖掘算法

推荐 0
本文由 R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册