ITPub博客

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

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

作者:浪花小雨滴 时间:2018-12-26 18:00:21 0 删除 编辑

作者:黄天元,复旦大学博士在读,热爱数据科学与R,热衷推广R在业界的应用。邮箱:huang.tian-yuan@qq.com.欢迎合作交流

巧妇难为无米之炊,做数据分析的第一步,首先要有数据。狭义来说,在我们的软件平台进行数据分析,首先要把数据导入到软件平台中。尽管本系列的例子主要利用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 with column 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中无缝使用。

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39984