《R语言数据分析》——第2章 从Web获取数据 2.1 从Internet导入数据集

简介:

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

第2章

从Web获取数据

实际项目中,经常会碰见所需数据不能从本地数据库或硬盘中获取而需要通过Internet获得的情况。此时,可以要求公司的IT部门或数据工程师按照下图所示的流程将原有的数据仓库扩展,从网络获取处理所需要的数据再倒入公司自己的数据库:

QQ_20170525105756

如果公司还没有建立ETL系统(抽取、转换装载数据),或者我们等不及IT部门用几个星期那么长的时间来完成任务,我们也可以选择自己动手,这样的工作对数据科学家来说是很常见的任务,因为大多数时候我们都在开发一些原型系统然后再由软件工程师们将其转化为实际产品。因此,在日常工作中,我们必须要掌握一些基本技能:

用程序从网络上下载数据

处理XML和JSON格式的数据

从原始的HTML源

与API实现交互

尽管数据科学家被认为是21世纪最具吸引力的工作(参见:https://hbr.org/2012/10/data-scientist-the-sexiest-job-ofthe-21st-century/),大多数数据科学家的工作都与数据分析无关。而有可能更糟糕的是,有些时候这样的工作看起来还很乏味,或者日常工作也仅需一些基本的IT技能就足以应付,与机器学习根本不相干。因此,我更愿意把这类工作称为“数据黑客”,而不是数据科学家,这也意味着我们在工作时必须学会亲自动手。

数据筛选和数据清洗是数据分析中最乏味的部分,但却是整个数据分析工作中最重要的步骤之一。也可以说,80%的数据分析工作其实都是在做数据清洗,在这一部分也不需要对这些垃圾数据用最先进的机器学习算法处理,因此,读者应该确保将时间用于从数据源取得有用和干净的数据。

本章将通过R包大量使用网络浏览器debugging工具,包括Chrome的DevTools和Firefox的FireBug。这些工具都比较容易使用,而为了下一步的工作,我们也有必要好好了解和掌握它们。因此,如果读者正面临获取在线数据的问题,可以关注其中一些工具的使用手册。本书的附录也列出了一些起步的方法。

读者也可以参考“Web Technologies and Services CRANTask View”(http://cran.r-project.org/web/views/WebTechnologies.html),快速了解R中能够实现获取Web数据以及与Web服务进行交互功能的包。

2.1 从Internet导入数据集

可以分两步完成从Web获取数据集并将其导入到R会话的任务:

(1)将数据集保存到磁盘。

(2)使用类似read.table这类标准函数完成数据读取,例如:foreign::read.spss可以导入sav格式的文件。

我们也可以通过直接从文件的URL读取平坦文本的数据文件来省略掉第一步的工作。下面的样例将从Americas Open Geocode(AOG)数据库(http://opengeocode.org),获取一个以逗号分隔的文件,AOG网站提供了政府和国家机构的统计信息、人口信息、以及全国各邮政机构的网址信息:

QQ_20170525105801

在本例中,我们在read.table命令中将f?ile参数的值设置为一个超链接,可以在处理之前下载相应的文本文件。read.table函数在后台会使用url函数,该函数支持HTTP和FTP协议,也能处理代理服务器,但还是存在一定的局限性。例如,除了Windows系统的一些特殊情况,它一般不支持超文本安全传输协议(Hypertext Transfer Protocol Secure,HTTPS),而该协议却是实现敏感数据Web服务通常必须要遵守的协议。

HTTPS不是一个与HTTP独立的协议,而是在HTTP协议上再增加一个封装好了的SSL/TLS连接。由于HTTP在服务器和客户端之间可以传输未经封装的数据包,因此通常认为使用HTTP协议不能保证数据传输的安全。而HTTPS协议通过可信标记可以拒绝第三方窃取敏感信息。

如果是这类应用,最有效也最合理的解决方法就是安装和使用RCurl包,该包支持R客户端和curl(http://curl.haxx.se)的接口。Curl支持非常多的协议类型,也支持URI框架,还能处理cookie,授权、重定向、计时等多项任务。

例如,我们先检查一下http://catalog.data.gov/dataset上U.S.政府部门的公开数据日志。尽管不使用SSL也可以访问这个常用网址,但大多数提供下载功能的URL地址遵守的还是HTTPS URL协议。在以下样例中,我们将从消费者金融保护局的顾客意见反馈数据库(http://catalog.data.gov/dataset/consumercomplaint-database)提供的网址上下载逗号分隔值文件(Comma Separated Values,CSV)格式的文件。

该CSV文件包括了自2011年以来,大约25万条顾客对金融产品和金融服务的反馈意见。文件大小约为35M~40M,因此下载可能会需要花一点时间。而且读者也可能不希望在移动网络或受限环境下重复接下来的操作。如果getURL函数在验证的时候出现错误(常见于某些Windows系统),可以通过Options参数手动填写验证路径(RCurlOptions = list(cainfo= system.f?ile ("CurlSSL", "cacert.pem", package = "RCurl"))),或者尝试使用Hadley Wickham提供的httr(RCurl前端)或者是Jeroen Ooms提供的curl包——详细说明参见下文。

当把这些CSV文件下载下来直接导入R后,让我们先看一下有关产品类别的反馈意见:

QQ_20170525105807
QQ_20170525105811

从中可以发现大多数意见都是针对债权问题,这里工作的重点是介绍使用curl包从某个HTTPS URL下载CSV文件,然后通过read.csv函数(也可以使用其他后述章节将讨论的其他函数)读取文件内容的过程。

除了GET请求,读者还可以使用POST、DELETE或PUT请求与RESTful API端点交互,也可以使用RCurl包的postForm函数和httpDELETE,httpPUT或httpHEAD函数—详细内容请稍后参考下文关于httr包的内容。

也可以使用Curl从那些要求授权的有安全保护的站点下载数据。最简单的方法是在主页注册,将cookie保存到一个文本文件中,然后在getCurlHandle中将文件路径传给cookief?ile参数。也可以在其他选项中指明useragent类型。请参考http://www.omegahat.org/RCurl/RCurlJSS.pdf获得更详细和全面(也是非常有用)有关RCurl重要特性的帮助。

curl功能已经非常强大,但对于那些没有一定IT背景的用户来说,它的语法和众多选项让人难以适应。相比而言,httr包是对RCurl的一个简化,既封装了常见的操作和日常应用功能,同时配置要求也相对简单。

例如,httr包对连接同一网站的不同请求的cookies基本上都是自动采用统一的连接方式,对错误的处理方法也进行了优化,降低了用户的调试难度,提供了更多的辅助函数,包括头文件配置、代理使用方法以及GET、POST、PUT、DELETE等方法的使用等。另外,httr包对授权请求的处理也更人性化,提供了OAuth支持。

OAuth是中介服务提供商支持的一种开源授权标准。有了OAuth,用户就不需要分享实际的信用证书,而可以通过授权方式来共享服务提供商的某些信息。例如,用户可以授权谷歌与第三方之间分享实际的用户名、e-mail地址等信息,而不用公开其他敏感信息,也没必要公开密码。OAuth最常见的应用是被用于以无密码方式访问各类Web服务和API等。更多相关信息,请参考本书第14章,我们将在14章中就如何使用OAuth和Twitter授权R会话获取数据进行详细探讨。

但如果遇到了数据不能以CSV文件格式下载的情况该怎么办呢?

相关文章
|
4天前
|
数据挖掘 PyTorch TensorFlow
|
13天前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
16天前
|
存储 数据采集 数据处理
R语言数据变换:使用tidyr包进行高效数据整形的探索
【8月更文挑战第29天】`tidyr`包为R语言的数据整形提供了强大的工具。通过`pivot_longer()`、`pivot_wider()`、`separate()`和`unite()`等函数,我们可以轻松地将数据从一种格式转换为另一种格式,以满足不同的分析需求。掌握这些函数的使用,将大大提高我们处理和分析数据的效率。
|
20天前
|
数据采集 DataWorks 数据挖掘
提升数据分析效率:DataWorks在企业级数据治理中的应用
【8月更文第25天】本文将探讨阿里巴巴云的DataWorks平台如何通过建立统一的数据标准、规范以及实现数据质量监控和元数据管理来提高企业的数据分析效率。我们将通过具体的案例研究和技术实践来展示DataWorks如何简化数据处理流程,减少成本,并加速业务决策。
147 54
|
3天前
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图
【9月更文挑战第9天】在R语言中,利用`ggplot2`包可绘制多系列柱状图与直方图。首先读取数据文件`data.csv`,加载`ggplot2`包后,使用`ggplot`函数指定轴与填充颜色,并通过`geom_bar`或`geom_histogram`绘图。参数如`stat`, `position`, `alpha`等可根据需要调整,实现不同系列的图表展示。
|
3天前
|
机器学习/深度学习 数据挖掘 TensorFlow
🔍揭秘Python数据分析奥秘,TensorFlow助力解锁数据背后的亿万商机
【9月更文挑战第11天】在信息爆炸的时代,数据如沉睡的宝藏,等待发掘。Python以简洁的语法和丰富的库生态成为数据分析的首选,而TensorFlow则为深度学习赋能,助你洞察数据核心,解锁商机。通过Pandas库,我们可以轻松处理结构化数据,进行统计分析和可视化;TensorFlow则能构建复杂的神经网络模型,捕捉非线性关系,提升预测准确性。两者的结合,让你在商业竞争中脱颖而出,把握市场脉搏,释放数据的无限价值。以下是使用Pandas进行简单数据分析的示例:
17 5
|
13天前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
16天前
|
数据采集 机器学习/深度学习 数据挖掘
R语言数据清洗:高效处理缺失值与重复数据的策略
【8月更文挑战第29天】处理缺失值和重复数据是数据清洗中的基础而重要的步骤。在R语言中,我们拥有多种工具和方法来有效地应对这些问题。通过识别、删除或插补缺失值,以及删除重复数据,我们可以提高数据集的质量和可靠性,为后续的数据分析和建模工作打下坚实的基础。 需要注意的是,处理缺失值和重复数据时,我们应根据实际情况和数据特性选择合适的方法,并在处理过程中保持谨慎,以避免引入新的偏差或错误。
|
14天前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
16天前
|
数据处理
R语言数据合并:掌握`merge`与`dplyr`中`join`的巧妙技巧
【8月更文挑战第29天】如果你已经在使用`dplyr`进行数据处理,那么推荐使用`dplyr::join`进行数据合并,因为它与`dplyr`的其他函数(如`filter()`、`select()`、`mutate()`等)无缝集成,能够提供更加流畅和一致的数据处理体验。如果你的代码中尚未使用`dplyr`,但想要尝试,那么`dplyr::join`将是一个很好的起点。