2017年1月5日 星期四

R學習筆記 - 資料工程篇(三) JSON

#註: 本篇筆記諸多內容直接紀錄課程原文,而本文也僅整理資訊之用途。
課程連結 : R語言翻轉教室

RDataEngineer-03-JSON

JSON (JavaScript Object Notation) 在網際網路上已經是最廣泛使用的格式之一,尤其常見於各種傳遞資料的API之中。舉例來說,台北的Youbike的API資料、甚至是Facebook上的API資料,都是以JSON格式傳輸。

#JSON物件範例 - 臉書錯誤訊息

{
   "error": {
      "message": "An active access token must be used to query information about the current user.",
      "type": "OAuthException",
      "code": 2500,
      "fbtrace_id": "EkWgGmWkEt2"
   }

}


從畫面上,我們可以簡單看到整個訊息的前後分別有`{`和`}`,這代表整個訊息就是一個JSON物件。每個物件中則包含一對一對的「名稱」與「值」的組合。舉例來說,整個訊息的JSON物件中,只有一對名稱與值的組合:名稱是:"error",值則是另一個JSON物件。


主要使用R套件 : jsonlite
把一個JSON文件轉換成R 的list


在Vignettes的第一段很清楚的說明jsonlite的功能:R 和JSON物件之間能在不損失資訊的狀況下轉換。而作者也馬上給了一個簡單的範例:使用jsonlite提供的`toJSON`和`fromJSON`,可以完整的還原一個R的data.frame。這種方式,是驗證轉換過程中是否有遺失資訊的一種方式。


範例中所使用的`all.equal`是一種用來驗證程式碼正確性時,常常使用的工具。它會一字不漏的比對兩個R 物件,必需要一模一樣才會回傳`TRUE`,否則會回報不一致的理由。


文件的第二段描述jsonlite在把JSON物件轉換成R 物件時,會自動嘗試把JSON物件轉換成更適合的物件。舉例來說,`["Amsterdam", "Rotterdam", "Utrecht", "Den Haag"]`如果直接轉換,可能會變成一個長度為4 的list,而每個元素都是長度為1 的字串向量。


#範例: 
fromJSON( 物件 , simplifyVector = TRUE )
simplifyVector = TRUE ,JSON物件啟用自動轉換。

jsonlite的vignettes後面的段落仔細的介紹處理JSON的細節,建議是先把作者提供的vignettes讀過以後,能省掉很多找bug的 時間。



#作業:

1.list清單中呼叫其迭代之清單list,可使用連續$方式直接呼叫,如下
youbike1$result$results$sbi



#後記 :
在安裝套件過程中,不知名原因無法順利安裝jsonlite套件,這時還是只能依靠Google大神的幫助,這次十足感受到直接使用英文搜尋問題的效率。未來遇到程式問題,直接使用英文描述問題或複製貼上錯誤訊息,都能有效率在社群找到解答。 有時候會不自覺先搜尋中文訊息,但其實英語系的搜尋結果更多、社群互動更熱絡,自然很容易得到解答。


以下紀錄搜尋要訣:
1.
直接使用英文描述問題或複製貼上錯誤訊息

2.首選社群討論串、如stack overflow等討論串
3.直接觀看官方文件、套件說明文件
4.社群發問要點 : 
4.1.記錄自己的R版本
sessioninfo() 

4.2 紀錄使用套件版本
packageVersion()
4.3說明使用作業系統環境
5.查詢封包是否有長文件說明(以網頁的形式,而非pdf的形式呈現給使用者。)
vignette()

沒有留言:

張貼留言