Open Refine - Cover

三天三夜的逐行修正、重新調整欄位 … 你曾經跟資料奮戰過嗎?為了加速人類文明進步以及節省我們的時間, Google  開發了 Open Refine — 專為科學家、非政府組織、記者等任何會接觸到資料的人而設計的工具,讓你不需要寫程式也可以進行複雜的資料整理。

談到資料整理,你第一個會想到什麼?很多人可能都是利用 Microsoft Excel 、 Google Spreadsheet 等等的試算表工具來整理資料。試算表整理資料相當直覺,但畢竟試算表當初並不是專為了「資料整理」而打造的 — 在拿到資料的時候,我們可能會碰到各種問題,例如資料格式錯亂、欄位內容不統一、排版特殊且不堪使用 — 這其中有相當多種類的問題用基本的試算表功並沒辦法很容易的處理好。

Open Refine — 最初由 Google 開發的 Google Refine 、於 2012 年釋出源始碼後更名為 Open Refine — 在其網頁的介紹是這麼寫的:

“powerful tool for working with messy data: cleaning it; transforming it from one format into another; extending it with web services; and linking it to databases like Freebase.”

「專門對付雜亂資料的強大工具;清理、轉換資料的格式與內容,利用網路服務與線上資料庫延伸你的資料」

可見 Open Refine 就是專門為了對付惡劣的資料而設計的。立刻就來看看如何使用吧!

安裝 Open Refine

Open Refine 由 Java 開發,它被設計成一個本地端的網頁伺服器,執行時會自動開啟瀏覽器來運作。首先我們從 Open Refine 的下載頁面選擇自己平台所對應的安裝執行檔來下載;目前的穩定版本是 Google Refine 2.5* ,你也可以選擇下方的 Open Refine 2.6 版本來嘗試。

* Open Refine 在 2.5 版以前仍稱為 Google Refine,以下為了方便起見統稱為 Open Refine

建立專案

安裝完成後執行 Open Refine,它會自動為你開啟瀏覽器並連結到它所建立的本地伺服器,若你的瀏覽器未自動開啟的話,也可以自行輸入 http://localhost:3333/ 這個網址來進入 Open Refine 。  Open Refine 的進入畫面如下:

openrefine - create-project

在 Open Refine 中,每個資料檔都是一個專案 ( Project ) ,我們可以透過各種方式匯入資料檔來建立專案:

  1. 點選上圖 1 的位置來準備建立專案
  2. 從上圖 2 的位置選擇資料來源,包括:
    1. 從電腦上傳
    2. 從網址下載
    3. 從剪貼簿貼上
    4. Google Data
  3. 以電腦上傳為例,我們可以在上圖 3 地位置選擇我們要的檔案
  4. 最後,點擊下一步 ( 上圖 4 )

Open Refine 支援的檔案格式相當多,包括 TSV 、 CSV、 XLS、 XML 與 JSON,各有不同的匯入選項,如果你有轉換資料格式的需求 ( 例如拿到 JSON 卻不曉得如何使用 ) ,也可以把 Open Refine 當成轉換工具。

以 Excel 為例,匯入的資料會進入到設定頁面:

openrefine - config-project

除了資料預覽 ( 上圖 1 ) 與格式選擇 ( 上圖 2 ) 以外,我們還可以選擇資料的工作表 ( 上圖 3 ) 、要做為標題欄以及跳過的列數 ( 上圖 4 )。我們可以隨意設定數值玩玩看,然後按「Update Preview」按鈕在資料預覽區看看結果如何,滿意了再設定專案名稱 ( 上圖 5 ) 以及建立專案 (上圖 6 )。

工作環境

建立好專案以後,我們會看到如下的畫面:

Open Refine Editor Overview

畫面大致上分為三個部份:

  • 右方的資料預覽區。類似 Excel 將資料逐行分欄呈現,不過不會一次全部顯示出,我們可以利用上方的 「 Show: 5 10 25 50」部份來控制要顯示的行數。這裡一共有 45090 行。
    在每個資料欄的標題處都有下拉式選單,整個 Open Refine 主要的整理資料功能都藏在這裡了。
  • 左方的資料控制區。當我們操作資料時,會設定許多過濾器來挑出我們要處理的資料,這些過濾器都會依序呈現在這裡。這個區塊有兩個頁籤:
    • 「Facet / Filter」顯示過濾器,除了濾出想要的資料外,也可以進行編輯。
    • 「Undo / Redo」顯示編輯歷程,讓我們可以隨時還原錯誤的編輯。
  • 上方的專案列
    • 點擊左邊的 「Refine」圖示可以回到首頁
    • 複製「Permalink」連結以方便下次繼續編輯。Open Refine 在你編輯的同時會隨時產生一個對應的連結,這個連結對應到的即為你當下的編輯狀態,相當方便。
    • 右方的 「Export」按鈕可以匯出資料檔,編輯完成後一定會用到的按鈕。

編輯手法介紹

