《Clojure数据分析秘笈》——1.7节将XML数据读入Incanter数据集

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

本节书摘来自华章社区《Clojure数据分析秘笈》一书中的第1章,第1.7节将XML数据读入Incanter数据集,作者(美)Eric Rochester,更多章节内容可以访问云栖社区“华章社区”公众号查看

1.7 将XML数据读入Incanter数据集
一类非常常用的数据格式是XML,人们对其褒贬不一。但在某种情况下,几乎所有人都不得不处理它。Clojure可以使用Java的XML库,但它也有自己的包,这个包提供了一种在Clojure中使用XML的更自然的方式。

1.7.1 准备工作
首先,在Leiningen project.clj文件中引入以下依赖:


281e2a2b7cc4aa704a2dbb847d60d1823f2a2981


16d18252c3bbaa4d2bc8f23cd9a91d4834e9597b

1.7.3 实现原理
本方法按以下顺序处理XML:

  1. 解析XML数据文件。
  2. 利用解析树抽取数据节点。
  3. 将节点转换成代表数据的映射序列。
  4. 最后,将其转换至Incanter数据集。
    load-xml-data实现了这个过程。其中包括三个参数:输入文件名、传入解析完成的XML的根节点并返回第一个数据节点的函数,以及传入一个数据节点并返回下个数据节点或空值(如果其后没有节点)的函数。

首先,函数解析XML文件并将之装入zipper(将在后面的章节详细讨论zipper),然后利用传入的两个函数将数据节点抽取成一个序列。对于每个数据节点,获取其子节点并将其转换成一系列“标签名/内容”对。每个数据节点的对转换成一个映射,然后映射序列转换至Incanter数据集。

