《R语言数据分析》----第1章 你好,数据! 1.1 导入一个大小合适的文本文件

简介: 本节书摘来自华章出版社《R语言数据分析》一书中的第1章,第1.1节,作者盖尔盖伊·道罗齐(Gergely Daróczi),潘怡 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。 第1章 你好,数据! 大多数R项目都必须从数据导入到R的会话中开始,由于R语言能够支持多种文件格式和数据库后台,因此可以使用相当多的数据导入方法。
+关注继续查看

本节书摘来自华章出版社《R语言数据分析》一书中的第1章,第1.1节,作者盖尔盖伊·道罗齐(Gergely Daróczi),潘怡 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第1章

你好,数据!

大多数R项目都必须从数据导入到R的会话中开始,由于R语言能够支持多种文件格式和数据库后台,因此可以使用相当多的数据导入方法。本章,我们不会再讨论基础的数据结构,因为你应该已经对它们非常熟悉了。本章的重点将放在大数据集的导入以及处理一些特殊的文件类型。

如果读者希望对标准工具做一个粗略的回顾,复习一下普通类型数据导入的方法,可以参考官方有关CRAN介绍的手册,地址为:http://cran.r-project.org/doc/manuals/R-intro.html#Reading-data-from-f?iles,或者访问Rob Kabacoff的Quick-R站点:http://www.statmethods.net/input/importingdata.html,该网站总结了大多数R任务中将使用的关键字和提示信息列表,更多相关内容,请参考本书附录。

尽管R语言拥有其自己的(序列化)二进制RData及rds文件格式类型,这种文件格式也可以非常方便地被R用户用来存放R对象的元数据信息。但大多数时候,我们还是需要能够处理一些由我们的客户或老板要求使用的其他类型数据。

平面文件是这其中最常见的一类数据文件,在这样的文件中,数据存放在简单的文本文件中,数据值之间通常会以空格、逗号,或者更常见的分号隔开。本章将对R语言提供的几种用于装载这些类型文档的方法展开讨论,并就哪种方法最适合于导入大数据集进行测试。

某些时候,我们也可能仅对一个数据集的子集感兴趣,并不需要对整个数据集进行处理。由于数据存放在数据库时都是以结构化的方式进行预处理的,因此,我们可以只使用简单并且有效的命令就可以查询得到我们需要的子集。本章1.4节将着重探讨三类最常用的数据库系统(MySQL、PostgreSQL和Oracle)与R进行交互的方法。

除了对部分常用工具以及其他一些数据库后台进行一个简要说明外,本章还将展示如何将Excel电子表格导入到R中,这种导入并不需要事先将电子表格文件转换为Excel文本文件或Open/LibreOff?ice格式文件。

当然,本章要讨论的内容绝不仅仅局限于文件格式、数据库连接以及类似一些让人提不起兴趣的内容。不过,请记住数据分析工程师总是首先从导入数据起步,这一部分的工作是不可回避的,必须要保证我们的机器和统计环境在进行实际的分析之前首先先弄清楚数据的结构。

1.1 导入一个大小合适的文本文件

本章的标题也可以换成“你好,大数据!”因为本章主要探讨如何将大数据装载到R会话中。但是,到底什么是大数据呢?究竟在R中处理多大规模的数据量会比较困难呢?合适的规模怎么定义呢?

R原本是为处理单机规模的数据而设计的,因此比较适合数据集规模小于实际可用的RAM大小的情况,但要注意有时候我们必须考虑在做一些计算操作时,程序对内存的需求会增加,例如主成分分析。在本节中,将这类规模的数据集称为大小合适的数据集。

在R中完成从文本导入数据的操作非常简单,可以调用read.table函数来处理任何规模合适的数据集,唯一要考虑的就是数据读写所需的时间。例如,25万行的数据集?可以参见:


b5c3b07e20d3c5bcfc6b0a5ac6f10a9b3e0c8044
注意,我们对本书所有的R命令及其输出都采用特殊格式的文本显示。其中,R命令以符号“>”开始,属于同一命令的不同行之间以“+”连接,与R控制台的处理方式类似。

没错,我们刚刚从hf?lights包中将18.5MB大小的文本文件下载到硬盘上,该文件包括了2011年从休斯顿(Houston)起飞的航班的部分数据:


317d58dac60d3397337811c33c3b4d9a572869b2


db5cd13125d5fc3a83f3e1bc2ce2af6f94d482c3
用hflight包我们能非常方便地处理海量航线数据的子集,该数据集源自美国交通统计局的研究和创新技术局提供的海量航班数据集的子集,原始数据集中包括了自1987年以来,所有US航班的计划及实际出发/到达时间和其他一些我们可能感兴趣的信息。该数据集经常被用于验证机器学习及大数据技术。更多有关该数据集的详细内容,可以参考以下网址来获得有关列的描述以及其他元数据的内容:http://www.transtats.bts.gov/DatabaseInfo.asp?DB_ID=120&Link=0.

