数据分析指北 - KNIME 模块( Data Access 类型模块之三 JSON、XML、Web 与 MongoDB)

*欢迎关注公众号 数据分析指北*

感觉有用?帮忙转发?谢谢!

数据分析指北 - KNIME 模块( Data Access 类型模块之三 JSON、XML、Web 与 MongoDB)


历史回看:

  • 模块基础
  • 基础(Data Access类型模块之一IO模块集合)
  • 基础(Data Access 类型模块之二 Database 模块集合)
*Photo by NordWood Themes on Unsplash*

微信公众号:数据分析指北

  • Data Access 类型模块(继续...)
    • JSON、XML类型
      • JSON 格式介绍与解析
      • XML 格式介绍与解析
      • JSON 与 XML 的相应模块
    • Web 相关
    • NoSQL 相关(以 MongoDB 为例)

上一节我们讲了 KNIME 中 Data Access 类型模块中的一大类 -- Database 模块集合,并给出了对应于各模块的学习建议。这节我们讲 Data Access 类型模块中 JSON、XML 等模块集合。

Data Access 类型模块(继续...)

JSON、XML类型

JSON、XML是两种数据格式,在网络数据交换中,这两种数据格式的使用相对频繁,我们先看这两种数据格式。

JSON 格式介绍与解析

维基百科中是这么描述 JSON 的:JSON(JavaScript Object Notation,JavaScript对象表示法)是一种由道格拉斯·克罗克福特构想和设计、轻量级的数据交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。

尽管 JSON 是 JavaScript 的一个子集,但其实它是一种独立于语言的文本格式,只不过因为它脱胎与 JavaScript,所以 JSON 这个名字就这么延续称呼起来了。这里不去介绍具体 JSON 的组成、形式等,而举一个 JSON 例子,目的是让我们了解 JSON 就是大概如此模样,如何才能交给我们其他的 KNIME 模块进行下一步的处理。如下是一段具体的 JSON 数据:

{
  "book": [
    {
      "year": 1999,
      "title": "Timeline",
      "author": "Michael Crichton"
    },
    {
      "year": 2000,
      "title": "Plain Truth",
      "author": "Jodi Picoult"
    }
  ]
}

不用了解 JSON 的具体规则,我们也大致清楚上面在说什么。有两本书,我们录有它们的年份、书名以及作者,每一个 {...} 中对应了一条信息,如果套用曾经我们用过的 CSV 文件(基础(基础数据操作之二,读取数据源)),那么以上的数据可能要表示成类似下面这样才能继续分析:

year,title,author
1999,"Timeline","Michael Crichton"
2000,"Plain Truth","Jodi Picoult"

那么,怎么样把 JSON 格式中的各个字段对应到 CSV 类似字段呢?我们需要做的就是告诉计算机,去 JSON 的什么位置取什么数据,然后把它们组合在一起就可以了。

而具体的 "去什么位置" 就是靠指定 "具体数据所在的位置" 来实现的。

在 KNIME 中,对于 JSON 和 XML 都有相应的 Reader 模块(在 KNIME Node Repository 的 Structured Data 集合中),我们需要做的主要是配置 "具体数据所在的位置"。下图就是 JSON Reader 模块的配置界面以及输出结果:

*JSON Reader 配置界面*
*JSON Reader 的输出结果*

注意到输出结果红色框所标记的内容,{JSON} 字样指的是这一列的数据存储的是 JSON 这种对象,而小写的 json 字样,代表了这一列的列名。这里对照回忆一下我们曾经在基础操作中讲过的班级信息的例子:

*CSV Reader 的输出结果*

我们在班级信息中处理的是整数和字符串类型的数据,比如在 列名前面,有一个 I 的标识,就代表了这一列存储的是整型(Integer),而其他标识为 S 的,就代表那一列存储的是字符串(String)。数据在 KNIME 中存储的类型非常重要,可喜的是,KNIME 将这些信息以非常便于观察的方式展现,给我们下一步处理数据提供了很多线索。当我们猜不到某些标识的含义时,可以通过 Spec 标签页去了解具体的列存储的是什么类型的数据。

当我们通过 JSON Reader 把相应的 JSON 数据读取成 JSON 类型的数据后,我们需要把这种类型的数据转换为我们熟悉的整型、字符型、日期型以及浮点型等等才方便进行下一步的处理。在这里 JSON Path 这个模块就能够帮我们把 JSON 数据类型转换为其他数据类型。

*JSON Path 的配置页面*

