《R语言数据分析》——1.3 导入文本文件的子集-阿里云开发者社区

开发者社区> 华章计算机> 正文

《R语言数据分析》——1.3 导入文本文件的子集

简介: 本节书摘来自华章出版社《R语言数据分析》一书中的第1章,第1.3节,作者盖尔盖伊·道罗齐(Gergely Daróczi),潘怡 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.3 导入文本文件的子集 某些时候,我们仅需要一部分存放在数据库或文本文件中的数据用来进行数据分析。
+关注继续查看

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

1.3 导入文本文件的子集

某些时候,我们仅需要一部分存放在数据库或文本文件中的数据用来进行数据分析。此时,如果处理对象范围仅包括数据框中和应用相关的数据子集,其处理速度将比我们之前讨论过的那些特定开发包和性能优化程序更快。

假设我们仅对飞往纳什维尔的航班感兴趣,因为2012年在那召开了useR!的大会,那我们仅需要CSV文件中Dest属性为BNA的记录(BNA为国际航空运输协会为纳什维尔规定的国际空港编号)。

与其先花将近2000毫秒导入所有的数据(如前述小节所述),然后再去掉不符合要求的行(参见第3章),不如让我们看看在数据装载时就对其进行筛选的处理方法。

可以使用前面提到的sqldf包来解决这个问题。通过设置SQL语句的内容来完成数据的筛选:

QQ_20170525100434

参数sql默认为“select * from f?ile”,即从数据集中选择所有数据。现在,在此基础上增加一个筛选条件。注意,我们对更新后的SQL语句中查找条件上增加了双引号,因为sqldf不能自动识别出双引号,只会将其作为域的一部分处理。我们也可以在类Unix系统中通过一个特制的用户筛选参数,如下例所示来解决这个问题:

QQ_20170525100437

处理得到的结果数据框包含了从227?496个记录中筛选出的3481个样本值,而使用临时的SQLite数据库来进行筛选也能提高一点点导入速度:

QQ_20170525100441

之所以能加快一点处理速度,是因为所有的R命令首先都会将CSV文件先加载到一个临时的SQLite数据库中,这一过程所需要的时间是不能少的。为了加快处理速度,读者可以将dbname指定为null,这样,系统就会在内存而非临时文件内创建SQLite数据库,但是这种方法有可能并不适合大数据集。

在导入到R会话前筛选平面文件

有没有其他更快或更便捷的方法来处理类似文本文件中的部分数据呢?有些人可能会采取一些常规的基于表达式的筛选条件,在导入平面文件之前对其进行筛选。例如,在Unix环境中,grep或者ack都是非常不错的工具。但是在Windows平台上,我们默认是找不到类似方法的,并且将CSV文件采用常规表达式去进行解析也有可能导致一些意想不到的负面结果。相信我,你肯定不愿意从零开始写一个CSV、JSON,或者XML的分析器。

无论如何,现在数据科学家在处理数据时,必须要具备万事通的能力。下面,我们将给出一个简单可行的样例来展示我们如何以低于100毫秒的速度读入筛选好的数据:

QQ_20170525100446

相比之前我们得到的结果,这个结果确实非常棒!但如果我们希望再挑选出那些到达时延超过13.5分钟的航班呢?

另一种,也可能是更容易实现的方法,可以首先将数据导入到某个数据库中,然后根据需要,查询得到符合条件的数据子集。我们使用一个简单的例子来说明这种方法。例如,将SQLite数据库导入到某个文件中,然后在read.csv.sql的默认运行时间内来获取任意数据子集。

下面,我们将创建一个永久的SQLite数据库:

QQ_20170525100459

该命令在当前工作路径下创建了一个名为hf?lights_db的文件。接下来,我们还将创建一个名为hf?lights的表格,并将之前CSV文件的内容导入到该数据库中:

QQ_20170525100504

至此,还没完成创建测试平台的任务,由于以上操作仅能执行一次,而对数据集进行筛选的操作之后有可能需要执行若干次:

QQ_20170525100507

我们在少于100毫秒的时间内完成了数据库子集的导入!不过,如果计划经常需要对这个永久数据库进行查询,那我们还可以做得更好:为什么不设计一个真的数据库实例作为数据库而非使用一个简单的基于文件的、无服务器的SQLite测试后台呢?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
RecSys提前看 | 深度学习在推荐系统中的最新应用
作为推荐系统的顶会,RecSys 一如既往受到了业界的广泛关注。与其他机器学习会议相比,RecSys 一向重视解决实际的问题,即结合在实际应用场景中推荐系统性能提升、效果提高等问题提出设计策略和算法解决方案等。随着深度学习研究的进一步深入,深度学习在推荐系统中的应用依然是研究热点之一,本次会议中图神经网络(Graph Neural Network,GNN)、经典深度学习模型都有所应用及改进。
4 0
ECS的使用感受
在学校结合所学的知识,运用在阿里云上,学思悟践,使我进步了很多!
8 0
牛逼,这2招,彻底让你和 null say 拜拜
牛逼,这2招,彻底让你和 null say 拜拜
6 0
RedisTemplate中的execute方法如何使用
execute提供了基础的操作Redis方法的实现,为其他特定数据类型操作方法提供了基础方法的实现。今天我们是要来学习一下RedisTemplate中的execute方法具体使用方法,并且提供出相应的代码实现。
4 0
mysql操作过程中的一些注意点
mysql操作过程中的一些注意点
5 0
细说一下RedisTemplate的使用方法(二)
执行自定义SQL方法时,调用的就是execute方法。execute方法是一个很宽泛的方法,其他专注特定的Redis数据类型封装的方法都是基于此方法。这就说明了其他方法能实现的,execute方法也能实现。
4 0
干货,一文彻底搞懂 Java 的 Optional(1)
干货,一文彻底搞懂 Java 的 Optional
5 0
细说一下RedisTemplate的使用方法(一)
我们在上篇文章中学习到了SpringBoot项目如何集成Redis相关组件功能,而SpringBoot集成Redis组件内部涉及的对象就是RedisTemplate。 接下来我们就一起来看一下RedisTemplate提供了哪些操作Redis数据库的方法,再者就是看一下这些方法是如何使用的。
4 0
springboot项目集成redis
Redis是一款NoSql数据库,经常用于缓存数据,我们也经常要在不同系统框架中去集成Redis数据库的访问。我们要学习SpringBoot项目中是如何集成Redis的,文章最后附上平时使用的工具类。
4 0
CCKS 2019 | 百度CTO王海峰详解知识图谱与语义理解
8 月 24 日至 27 日在杭州召开的 2019 年全国知识图谱与语义计算大会(CCKS 2019)上,百度 CTO 王海峰发表了题为《知识图谱与语义理解》的演讲。
4 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载