《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

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
12月前
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
|
数据采集 数据可视化 数据挖掘
Pandas数据应用:天气数据分析
本文介绍如何使用 Pandas 进行天气数据分析。Pandas 是一个强大的 Python 数据处理库,适合处理表格型数据。文章涵盖加载天气数据、处理缺失值、转换数据类型、时间序列分析(如滚动平均和重采样)等内容,并解决常见报错如 SettingWithCopyWarning、KeyError 和 TypeError。通过这些方法,帮助用户更好地进行气候趋势预测和决策。
535 71
|
11月前
|
SQL 数据挖掘 BI
数据分析的尽头,是跳出数据看数据!
当前许多企业在数据分析上投入大量资源,却常陷入“数据越看越细,业务越看越虚”的困境。报表繁杂、指标众多,但决策难、行动少,分析流于形式。真正有价值的数据分析,不在于图表多漂亮,而在于能否带来洞察、推动决策、指导行动。本文探讨如何跳出数据、回归业务场景,实现数据驱动的有效落地。
|
SQL 人工智能 数据可视化
数据团队必读:智能数据分析文档(DataV Note)五种高效工作模式
数据项目复杂,涉及代码、数据、运行环境等多部分。随着AI发展,数据科学团队面临挑战。协作式数据文档(如阿里云DataV Note)成为提升效率的关键工具。它支持跨角色协同、异构数据处理、多语言分析及高效沟通,帮助创建知识库,实现可重现的数据科学过程,并通过一键分享报告促进数据驱动决策。未来,大模型AI将进一步增强其功能,如智能绘图、总结探索、NLP2SQL/Python和AutoReport,为数据分析带来更多可能。
920 142
|
数据挖掘 PyTorch TensorFlow
|
SQL 数据可视化 大数据
从数据小白到大数据达人:一步步成为数据分析专家
从数据小白到大数据达人:一步步成为数据分析专家
774 92
|
存储 数据采集 数据可视化
Pandas数据应用:电子商务数据分析
本文介绍如何使用 Pandas 进行电子商务数据分析,涵盖数据加载、清洗、预处理、分析与可视化。通过 `read_csv` 等函数加载数据,利用 `info()` 和 `describe()` 探索数据结构和统计信息。针对常见问题如缺失值、重复记录、异常值等,提供解决方案,如 `dropna()`、`drop_duplicates()` 和正则表达式处理。结合 Matplotlib 等库实现数据可视化,探讨内存不足和性能瓶颈的应对方法,并总结常见报错及解决策略,帮助提升电商企业的数据分析能力。
834 73
|
存储 机器学习/深度学习 数据可视化
数据集中存在大量的重复值,会对后续的数据分析和处理产生什么影响?
数据集中存在大量重复值可能会对后续的数据分析和处理产生多方面的负面影响
1112 56
|
存储 数据采集 数据可视化
Pandas数据应用:医疗数据分析
Pandas是Python中强大的数据操作和分析库,广泛应用于医疗数据分析。本文介绍了使用Pandas进行医疗数据分析的常见问题及解决方案,涵盖数据导入、预处理、清洗、转换、可视化等方面。通过解决文件路径错误、编码不匹配、缺失值处理、异常值识别、分类变量编码等问题,结合Matplotlib等工具实现数据可视化,并提供了解决常见报错的方法。掌握这些技巧可以提高医疗数据分析的效率和准确性。
662 22
|
数据采集 数据可视化 索引
Pandas数据应用:股票数据分析
本文介绍了如何使用Pandas库进行股票数据分析。首先,通过pip安装并导入Pandas库。接着,从本地CSV文件读取股票数据,并解决常见的解析错误。然后,利用head()、info()等函数查看数据基本信息,进行数据清洗,处理缺失值和重复数据。再者,结合Matplotlib和Seaborn进行数据可视化,绘制收盘价折线图。最后,进行时间序列分析,设置日期索引、重采样和计算移动平均线。通过这些步骤,帮助读者掌握Pandas在股票数据分析中的应用。
987 5