打开 JSON Path 的配置页面,初看有点不知从何处下手,但其实非常好用,尤其是下面的 JSON-Cell Preview。如果我们想把 JSON 数据中的日期字段给摘出来,那么就直接点击 1999,然后点击 Add Collection query 就可以了!现在我们可以点击刚刚生成的规则,看看下面 Preview 部分,是不是把你想要的结果都给标记出来了。在下图中,我们看到那两个被自动标记的蓝色日期就是我们想要提取的内容。

*在 JSON Path 中提取了year*

在上面的配置中,我们只用了 Add Collection Query 这一个功能,就会自动生成对应的 Column name、JSON Path 等信息;如果我们不是想要所有的日期,而只是想提取 1999 这一个年份,那么我们可以用 Add Single Query 这个功能;如果我们想要自己手动写 JSON Path 也是很容易的,看看前面自动生成的 JSON Path -- $['book'][*]['year'],想要写一个类似的路径规则不会太难,如果想要更详细的说明,请参照 JSON Path 自带的帮助文件。另外其中有意思的一点是,如果使用的是 Collection Query,对应的 Column name 是一个复数单词。比如 year 会被提取为 years、title 会被提取为 titles 等等。
我们配置完其他部分,运行并获得输出如下:

*JSON Path 的输出结果*

对于 Collection 类型的 query,我们获得的一定是一个列表,这也就是图中图示 [...] 的含义,我们需要把这个列表拆开,一一对应起来。比如 1999,TimeLine,Michael... 这三个数据就应该是一行的。这个时候我们就需要用到 UnGroup 模块了。UnGroup 模块比较简单,主要是用来拆开列表数据的,配置和结果如下:

*UnGroup 模块的配置*
*UnGroup 模块的结果*

可以看到,输出结果和我们期待的基本一致,只需要把对应的 JSON 列去除就可以了。如果想要做这部分实验的同学,请关注公众号"数据分析指北",回复"作业",获取下载链接。

XML 格式介绍与解析

XML 是一种比 JSON 更为古老的格式,全名为 Extensible Markup Language (可扩展标记语言),它是一种标记语言。如下是一段具体的 XML 数据:



    
        Harry Potter and the Sorcerer's Stone
        J. K. Rowling
    
    
        Harry Potter and the Chamber of Secrets
        J. K. Rowling
    

可以看到,其实它和 JSON 数据并没有本质上的不同,只不过是约定了不同的数据存储和展示格式。下面我们配置一个类似于 JSON Path 的模块 -- XPath,获取我们想要的数据:

*XPath 配置*

JSON 与 XML 的相应模块

JSON 和 XML 的 KNIME 模块都是被组织在 Structured Data 节点下的。只要理解了上面的内容,大部分模块的功能基本上看个名字就能猜到什么意思了。

*JSON 相关节点*
*XML 相关节点*

其中,JSON Path 与 XPath 按照之前的评分 -- [重点:✨✨✨;难度:✨✨]。

[重点:✨;难度:✨✨✨]Container Input(JSON)、Container Output(JSON) 这两个节点值得一提,功能相对比较高阶,会在 workflow 调用 workflow 的时候做为数据的接口用到。

[重点:✨;难度:✨ -- ✨✨]而其余的相关模块,就相对没有 JSON Path 和 XPath 那么重要了。

Web 相关

[重点:✨;难度:✨ -- ✨✨✨]有一些 Web 服务,通过调用它们(比如 Get Request)可以获得一些结果,这些结果如果是 JSON 或 XML 的,那么在后面的节点直接使用 JSON 和 XML 相关的处理模块进行数据的初步提取,继而进行后续的处理。只要我们搞清楚原始数据是怎么调用的,有没有登陆验证等过程,发送 Request 的时候需不需要加一些特定的标识,这一部分就相对比较简单了,在此不在赘述。

*Web 相关节点*

NoSQL 相关(以 MongoDB 为例)

[重点:✨;难度:✨] 如果我们搞懂了 JSON,其实我们也顺便搞懂了 NoSQL 数据库中的 MongoDB 是怎么读取的。因为 MongoDB 默认的输出就是 JSON!MongoDB 不属于 KNIME Database 中的节点,现在它属于 KNIME Labs 中的节点,默认我们是需要打开菜单 File -> Install KNIME Extensions, 并在搜索对话框中搜索 KNIME MongoDB Integration,然后才能安装的。

*搜索安装 MongoDB 相关扩展*
*MongoDB 相关节点*

回头聊

感觉有用?帮忙转发?谢谢!

你可能感兴趣的:(数据分析指北 - KNIME 模块( Data Access 类型模块之三 JSON、XML、Web 与 MongoDB))