《R语言数据分析》——2.2 其他流行的在线数据格式

简介:

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

2.2 其他流行的在线数据格式

在Web上数据通常采用XML或JSON两种格式存放,因为这两类文件都使用了人类可以理解的数据格式,从程序开发的角度而言也非常容易处理,同时也适合处理任意类型的层次化数据结构,而不像CSV文件一样仅能处理简单的表格数据。

JSON最初源于JavaScript对象标识,是当前应用最为广泛的一种人类可读的数据交换格式。JSON使用属性-值对的形式,能够支持包括数值、字符串、布尔值、有序表以及关联矩阵等多种对象类型,被认为是一种低成本的XML替换语言。在Web应用、服务和API中已经大量地使用了JSON格式。

R支持以JSON格式装载和存储数据,我们将借助Socarata API(更多细节请参考本章2.5节)从前述样例中获取部分数据来证实这一点,这些数据是由消费者金融保护局提供的,相关API的完整文档可从http://www.consumerf?inance.gov/complaintdatabase/technical-documentation获得。

该API的终端是一个不需授权即可访问的URL,我们可通过该URL获得后台数据库的信息:http://data.consumerf?inance.gov/api/views.下图是从浏览器中返回的JSON链表,显示了数据的详细结构:

QQ_20170525110822

鉴于JSON非常容易理解,因此可以在编译之前简单地浏览一下数据格式。下面可以使用rjson包将树状列表导入到R会话中:

QQ_20170525110826
QQ_20170525110829

这和之前我们曾经看见过的用逗号分隔的文件略有不同!再仔细分析一下文档,可以发现API终端返回的是元数据文件而非我们之前在CSV文件中看到的原始表格数据。现在我们在浏览器中打开相关URL来查看前5行中ID为25ei-6bcr的数据内容:

QQ_20170525110833

当然在JSON结果链表中的结构已经发生了变化。下面,让我们将水平链表读入到R中:

QQ_20170525110839

还可以利用诸如视图、列等一些更详细的元数据信息来获取数据,这里面可能有一些我们现在不感兴趣的内容,因为fromJSON返回的是一个list对象。从现在开始,我们可以直接删掉这些元数据,然后仅处理data行:

QQ_20170525110843

此时结果还是一个list对象,可以将它转换为data.frame类型。该list对象拥有5个元素,每个元素包括了19个嵌入的子节点。我们首先观察其中第13个子元素,是一个5-5的向量列表。这意味着树状list对象无法直接转换成表格数据,更不用说我们还发现其中某些向量的值是未经处理的JSON格式。因此,为了简单起见,同时也为了证明我们的观点,现在去掉与地址相关的值,然后将剩下的数据转换成data.frame格式:

QQ_20170525110847

我们应用了一个简单的函数去掉了表中每个元素的地址信息(移除了每个x的第13个元素),然后自动将其简化为matrix(通过使用sapply而非lapply对list中每个元素迭代处理),完成调换(通过t),再将结果强制转换为data.frame。

也可以使用之前介绍的一些方法,通过一些辅助函数而不用手动转换所有list元素。plyr包(请参考本书第3章和第4章获得更多细节)就提供了一些非常有用能够实现数据划分和组合的函数:

QQ_20170525110852

