數(shù)據(jù)分析指北 - KNIME 模塊( Data Access 類型模塊之三 JSON逆甜、XML、Web 與 MongoDB)

*歡迎關(guān)注公眾號 數(shù)據(jù)分析指北*

感覺有用致板?幫忙轉(zhuǎn)發(fā)交煞?謝謝!

數(shù)據(jù)分析指北 - KNIME 模塊( Data Access 類型模塊之三 JSON斟或、XML素征、Web 與 MongoDB)


歷史回看:

*Photo by NordWood Themes on Unsplash*

微信公眾號:數(shù)據(jù)分析指北

上一節(jié)我們講了 KNIME 中 Data Access 類型模塊中的一大類 -- Database 模塊集合萝挤,并給出了對應(yīng)于各模塊的學(xué)習(xí)建議御毅。這節(jié)我們講 Data Access 類型模塊中 JSON、XML 等模塊集合怜珍。

Data Access 類型模塊(繼續(xù)...)

JSON端蛆、XML類型

JSON、XML是兩種數(shù)據(jù)格式酥泛,在網(wǎng)絡(luò)數(shù)據(jù)交換中今豆,這兩種數(shù)據(jù)格式的使用相對頻繁,我們先看這兩種數(shù)據(jù)格式揭璃。

JSON 格式介紹與解析

維基百科中是這么描述 JSON 的:JSON(JavaScript Object Notation晚凿,JavaScript對象表示法)是一種由道格拉斯·克羅克福特構(gòu)想和設(shè)計、輕量級的數(shù)據(jù)交換語言瘦馍,該語言以易于讓人閱讀的文字為基礎(chǔ),用來傳輸由屬性值或者序列性的值組成的數(shù)據(jù)對象应役。

盡管 JSON 是 JavaScript 的一個子集情组,但其實它是一種獨立于語言的文本格式,只不過因為它脫胎與 JavaScript,所以 JSON 這個名字就這么延續(xù)稱呼起來了。這里不去介紹具體 JSON 的組成嘲更、形式等瓦糟,而舉一個 JSON 例子,目的是讓我們了解 JSON 就是大概如此模樣例朱,如何才能交給我們其他的 KNIME 模塊進行下一步的處理。如下是一段具體的 JSON 數(shù)據(jù):

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

不用了解 JSON 的具體規(guī)則,我們也大致清楚上面在說什么捐凭。有兩本書,我們錄有它們的年份凳鬓、書名以及作者茁肠,每一個 {...} 中對應(yīng)了一條信息,如果套用曾經(jīng)我們用過的 CSV 文件(基礎(chǔ)(基礎(chǔ)數(shù)據(jù)操作之二缩举,讀取數(shù)據(jù)源))垦梆,那么以上的數(shù)據(jù)可能要表示成類似下面這樣才能繼續(xù)分析:

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

那么匹颤,怎么樣把 JSON 格式中的各個字段對應(yīng)到 CSV 類似字段呢?我們需要做的就是告訴計算機托猩,去 JSON 的什么位置取什么數(shù)據(jù)印蓖,然后把它們組合在一起就可以了。

而具體的 "去什么位置" 就是靠指定 "具體數(shù)據(jù)所在的位置" 來實現(xiàn)的京腥。

在 KNIME 中赦肃,對于 JSON 和 XML 都有相應(yīng)的 Reader 模塊(在 KNIME Node Repository 的 Structured Data 集合中),我們需要做的主要是配置 "具體數(shù)據(jù)所在的位置"绞旅。下圖就是 JSON Reader 模塊的配置界面以及輸出結(jié)果:

*JSON Reader 配置界面*
*JSON Reader 的輸出結(jié)果*

注意到輸出結(jié)果紅色框所標(biāo)記的內(nèi)容摆尝,{JSON} 字樣指的是這一列的數(shù)據(jù)存儲的是 JSON 這種對象,而小寫的 json 字樣因悲,代表了這一列的列名堕汞。這里對照回憶一下我們曾經(jīng)在基礎(chǔ)操作中講過的班級信息的例子:

*CSV Reader 的輸出結(jié)果*

我們在班級信息中處理的是整數(shù)和字符串類型的數(shù)據(jù),比如在 列名前面晃琳,有一個 I 的標(biāo)識讯检,就代表了這一列存儲的是整型(Integer),而其他標(biāo)識為 S 的卫旱,就代表那一列存儲的是字符串(String)人灼。數(shù)據(jù)在 KNIME 中存儲的類型非常重要,可喜的是顾翼,KNIME 將這些信息以非常便于觀察的方式展現(xiàn)投放,給我們下一步處理數(shù)據(jù)提供了很多線索。當(dāng)我們猜不到某些標(biāo)識的含義時适贸,可以通過 Spec 標(biāo)簽頁去了解具體的列存儲的是什么類型的數(shù)據(jù)灸芳。

當(dāng)我們通過 JSON Reader 把相應(yīng)的 JSON 數(shù)據(jù)讀取成 JSON 類型的數(shù)據(jù)后,我們需要把這種類型的數(shù)據(jù)轉(zhuǎn)換為我們熟悉的整型拜姿、字符型烙样、日期型以及浮點型等等才方便進行下一步的處理。在這里 JSON Path 這個模塊就能夠幫我們把 JSON 數(shù)據(jù)類型轉(zhuǎn)換為其他數(shù)據(jù)類型蕊肥。

*JSON Path 的配置頁面*

打開 JSON Path 的配置頁面谒获,初看有點不知從何處下手,但其實非常好用壁却,尤其是下面的 JSON-Cell Preview批狱。如果我們想把 JSON 數(shù)據(jù)中的日期字段給摘出來,那么就直接點擊 1999儒洛,然后點擊 Add Collection query 就可以了精耐!現(xiàn)在我們可以點擊剛剛生成的規(guī)則,看看下面 Preview 部分琅锻,是不是把你想要的結(jié)果都給標(biāo)記出來了卦停。在下圖中向胡,我們看到那兩個被自動標(biāo)記的藍色日期就是我們想要提取的內(nèi)容。

*在 JSON Path 中提取了year*

在上面的配置中惊完,我們只用了 Add Collection Query 這一個功能僵芹,就會自動生成對應(yīng)的 Column name、JSON Path 等信息小槐;如果我們不是想要所有的日期拇派,而只是想提取 1999 這一個年份,那么我們可以用 Add Single Query 這個功能凿跳;如果我們想要自己手動寫 JSON Path 也是很容易的件豌,看看前面自動生成的 JSON Path -- $['book'][*]['year'],想要寫一個類似的路徑規(guī)則不會太難控嗜,如果想要更詳細的說明茧彤,請參照 JSON Path 自帶的幫助文件。另外其中有意思的一點是疆栏,如果使用的是 Collection Query曾掂,對應(yīng)的 Column name 是一個復(fù)數(shù)單詞。比如 year 會被提取為 years壁顶、title 會被提取為 titles 等等珠洗。
我們配置完其他部分,運行并獲得輸出如下:

*JSON Path 的輸出結(jié)果*

對于 Collection 類型的 query若专,我們獲得的一定是一個列表许蓖,這也就是圖中圖示 [...] 的含義,我們需要把這個列表拆開调衰,一一對應(yīng)起來蛔糯。比如 1999,TimeLine窖式,Michael... 這三個數(shù)據(jù)就應(yīng)該是一行的。這個時候我們就需要用到 UnGroup 模塊了动壤。UnGroup 模塊比較簡單萝喘,主要是用來拆開列表數(shù)據(jù)的,配置和結(jié)果如下:

*UnGroup 模塊的配置*
*UnGroup 模塊的結(jié)果*

可以看到琼懊,輸出結(jié)果和我們期待的基本一致阁簸,只需要把對應(yīng)的 JSON 列去除就可以了。如果想要做這部分實驗的同學(xué)哼丈,請關(guān)注公眾號"數(shù)據(jù)分析指北"启妹,回復(fù)"作業(yè)",獲取下載鏈接醉旦。

XML 格式介紹與解析

XML 是一種比 JSON 更為古老的格式饶米,全名為 Extensible Markup Language (可擴展標(biāo)記語言)桨啃,它是一種標(biāo)記語言。如下是一段具體的 XML 數(shù)據(jù):

<?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 數(shù)據(jù)并沒有本質(zhì)上的不同照瘾,只不過是約定了不同的數(shù)據(jù)存儲和展示格式。下面我們配置一個類似于 JSON Path 的模塊 -- XPath丧慈,獲取我們想要的數(shù)據(jù):

*XPath 配置*

JSON 與 XML 的相應(yīng)模塊

JSON 和 XML 的 KNIME 模塊都是被組織在 Structured Data 節(jié)點下的析命。只要理解了上面的內(nèi)容,大部分模塊的功能基本上看個名字就能猜到什么意思了逃默。

*JSON 相關(guān)節(jié)點*
*XML 相關(guān)節(jié)點*

其中,JSON Path 與 XPath 按照之前的評分 -- [重點:???筒主;難度:??]乌妙。