講了這麼多,還是趕緊來進入實戰吧!剛剛上圖範例的資料檔為疾病管制署釋出的登革熱疫情資料,通常拿到資料我們最想知道的是:各個欄位有多少種不同的值?

※ Facet — 批次修正資料

在想要了解的資料欄位的標題展開下拉式選單 ( 下圖 1 ) ,點選 Facet → Text Facet  (下圖 2 ),我們會看到下圖 3 處的「性別」Facet 框跑出來,這個框中統計了性別欄裡面出現值的種類與個數,以下圖為例:

  • 22672 個「女」
  • 22417 個 「男」
  • 1 個空白,可能是因為性別不明
Open Refine - Text Facet

當滑鼠移到各個值上時,後方會出現「edit」「include」等按鈕,方便我們直接對其做編輯,或是設定過濾條件。

比方說,假設我們知道該不明的性別實際上為男性,那我們只要將滑鼠移上,點擊「edit」,填入男性,那麼該欄位就會被改為男性;這個編輯會一次影響到所有相同的欄位,因此如果有很多重覆的欄位需要修正,這會省掉我們相當多的時間。

Facet 框同時也扮演了過濾器的角色。我們可以在這裡點選特定值 ( 例如:女 ), 代表我們只想顯示包含性別「女」的資料,這時右方的預覽畫面便會只剩女性:

Open Refine - Filter Example

可看到上圖的「女」被選取後,右方只剩女性,這時可以點擊「exclude」來取消選取。

Facet 用來修正錯別字或同義值相當方便,例如「台北市」與「臺北市」、「女」與「Female」「F」「女性」等,利用 Facet 一次便可以弄清楚資料欄中的數值種類,並快速的進行修正。

利用 Filter 功能,則可以讓我們限制修正的範圍,例如若我們只想要修改台北市的資料,則利用居住縣市的 Facet 設定台北市為過濾條件後,接下來的修改就只會套用在台北市的範圍中了。

※ Fill Down — 自動填滿空白

有些有階層性的資料會省略重覆的部份,例如下圖為國人出國旅遊的人數資料:

Open Refine - Filldown

可看到「首站抵達地」下方只有一個「亞洲」,其它都是空白的。當我們想要使用資料來視覺化或統計時,往往會需要這些空白被填滿,這時可以用「Fill down」功能 — 下拉式選單 → Edit Cells → Fill down , Open Refine 會自動幫你填滿這些空白的欄位。

相反的,如果你想做的是清除重覆的欄位,則可以使用「Blank down」— 下拉式選單 → Edit Cells → Blank down , Open Refine 則會自動幫你把重覆的部份清空。

※ 欄位轉置 — 橫轉直、直轉橫

有時候我們拿到的資料會把數據擺成很多行,例如下列的資料:

  台北市,排名,10
  台北市,得分,5
  台北市,名聲,7

即使我們其實想要的是像這樣的格式:

  城市,排名,得分,名聲
  台北市,10,5,7

這時可以用 Open Refine 的轉置功能來變換。我們要實驗的資料如下,可以看到每個城市都有「排名」「得分」與「名聲」三個值:

Open Refine - transpose1

這時利用下拉式選單 Transpose → Columnize by key/value column 選項,設定「Key ( 標題 )」從 Column2 取得,「Value ( 數值 ) 」從 Column3 取得:

Open Refine - Transpose 2

按下 OK 後,所有 Column2 的值便會跑到標題列去,而對應的值則會由 Column3 來填滿:

Open Refine - transpose 3

※ 清除不要的資料行

有時候我們只想要部份的資料,例如登革熱資料只想留下今年的部份,或是上面轉置範例中,想要刪除空白行。

我們可以利用 Facet 挑選出我們想刪除的資料行,接著使用 All 欄下拉選單中的 Edit rows → Remove all matching rows 將所有符合當前條件的行都刪除掉。例如下圖我們透過 Column1 找出所有空白行,接著點擊 Remove all matching rows:

Open Refine - Remove Matching

原本有空白的城市排名資料便會變成這樣:

Open Refine - Matching Removed

總結

上面簡單的示範了幾種編輯資料的方式,是不是很方便呢?Open Refine 功能相當的多,能玩出的花樣不計其數,比方說用正規表達式過濾文字、程式找尋相似文字做自動修補、還有各種不同類型的 Facet ,由於篇幅限制,這裡只列舉幾個很常使用到的功能。其它更進階的功能,就留待下次介紹,或者是各位讀者自己發掘囉!

就不寫程式來修理資料來說, Open Refine 幾乎可以說是當前工具中最強大的一個了,這樣的工具卻不常見到資料工作者在用,這次為各位簡介 Open Refine ,不曉得是否覺得對工作會有所幫助呢?現在 Open Refine 也已經開放源始碼了,如果有任何功能是你需要但卻沒有提供的,也可以到 Open Refine 的 Github 頁面提出建議,甚至是主動幫忙改進喔!


Written by infographics.tw

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *