# [ TaiBIF 工作坊 ] 資料清理原則和工具 OpenRefine :pushpin: ==資料清理前提:表格欄位定義明確,且符合 DwC 規範== <br/> ## 資料處理<font color="red">前</font> 1. 資料備份 & 版本維護 2. 原始資料妥善保存並盡可能被**系統性索取**或**存取** 3. 了解資料來源 => 若已經有經過處理,則通常採取第二版較好,第一版是地獄(可參考) (1). 清楚資料版本 (2). 之前都對資料做了什麼處理 (3). 選擇最小機會白費力氣的版本,例如第二版,清理過一次,又不會失去太多原始資料 ## 資料清理原則 1. 內容維護具可行性與持續性 2. 基於常識 or 專業知識的聯想力、想像力思考哪裡**可能錯誤** 3. 資料及內部**邏輯一致**具整理性 4. 合法且合乎倫理 ## 資料清理工具 1. [GBIF data validator](https://www.gbif.org/tools/data-validator) 找出資料常見錯誤 2. Excel 3. OpenRefine 4. 比對有效學名:[NomenMatch](http://match.taibif.tw/v2/index.html) / [Global Names Resolver](https://resolver.globalnames.org/) 5. [canadensys](https://data.canadensys.net/tools/coordinates) 座標轉換 6. [GBIF backbone API](https://www.gbif.org/developer/species) 新增分類階層欄位 **GET api_name** 選 scientificName column 的 **Add column by fetching URLs** 貼上以下語法,取得一包 json 資料,沒有辦法兩個步驟一起,只能先丟 request,得到結果後,再將結果用 **`parseJson()`** 拿出來 ```javascript= "http://api.gbif.org/v1/species/match?verbose=true&name="+escape(value,'url') ``` ![GET api_name](https://hackmd.io/_uploads/SJ63X4Wb6.png) 得到一大串的 json 資料 ![](https://hackmd.io/_uploads/BJzHNE-ZT.png) 將資料解壓縮? **匯入高階層分類欄位 higherClassification** 選 Get_api_name column 的 **Add column based on this column** 貼上以下語法 ```javascript= value.parseJson().get("kingdom")+", "+value.parseJson().get("phylum")+", "+value.parseJson().get("class")+", "+value.parseJson().get("order")+", "+value.parseJson().get("family") ``` ![](https://hackmd.io/_uploads/Hy9EL4bZa.png) **Split into several columns,得到各分類層級** <br/> **GBIF data validator 整理出可能錯誤** ![](https://hackmd.io/_uploads/B1ChEhly6.png) ### OpenRefine 基本功能介紹 <br/> <br/> <br/> <br/> <br/> <br/> <br/>