[重點:?;難度:???]Container Input(JSON)、Container Output(JSON) 這兩個節(jié)點值得一提,功能相對比較高階喜每,會在 workflow 調(diào)用 workflow 的時候做為數(shù)據(jù)的接口用到刚照。

[重點:?;難度:? -- ??]而其余的相關(guān)模塊特幔,就相對沒有 JSON Path 和 XPath 那么重要了拍嵌。

Web 相關(guān)

[重點:?茄猫;難度:? -- ???]有一些 Web 服務(wù),通過調(diào)用它們(比如 Get Request)可以獲得一些結(jié)果,這些結(jié)果如果是 JSON 或 XML 的,那么在后面的節(jié)點直接使用 JSON 和 XML 相關(guān)的處理模塊進行數(shù)據(jù)的初步提取,繼而進行后續(xù)的處理。只要我們搞清楚原始數(shù)據(jù)是怎么調(diào)用的锭魔,有沒有登陸驗證等過程胀葱,發(fā)送 Request 的時候需不需要加一些特定的標(biāo)識轧葛,這一部分就相對比較簡單了衷笋,在此不在贅述吝秕。

*Web 相關(guān)節(jié)點*

NoSQL 相關(guān)(以 MongoDB 為例)

[重點:?耘柱;難度:?] 如果我們搞懂了 JSON士袄,其實我們也順便搞懂了 NoSQL 數(shù)據(jù)庫中的 MongoDB 是怎么讀取的赤拒。因為 MongoDB 默認(rèn)的輸出就是 JSON崔涂!MongoDB 不屬于 KNIME Database 中的節(jié)點帝雇,現(xiàn)在它屬于 KNIME Labs 中的節(jié)點吮廉,默認(rèn)我們是需要打開菜單 File -> Install KNIME Extensions, 并在搜索對話框中搜索 KNIME MongoDB Integration,然后才能安裝的。

*搜索安裝 MongoDB 相關(guān)擴展*
*MongoDB 相關(guān)節(jié)點*

回頭聊

感覺有用?幫忙轉(zhuǎn)發(fā)浙垫?謝謝艺智!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缰趋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子陕见,更是在濱河造成了極大的恐慌评甜,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘉抒,死亡現(xiàn)場離奇詭異耗式,居然都是意外死亡跷坝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門贴届,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靠粪,“玉大人,你說我怎么就攤上這事绍些±袒牛” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵柬批,是天一觀的道長啸澡。 經(jīng)常有香客問我,道長氮帐,這世上最難降的妖魔是什么嗅虏? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮上沐,結(jié)果婚禮上皮服,老公的妹妹穿的比我還像新娘。我一直安慰自己参咙,他們只是感情好龄广,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蕴侧,像睡著了一般择同。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上净宵,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天敲才,我揣著相機與錄音裹纳,去河邊找鬼。 笑死紧武,一個胖子當(dāng)著我的面吹牛剃氧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播阻星,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼她我,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了迫横?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤酝碳,失蹤者是張志新(化名)和其女友劉穎矾踱,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疏哗,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡呛讲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了返奉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贝搁。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖芽偏,靈堂內(nèi)的尸體忽然破棺而出雷逆,到底是詐尸還是另有隱情,我是刑警寧澤污尉,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布膀哲,位于F島的核電站,受9級特大地震影響被碗,放射性物質(zhì)發(fā)生泄漏某宪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一锐朴、第九天 我趴在偏房一處隱蔽的房頂上張望兴喂。 院中可真熱鬧,春花似錦焚志、人聲如沸衣迷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蘑险。三九已至,卻和暖如春岳悟,著一層夾襖步出監(jiān)牢的瞬間佃迄,已是汗流浹背泼差。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留呵俏,地道東北人堆缘。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像普碎,于是被迫代替她去往敵國和親吼肥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,928評論 2 89
  • 1麻车、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,979評論 3 119
  • 上大學(xué)以后缀皱,每次和別人介紹自己,說到我是江蘇人动猬,就會被追問“蘇南還是蘇北呀”啤斗,這讓一向自稱是“蘇中”地區(qū)的我這南通...
    一隅之外閱讀 566評論 1 3
  • 5月18日 今天一位媽媽告訴我她最不能接受孩子的“丟三落四” 我無意間與她分享了我家爸爸如何“對付”丟三落四的我們...
    4ef8868fe3c0閱讀 366評論 0 0
  • 生活再累,記得一日三餐吃飽穿暖赁咙; 人情再冷钮莲,記得熱愛生活,敢于去愛彼水; 夢想再遠崔拥,記得不忘初心,堅持到底凤覆; 每個人無...
    龍膽閱讀 179評論 0 0