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

简介:

本节书摘来自华章社区《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更加不灵活。

相关文章
|
1月前
|
机器学习/深度学习 数据挖掘 Python
Python 的科学计算和数据分析: 解释什么是数据规整(Data Wrangling)?
Python 的科学计算和数据分析: 解释什么是数据规整(Data Wrangling)?
|
2月前
|
机器学习/深度学习 存储 SQL
15个超级棒的外文免费数据集,学习数据分析不愁没有数据用了!
15个超级棒的外文免费数据集,学习数据分析不愁没有数据用了!
|
3天前
|
数据采集 数据挖掘 API
主流电商平台数据采集API接口|【Python爬虫+数据分析】采集电商平台数据信息采集
随着电商平台的兴起,越来越多的人开始在网上购物。而对于电商平台来说,商品信息、价格、评论等数据是非常重要的。因此,抓取电商平台的商品信息、价格、评论等数据成为了一项非常有价值的工作。本文将介绍如何使用Python编写爬虫程序,抓取电商平台的商品信息、价格、评论等数据。 当然,如果是电商企业,跨境电商企业,ERP系统搭建,我们经常需要采集的平台多,数据量大,要求数据稳定供应,有并发需求,那就需要通过接入电商API数据采集接口,封装好的数据采集接口更方便稳定高效数据采集。
|
1月前
|
数据可视化 数据挖掘 Java
提升代码质量与效率的利器——SonarQube静态代码分析工具从数据到洞察:探索Python数据分析与科学计算库
在现代软件开发中,保证代码质量是至关重要的。本文将介绍SonarQube静态代码分析工具的概念及其实践应用。通过使用SonarQube,开发团队可以及时发现和修复代码中的问题,提高代码质量,从而加速开发过程并减少后期维护成本。 在当今信息爆炸的时代,数据分析和科学计算成为了决策和创新的核心。本文将介绍Python中强大的数据分析与科学计算库,包括NumPy、Pandas和Matplotlib,帮助读者快速掌握这些工具的基本用法和应用场景。无论是数据处理、可视化还是统计分析,Python提供了丰富的功能和灵活性,使得数据分析变得更加简便高效。
|
5天前
|
数据采集 人工智能 数据挖掘
Python数据分析:利用Pandas库处理缺失数据的技巧
在数据分析中,数据的完整性对结果的准确性至关重要。本文将介绍如何利用Python中强大的Pandas库来处理数据中的缺失值,帮助您更好地进行数据清洗和分析。
|
17天前
|
数据采集 数据可视化 数据挖掘
从数据到洞察:Python 数据分析实例
在当今数据驱动的时代,数据分析已经成为企业和组织决策的重要依据。Python 作为一种强大的数据分析工具,提供了丰富的库和工具,使得数据分析变得更加简单和高效。在本文中,我们将通过一个实际的案例,介绍如何使用 Python 进行数据分析,从数据到洞察。
|
22天前
|
数据可视化 数据挖掘 BI
数据分析案例-某公司员工数据信息可视化
数据分析案例-某公司员工数据信息可视化
30 2
|
22天前
|
机器学习/深度学习 算法 数据挖掘
数据分析案例-基于PCA主成分分析法对葡萄酒数据进行分析
数据分析案例-基于PCA主成分分析法对葡萄酒数据进行分析
46 0
|
23天前
|
XML 机器学习/深度学习 JSON
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
18 0
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
|
28天前
|
SQL 数据可视化 数据挖掘
Python数据分析与科学计算库:开启数据世界的大门
在当今数字化时代,数据分析和科学计算成为了各行业发展的关键。Python作为一种功能强大且易于使用的编程语言,拥有多种优秀的数据分析与科学计算库,如NumPy、Pandas和Matplotlib。本文将介绍这些库的基本特点和用途,并探讨它们在数据处理、统计分析和可视化方面的应用,旨在帮助读者更好地理解和应用Python进行数据分析和科学计算。
18 3