现在结果看起来熟悉一些了吧,尽管省略了变量的名字,而且所有值都被转换为字符向量或因子——尽管日期类型是以UNIX时间戳类型存放的。借助提供的元数据(res$meta),能够非常容易地解决这些难题。例如,可以通过抽取(通过[operator命令)除了已经被删掉的地址信息列13列之外的所有列的名字域:

QQ_20170525110857

也可以借助已经提供的元数据来确定对象的类别。例如,可以从域renderTypeName着手,然后使用as.numeric处理数值型,使用as.POSIXct处理所有的calendar_date,就可以解决之前谈到的绝大部分问题了。

那么,你听过80%的数据分析时间是用在数据预处理过程上这一说法吗?

对JSON和XML进行解析和重构到data.frame对象会占用大量的时间,特别是在处理层次表时尤为突出。包jsonlite试图实现R对象到常规的JSON数据格式之间的转换而非原始处理来节约时间。从实际工作的角度来看,这意味着如果可能的话,从jsonlite::fromJSON就能够得到data.frame结果而不是一堆原始list对象,实现了更好的无缝数据转换。不幸的是,我们并不是总能将list对象转换为表格式,此时,可以通过rlist包来加速list对象的转换。更多实现细节请参考本书第14章。

扩展可标记语言(Extensible Markup Language,XML)最初由万维网联盟于1996开发,一开始是以人类和机器都能读懂的格式存储文档。包括Microsoft Off?ice Open XML,Open/LibreOff?ice OpenDocument在RSS站点信息共享和很多配置文件上都采用了XML格式。XML格式也被广泛用于Internet上的数据交换,特别是某些老式API,更是将XML作为唯一的数据交换格式。

让我们再看看除了JSON以外,我们还能使用其他哪些流行的在线数据交换格式。XML API的使用方法类似JSON,但我们必须要在端URL:http://data.consumerf?inance.gov/api/views.xml指明期望的输出格式,如下图屏幕输出所示:

QQ_20170525110901

如图所示,API的XML输出与之前我们看到的JSON格式不太相同,它的输出仅包含我们感兴趣的行。这样,就能很简单地完成XML文档的分析,并且从中抽取出我们感兴趣的行并将其转换为data.frame:

QQ_20170525110905

可以通过修改传递给xmlToDataFrame函数中参数colClasses的值来手动确定变量的类型,就像在read.table函数里那样做一样,也可以通过一个快速的helper函数来解决这个问题:

QQ_20170525110909

当helper函数返回为TRUE时,就可以验证我们对某个列仅包含数字的猜想,并将其转换为数值类型。请注意我们在将因子类型转换为数字时先要将其转换为字符类型,因为直接将因子转换为数值会返回因子的顺序而不是实际的数值。我们还可以通过type.convert函数来解决这个问题,read.table默认会采用这一方法。

如果希望测试相似的APIs、JSON或XML源,可以尝试Twitter、GitHub上的API或其他任何一个在线服务提供商。另一方面,我们也可以找到其他的基于R的开源服务,能够从任意R代码返回XML、JSON或CSV文件。详细内容请参考:http://www.opencpu.org

现在,我们已经能够基于各种不同类型的数据下载格式完成数据处理,不过鉴于我们还必须掌握一些其他的数据源操作,我建议读者们继续往下接着学习。

相关文章
|
数据可视化 数据挖掘
R语言生存分析数据分析可视化案例(下)
R语言生存分析数据分析可视化案例
|
监控 安全 数据可视化
R语言在员工上网行为监控中的数据分析
本文讲述了如何使用R语言分析员工上网行为以提升企业网络安全。通过收集网络流量和访问记录数据,利用R进行读取、分析和可视化,例如查看访问时长分布和热门网站。此外,文中还介绍了一个自动将监控数据提交到网站的R脚本,通过定时任务实现数据的持续更新和管理,及时发现并应对安全风险,增强网络安全性。
468 3
|
10月前
|
SQL 数据可视化 IDE
SQL做数据分析的困境,查询语言无法回答的真相
SQL 在简单数据分析任务中表现良好,但面对复杂需求时显得力不从心。例如,统计新用户第二天的留存率或连续活跃用户的计算,SQL 需要嵌套子查询和复杂关联,代码冗长难懂。Python 虽更灵活,但仍需变通思路,复杂度较高。相比之下,SPL(Structured Process Language)语法简洁、支持有序计算和分组子集保留,具备强大的交互性和调试功能,适合处理复杂的深度数据分析任务。SPL 已开源免费,是数据分析师的更好选择。
|
数据可视化 前端开发 数据挖掘
R语言对综合社会调查GSS数据进行自举法bootstrap统计推断、假设检验、探索性数据分析可视化|数据分享(上)
R语言对综合社会调查GSS数据进行自举法bootstrap统计推断、假设检验、探索性数据分析可视化|数据分享
|
机器学习/深度学习 并行计算 数据挖掘
R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域
【10月更文挑战第21天】R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域。本文将介绍R语言中的一些高级编程技巧,包括函数式编程、向量化运算、字符串处理、循环和条件语句、异常处理和性能优化等方面,以帮助读者更好地掌握R语言的编程技巧,提高数据分析的效率。
321 2
|
数据采集 数据可视化 数据挖掘
R语言与Python:比较两种数据分析工具
R语言和Python是目前最流行的两种数据分析工具。本文将对这两种工具进行比较,包括它们的历史、特点、应用场景、社区支持、学习资源、性能等方面,以帮助读者更好地了解和选择适合自己的数据分析工具。
448 2
|
数据采集 算法 搜索推荐
R语言营销数据分析:使用R进行客户分群的实践探索
【9月更文挑战第1天】R语言以其强大的数据处理和统计分析能力,在金融数据分析、营销数据分析等多个领域发挥着重要作用。通过R语言进行客户分群,企业可以更好地理解客户需求,制定精准的营销策略,提升市场竞争力和客户满意度。未来,随着大数据和人工智能技术的不断发展,R语言在营销数据分析中的应用将更加广泛和深入。
|
机器学习/深度学习 数据可视化 数据挖掘
为啥我敢说Python是数据分析界的扛把子语言?
为啥我敢说Python是数据分析界的扛把子语言?
194 1
|
SQL 数据可视化 数据挖掘
SQL 在数据分析中简直太牛啦!从数据提取到可视化,带你领略强大数据库语言的神奇魅力!
【8月更文挑战第31天】在数据驱动时代,SQL(Structured Query Language)作为强大的数据库查询语言,在数据分析中扮演着关键角色。它不仅能够高效准确地提取所需数据,还能通过丰富的函数和操作符对数据进行清洗与转换,确保其适用于进一步分析。借助 SQL 的聚合、分组及排序功能,用户可以从多角度深入分析数据,为企业决策提供有力支持。尽管 SQL 本身不支持数据可视化,但其查询结果可轻松导出至 Excel、Python、R 等工具中进行可视化处理,帮助用户更直观地理解数据。掌握 SQL 可显著提升数据分析效率,助力挖掘数据价值。
657 0
|
机器学习/深度学习 数据挖掘 计算机视觉
R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告
R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告