數據一多,就有可能出現數據名目不統一、殘缺或者冗餘等情況,且數據量越大錯誤可能越多。如何才能使雜亂無章的數據變得清晰有致?免費開源的數據清洗工具Open Refine就是你的好幫手,不但可以清洗數據、轉換格式,藉助網絡服務和外部數據幫你擴展,而且還能鏈接數據庫。深度君經授權分享數據新聞網編寫的《中國數據新聞工作坊培訓手冊》,為你總結Open Refine的簡明使用方法。
深度君資料卡:何為Open Refine?
OpenRefine是一款數據清洗軟件,它的主要目的是幫你在使用數據之前挖掘、清洗數據。它以你的網頁瀏覽器作為運行界面,這就意味着它看上去是在網上運行,但所有數據其實保存在你電腦里。
Open Refine免費開源,可供所有人使用。最新版本是Google Refine2.5。
以下由數據新聞工作坊編寫的教學材料部分根據 OpenRefine Tutorial 改編。你可以到此網址了解有關 Open Refine 的更多情況。
第一部分:歸類
在該部分中,你會學到如何使用 Open Refine 的歸類功能來清理國家名。我們的測試數據是一個來自不同國家的大學名稱單,大學名稱信息是從維基百科抓取來的。
首先我們得載入數據文件
打開Open Refine, 點擊屏幕左側的“新建項目” (Create Project)
先點擊“這台電腦” (This Computer),然後點擊“選擇文件”(Choose Files)。 在你的數據文件中選擇UniversityData.csv。你就會看到數據。
該文件中有些中文文字(列的名字)。如果中文顯示不對,你也許需要告訴Open Refine使用正確的字符集。要做到這一點,點擊“字符編碼” (Character encoding) 旁邊的空白空間,從中選擇UTF-8。
然後點擊右邊的“新建項目” (Create Project) 鍵。
2. 你可以看到country (“國家”)這一列中, 國家名字不統一。例如,美國即叫 United States,也叫USA。我們要通過創立一個文字歸類, 讓Open Refine 給我們看 country 一列中所有的值。摁下 country旁邊的小下箭頭,選擇 歸類 Facet -> 文本歸類 Text Facet。
片刻後,該歸類中所有國家的值就會在屏幕左側顯示出來。
你可以看到美國有多個不同叫法, 還有一些錯誤的名字,比如有一行美國叫United States ), 還有一個捏造的國家叫Utopia(烏托邦)!每個不同的國家名叫一個歸類, Open Refine 給你顯示了每一個歸類里有多少行數據。
點擊任何歸類名字,你會只看到那個歸類里的行。在我們這個例子里,你只會看到那些國家列里數據和你點擊的名字相符的行。
你只要點擊任何一個歸類名,就能對其進行編輯。現在我們來把美國所有不同的叫法都變成United States。 你鼠標指向 US 這一歸類時,一個的“編輯”edit 選項就會出現。點擊 編輯 edit。
請打入United States, 然後點擊 應用 Apply。
現在所有是 US 的2609行都變成了United States。 對每一個別的叫法都同樣進行編輯,直到美國所有的叫法都變成United States。 你做完後,你的歸類應該如下:
第二部分 – 清理數字
我們現在來清理有關學生數目的數據。這些數據里,有的值不是數字,很多值里除了學生數目的數字外,還包含有文字片段。要找出那些條目需要清理,我們需要使用 數值歸類 Numeric facet:
如果你看不到數字Numeric facet 的選項,你可能首先需要將學生數那一列轉換成數字。你可以通過選擇編輯欄Edit cells->一般轉換Common transforms->到數字To number
這兒顯示的是值的直方圖,並列出每種類型 numeric (數值型), non-numeric (非數值),blank (空白)或者error (錯誤))條目的數目。你一定要只選擇非數字型的行,這可以通過把numeric, blank 和error排除掉來實現。
我們已經可以看出有問題了,因為有的格里包含有+和~符號。要解決這個問題,我們需要做 編輯單元格Edit cells -> 轉換 Transform
這使得我們可以打入替換字符序列的命令:
value.replace(“+”, “”)
每格里的現值總是由value (“值”)這個名稱代表的。replace (“替換”)這個命令做的是讓系統針對value進行文字搜索和替換運作,把+換成什麼都沒有 (兩個引號里什麼都沒有)。
做這個命令時,你其實是在用一點編程語言。系統還有很多高級功能(本教學材料中沒包括),如果你想在此方面獲得更多知識,可以參考Google Refine Expression Language (GREL) reference
如果你發現有多個東西需要被替換,沒有必要通過不斷點擊編輯單元格 Edit cells -> 轉換 Transform 來逐個替換。相反,你可以將這些命令連在一起,同時來解決多個問題,不管你有多少問題都行:
value.replace(“~”, “”).replace(“,”,””)
為了更新對非數字型值的選擇,有時候有必要將各列的值轉變為數字 (編輯單元格 Edit cells -> 常用轉換 Common transforms -> 數字化 To number)。你做完這一步以後,應該看到非數字型值少了。
第三部分 – 自己動手
在該部分里,你會得到一個從新浪微博網站剪貼來的文件, 然後將其轉換為有關PM2.5 值的Excel電子表格。
文件名是Weibo air pollution data.txt 。你可以以跟以前同樣的方式載入。文件是這樣:
你必須首先刪除不包含PM2.5的所有的行,然後把數據按時間、PM2.5值、和健康警告級別分成不同的列。你做完以後文件應該像這樣:
如果還想學習更多功能,深度君還推薦以下資源:
Git-Hub OpenRefine
數據學院-Cleaning data with Refine
RefinePro提供的OpenRefine使用建議/方法合集
參考原文:《中國數據新聞工作坊培訓手冊》第四章 – 實操:使用Open Refine清理數據
來源:數據新聞網(djchina.org)
數據新聞網以引介全球範圍內最頂尖的數據新聞實踐為初衷,以推動數據開放及媒體革新為宗旨,面向中國的新聞從業者、媒體管理者、新傳教育者以及對傳媒感興趣的設計師、程序員,提供線上信息平台與線下交流機會。深度網編輯/周煒樂
Whoa, whoa, get out the way with that good inomtfarion.