R语言ETL工程系列:读写(read/write)
欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!
对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。
作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深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语言入门及数据挖掘
回复 人工智能 三个月入门人工智能
回复 数据分析师 数据分析师成长之路
回复 机器学习 机器学习的商业应用
回复 数据科学 数据科学实战
回复 常用算法 常用数据挖掘算法