1.7.4 更多信息
本方法中使用了一对有趣的数据结构或概念。这两种数据结构在函数式编程语言或者Lisp中都很常见,但是都未出现在主流的编程语言中,接下来深入学习一下。
利用zipper浏览结构
解析完成后的XML文件需要作为参数传入clojure.zip/xml-zip。这将使用Clojure本身的XML数据结构并将其转换成可以用如clojure.zip/down和clojure.zip/right之类的命令进行快速浏览。作为一门函数式编程语言,Clojure使用不可变数据结构;而zipper提供了一种浏览、修改类树结构的高效、自然方法,例如XML文档。
zipper非常实用且有趣,理解它们有助于理解如何使用不可变数据结构。如需关于zipper更详细的信息,Clojure关于其的文档会有帮助(http://clojure-doc.org/articles/tutorials/parsing_xml_with_zippers.html)。但是如果很喜欢刨根问底,参考杰拉德·休伊特的论文“The Zipper”(http://www.st.cs.uni-saarland.de/edu/seminare/2005/advanced-fp/docs/huet-zipper.pdf)。
流水线处理
可以使用->>宏来以流水线的方式展示处理过程。对于深度嵌套的函数调用,这个宏需要从右往左阅读,这使得处理过程的数据流和转换序列更清晰。
在Clojure中可以执行流水线处理是因为它的宏系统。->>仅将函数调用重写成Clojure本身的嵌套的格式,与格式读入的方式一样。传入宏的第一个参数将作为下一个表达式的最后一个参数插入。数据结构则插入第三个表达式作为最后一个参数,等等,直到这种格式结束。也就是说,以(->> x first (map length) (apply +))表达式开始。接下来是Clojure构建最终表达式的一系列中间步骤(需要整合的元素在每个阶段都会高亮显示)。

  1. (->> x first (map length) (apply +))
  2. (->> (first x) (map length) (apply +))
  3. (->> (map length (first x)) (apply +))
  4. (apply + (map length (first x)))
    比较XML和JSON

XML和JSON(在1.4节中提到)非常相似。可以证实的是,JSON的流行很大程度上是被对XML冗长特性的醒悟所驱动的。
当在Clojure中处理这些格式的数据时,最大的不同在于JSON数据是直接转换成对应数据内容的Clojure内部数据结构,例如映射和向量。然而对于XML而言,XML被读入至反映XML结构的记录类型,而不是反映数据结构的记录类型。
换句话说,JSON中的映射的键值来自域,例如,来自first_name或者age。然而,XML中映射的键值来自数据格式、标签、属性或者子节点,也就是说,标签和属性名来自域。这额外的一层抽象使得XML更加不灵活。

相关文章
|
14天前
|
数据采集 数据可视化 数据挖掘
Pandas数据应用:天气数据分析
本文介绍如何使用 Pandas 进行天气数据分析。Pandas 是一个强大的 Python 数据处理库,适合处理表格型数据。文章涵盖加载天气数据、处理缺失值、转换数据类型、时间序列分析(如滚动平均和重采样)等内容,并解决常见报错如 SettingWithCopyWarning、KeyError 和 TypeError。通过这些方法,帮助用户更好地进行气候趋势预测和决策。
112 71
|
13天前
|
存储 数据采集 数据可视化
Pandas数据应用:电子商务数据分析
本文介绍如何使用 Pandas 进行电子商务数据分析,涵盖数据加载、清洗、预处理、分析与可视化。通过 `read_csv` 等函数加载数据,利用 `info()` 和 `describe()` 探索数据结构和统计信息。针对常见问题如缺失值、重复记录、异常值等,提供解决方案,如 `dropna()`、`drop_duplicates()` 和正则表达式处理。结合 Matplotlib 等库实现数据可视化,探讨内存不足和性能瓶颈的应对方法,并总结常见报错及解决策略,帮助提升电商企业的数据分析能力。
115 73
|
4月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
55 1
|
5月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
202 7
使用Java和XPath在XML文档中精准定位数据
|
10天前
|
存储 数据采集 数据可视化
Pandas数据应用:医疗数据分析
Pandas是Python中强大的数据操作和分析库,广泛应用于医疗数据分析。本文介绍了使用Pandas进行医疗数据分析的常见问题及解决方案,涵盖数据导入、预处理、清洗、转换、可视化等方面。通过解决文件路径错误、编码不匹配、缺失值处理、异常值识别、分类变量编码等问题,结合Matplotlib等工具实现数据可视化,并提供了解决常见报错的方法。掌握这些技巧可以提高医疗数据分析的效率和准确性。
54 22
|
4月前
|
数据挖掘 PyTorch TensorFlow
|
2月前
|
存储 机器学习/深度学习 数据可视化
数据集中存在大量的重复值,会对后续的数据分析和处理产生什么影响?
数据集中存在大量重复值可能会对后续的数据分析和处理产生多方面的负面影响
135 56
|
15天前
|
数据采集 数据可视化 索引
Pandas数据应用:股票数据分析
本文介绍了如何使用Pandas库进行股票数据分析。首先,通过pip安装并导入Pandas库。接着,从本地CSV文件读取股票数据,并解决常见的解析错误。然后,利用head()、info()等函数查看数据基本信息,进行数据清洗,处理缺失值和重复数据。再者,结合Matplotlib和Seaborn进行数据可视化,绘制收盘价折线图。最后,进行时间序列分析,设置日期索引、重采样和计算移动平均线。通过这些步骤,帮助读者掌握Pandas在股票数据分析中的应用。
50 5
|
27天前
|
数据采集 监控 数据挖掘
常用电商商品数据API接口(item get)概述,数据分析以及上货
电商商品数据API接口(item get)是电商平台上用于提供商品详细信息的接口。这些接口允许开发者或系统以编程方式获取商品的详细信息,包括但不限于商品的标题、价格、库存、图片、销量、规格参数、用户评价等。这些信息对于电商业务来说至关重要,是商品数据分析、价格监控、上货策略制定等工作的基础。
|
3月前
|
机器学习/深度学习 人工智能 搜索推荐
某A保险公司的 数据图表和数据分析
某A保险公司的 数据图表和数据分析
77 0
某A保险公司的 数据图表和数据分析