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

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

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

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


历史回看:

*Photo by NordWood Themes on Unsplash*

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

上一节我们讲了 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 数据:

<?xml version="1.0" encoding="UTF-8"?>
<inventory>
    <book year="1999">
        <title>Harry Potter and the Sorcerer's Stone</title>
        <author>J. K. Rowling</author>
    </book>
    <book year="2000">
        <title>Harry Potter and the Chamber of Secrets</title>
        <author>J. K. Rowling</author>
    </book>
</inventory>

可以看到,其实它和 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 相关节点*

回头聊

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,913评论 2 89
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,969评论 3 119
  • 上大学以后,每次和别人介绍自己,说到我是江苏人,就会被追问“苏南还是苏北呀”,这让一向自称是“苏中”地区的我这南通...
    一隅之外阅读 563评论 1 3
  • 5月18日 今天一位妈妈告诉我她最不能接受孩子的“丢三落四” 我无意间与她分享了我家爸爸如何“对付”丢三落四的我们...
    4ef8868fe3c0阅读 363评论 0 0
  • 生活再累,记得一日三餐吃饱穿暖; 人情再冷,记得热爱生活,敢于去爱; 梦想再远,记得不忘初心,坚持到底; 每个人无...
    龙胆阅读 177评论 0 0