我们将使用这个包括了21列数据的数据集作为数据导入的测试平台。例如,使用read.csv测试导入CSV文件的时间。


2536287bd90eba06105f5b7d9fa3bba4de7c3a4e

从某个SSD站点下载这些数据大约需要1.5秒,相对来说耗时还算可以接受。我们可以指定列数据的转换类型而不采用默认的type.convert(参见read.table的文档获得更多详细信息,在SatckOverf?low的搜索结果也表明有关read.csv的问题看起来是大家都很关心也经常提问的内容)来提高速度。


069cb26d825038be7ad7aa9ed0b50f28b00e6d27

这个结果已经好了很多!但它可信吗?在使用R语言掌握数据分析的道路上,我们还将实践更多可靠的测试——对同一任务重复n次测试,然后再对仿真结果进行汇总。通过这个方法,我们可以得到关于数据的多种观测结果,并将它们用于分析确定结果中的统计的显著差异。microbenchmark包就为类似任务提供了一个非常好的框架:


4c4599847414a7f4a66221e230064d14b7b0c928


06c63a836a8f949d4a53b8831fb63160b4c0a06b

我们定义了两个函数:函数f为read.csv的默认设置,在函数g中,我们对之前两列数据类型进行了更新以提高执行效率。其中,参数comment.char将通知R不需要在被导入的文件中寻找注释,参数comment.char确定了从文件中导入的行数,以节约导入操作所需的部分时间和空间。将stringAsFactors设置为FALSE也可以提高一点文件导入速度。

使用一些第三方工具可以确定要导入的文本文件的行数,例如Unix上的wc,或使用R.utils包中自带的countLines函数,不过后者速度要稍微慢一点。

回到对结果的分析中,我们可以在图形中来展现中位数以及一些其他相关统计值,这些结果都是默认运行100次所得:


ced04c953b61d6db4d949fd3dded7f9d2438405a

两者之间的差异看起来非常明显(读者也可以通过其他一些统计实验来验证这个结果),仅通过read.table函数的参数调优,我们就将性能提高了50%以上。

规模大于物理内存的数据集

如果从CSV文件中导入的数据集大小超过了机器的物理内存,可以调用一些专为这类应用而设计的用户开发包。例如,sqldf包和ff包都支持基于特定数据类型以chunk到chunk方式装载数据集。前者使用SQLite或者类似SQL的数据库后台,而后者则使用与ffdf类对应的数据框将数据存储到硬盘上。bigmemory包也提供了类似的功能。稍后将介绍相关的样例(可用于测试):


7e22a32422485f94f573cba8d2090d30a16352a8

!

58021a510af1890741dde7f31e931825553e1c62

请注意bigmemory包的read.big.matrix函数,其参数header默认值为FALSE,因此在读者使用自己的测试数据平台时应首先阅读相关函数的帮助手册,因为部分函数也和read.table一样支持参数调优。更多相关案例,请参考“High-Performance and Parallel Computing with R CRAN Task View”中“Large memory and out-of-memory data”的内容,地址为:http://cran.r-project.org/web/views/HighPerformanceComputing.html

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
1月前
|
人工智能 数据挖掘 Linux
ChatGPT × R语言 丨实际数据分析过程中,AI能够带来哪些改变?数据框操作案例分享
ChatGPT × R语言 丨实际数据分析过程中,AI能够带来哪些改变?数据框操作案例分享
|
1月前
|
数据采集 机器学习/深度学习 SQL
绝不可错过!R语言与ggplot2实现SCI论文数据分析神器
绝不可错过!R语言与ggplot2实现SCI论文数据分析神器
48 0
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
R语言进行股票数据分析
R语言是网页抓取和数据分析的强大工具。使用R,可以编写爬虫从各种网站提取股票信息,如价格、数量、股息、收益等。然后,可以使用R的内置函数和包来执行各种数据分析任务,例如描述性的统计、可视化、回归、聚类、情绪分析等。R语言可以帮助投资者洞察股市并做出明智的决策。
|
4月前
|
机器学习/深度学习 数据可视化 数据挖掘
跟着Nature Communications学数据分析:R语言做随机森林模型并对变量重要性排序
跟着Nature Communications学数据分析:R语言做随机森林模型并对变量重要性排序
|
7月前
|
数据可视化 数据挖掘 数据处理
|
7月前
|
数据挖掘
|
7月前
|
存储 数据挖掘
|
7月前
|
数据挖掘 Python
spss、R语言、Python数据分析系列(7):python-adf单位根检验
spss、R语言、Python数据分析系列(7):python-adf单位根检验
84 0
|
7月前
|
数据挖掘 Python
spss、R语言、Python数据分析系列(6):R语言adf单位根检验
spss、R语言、Python数据分析系列(6):R语言adf单位根检验
625 0
|
7月前
|
数据挖掘 Python
spss、R语言、Python数据分析系列(5)spss基本统计分析
spss、R语言、Python数据分析系列(5)spss基本统计分析
82 0
spss、R语言、Python数据分析系列(5)spss基本统计分析
热门文章
最新文章
推荐文章
更多