《R语言数据分析》——2.4 从其他在线来源获取数据

简介:

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

2.4 从其他在线来源获取数据

尽管readHTMLTable非常实用,但某些时候数据不是以结构化格式存放在表格中,更可能就是以HTML表形式存储。我们首先访问http://cran.r-project.org/web/views/WebTechnologies.html 来了解一下R包在相应的CRAN任务描述中列出的数据格式类型,如下图所示:

QQ_20170525112651

在这幅图中,我们看到了一个HTML列表,列出了包的名称,以及指向CRAN或GitHub的URL。要处理这样的HTML,我们首先要对HTML源有所了解才能对分析方法做确定。读者可以很容易地在Chrome或Firefox浏览器中完成这个任务:右键点击目录顶部的CRAN包标题,选择Inspect Element命令,将看到如下输出:

QQ_20170525112654

此时,我们已经得到了一个以ul(无序表)的HTML标签列出的相关R包,在标签h3后面就包括了CRAN packages字符串。

简而言之:

我们需要解析这个HTML文件

在search项找到第三级头

从其后的未排序的HTML表中获得所有表元素

这些工作也可以通过XML路径语言来完成,该语言拥有一种特殊的语法能通过查询来选择在XML/HTML文档中的节点。

更多有关R驱动的例子,请参考本书第4章,以及Springer.出版的Deborah Nolan和语句Duncan Temple Lang编著的《Use R!》系列。更多详细内容,请参考本书附录部分。

XPath初看起来很难理解,也很复杂。例如,待处理的表可以被如下语句描述:

QQ_20170525112703

让我再对此细化一下:

(1)我们正在查找一个h3标签,该标签的text属性为“CRAN packages”,我们需要在整个文本中查找有这些属性的特殊节点。

(2)following-siblings表达式代表了被选中的h3标签中所有同层子节点。

(3)过滤器仅查找ul的HTML标签。

(4)由于结果有好几个,我们仅通过index(1)挑选出第一个兄弟节点。

(5)然后从中挑选出所有li标签(表单元素)。

在R中重复类似操作:

QQ_20170525113010

And we have the character vector of the related 118 R packages:

QQ_20170525113015

使用XPath可以非常方便地在HTML文档中选择和搜索节点,xpathApply函数也提供了同样的功能。R将XPath函数的大多数功能都封装在了libxml中,以提供更高效和更方便的操作方法。不过我们也可以使用xpathSApply函数,该函数返回结果更加简化,它和XPath之间的差别就像lapply函数和sapply函数的差别一样。因此我们也可以按以下方式来保存unlist调用的结果:

QQ_20170525112710
QQ_20170525112714

细心的读者一定注意到了返回的结果列表是一个简单的字符向量,而原始的HMTL表单还包括了指向之前那些包的URL,那么这些内容跑到哪去了呢?

确切来说发生这种现象是由xmlValue函数的特点造成的,我们在样例的xpathSApply调用时从原始文档抽取节点信息时没有使用默认的NULL作为评价函数,因此函数仅简单地从每个不包含子节点的叶子节点中抽取原始文本数据,并得到了上面的结果。那么如果我们对包URL里面的内容更感兴趣怎么办呢?

调用不带任何指定fun的xpathSApply函数将返回所有原始子节点信息,这对我们并没有直接的帮助,也没必要对这些结果再应用一些常规表达式。函数xmlValue的帮助页面为我们提供了一些类似可以完成这些应用的函数,这里我们会毫不犹豫地选择xmlAttrs:

QQ_20170525112718

请注意样例中更新了path的信息,我们在这里选择的是所有的标签a而非其父标签li,和前面xmlValue函数的参数不同。在样例中,xmlAttrs的抽取参数是'href',因此函数会对所有包含标签a的节点抽取属性及属性值。

有了这些基本函数,用户就能够从在线资源中获取任意公开的数据,当然在实际中实现的过程最后有可能会变得相对复杂。

另外一方面,由于数据获取经常受限于数据拥有者给定的版权范围,因此必须要首先确认这些可能的数据资源其相关的法律条文、使用条件等内容。除了法律事务,从数据供应商的技术角度去考虑数据的获取和抓取问题也是比较明智的,如果你在没有和管理员提前沟通的情况下对网站进行频繁的查询,则很有可能会被认为是在进行某种网络攻击,同时会给服务器带来不必要的负担。为了简化数据获取的问题,记得给查询设置合适的频率,例如,最少每个查询之间要相隔2秒,最好的方法则是从站点的robot.txt文件中了解Crawl-delay的大小,一般该文件会被放置在根目录下。大多数数据供应商也会对数据抓取给出一些指导意见,我们应该确保了解清楚关于下载速率的限制和频率。

某些时候,我们也有可能很幸运地找到一些现成的XPath筛选代码,那么就可以直接使用自带的R包,通过Web服务和主页下载数据。

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

热门文章

最新文章