OpenRefine

不管是現今的大數據仍是企業內部的小數據,都存在一些廣泛的問題,如數據格式不對須要轉換,一個單元格內包含多個含義的內容,包含重複項等等,雖然咱們也可使用excel解決,可是excel天生有諸多限制,好比其爲直接對數據進行操做,容易致使誤操做;數據量大會處理緩慢;透視表功能太過簡單;沒法進行高級的數據分類分析。而OpenRefine很好的解決了以上問題,最重要的一點是它仍是免費的!!mysql

確認錯誤是保證數據質量的第一步,主要包括數據畫像和數據清洗。正則表達式

  • 數據畫像 Olson定義爲:使用統計方法發現數據的結構、內容、質量。換句話說,這是一種對你的數據進行畫像,預發現包含的錯誤信息的方法
  • 數據清洗:用半自動化的方式改正畫像過程當中發現的錯誤,好比:刪除缺失和重複值、行過濾透視、值聚類及轉換、單元格拆分等等。

鑑於後續章節都須要保證數據已經畫像清洗過。OpenRefine是一個數據轉換工具(IDTS)其可以對數據進行可視化操做處理。它很像傳統的excel軟件,但其工做方式更像數據庫,因其並非處理單獨的單元格,而是處理列和字段這意味着OpenRefine對於增長新行內容表現不佳,但對於探索、清洗、整合數據卻功能強大算法

第一章 基礎

1.一、建立新項目

OpenRefine使用默認瀏覽器中打開,程序在本地運行,點擊下圖中的「選擇文件」按鈕,導入演示實例中的phm-collection.tsv文件,而後點擊下一步。sql

 

當數據上傳以後,會出現導入數據的預覽和格式需求。數據庫

 

默認狀況下,第一行數據會被解析爲列名稱。OpenRefine同時也會猜想單元格類型,給其賦予整數、日期、網址等等,這在你後續整理排列數據的時候十分有用(好比若是你將單元格設爲文本格式,那麼10就會排在2前面)express

另外一個選項是「引號在原數據中用來分隔列」選擇項,若是選中,則原數據中引號用來分隔列,不然就須要去掉勾選框以使得OpenRefine可以正確讀取。在Powerhouse數據集中,引號是用來代表物體名稱和說明信息,因此此狀況下,引號沒有分隔列的意思:因此這裏咱們須要去掉勾選。剩下的選項在某些狀況下須要設置,試着勾選或者去掉勾選來看看如何影響數據。另外,請確保編碼正確,以使得顯示正確。當全部都設置好後,點擊建立項目來加載數據。瀏覽器

 1.二、探索數據

數據加載以後的界面以下:數據結構

上圖中標明1~4的四個區域,咱們按照順序介紹:編輯器

一、總行數:若是你沒有忘記去掉「引號有意義」選項(參照要點2-建立一個新項目),那麼你會看到Powerhouse文件包含75814行數據。當數據按照某個參數進行過篩選,這裏的顯示會變成相似於找到123匹配行(總共75814行)。函數

二、顯示選項:試着點擊下,將行變成記錄來查看區別,事實上變化並不大,只不過該區域顯示爲75814條記錄而已。行數量通常狀況下等於記錄數量,但在後續狀況中仍是不同的。該區域可讓你選擇按五、十、2五、50每頁顯示,而且你也能夠在這裏跳轉頁。

三、列名稱及菜單:你會發現數據加載後的第一行被解析爲列名稱,在Powerhouse數據集中,列包含Record ID, Object Title, Registration Number等等(若是你在建立時去掉了「將第一行解析爲列名稱」的勾選,那麼列名稱區域會顯示爲Column一、Column2等等)

四、單元格內容:此處顯示實際單元格數據

在開始剖析清理數據前,十分重要的一點是確保OpenRefine較好的載入顯示了數據:查看列名稱被解析正確(數據顯示較寬時請使用水平滑動條)、單元格類型是否正確等等。將行顯示項改成每頁顯示50條以查看數據不明顯矛盾(理想狀況下,你應該在建立項目前的預覽界面時處理這些工做)。當你已經熟悉了操做界面,你就能夠繼續下一步了。

 1.三、操縱列

操縱列能夠對列進行隱藏和展開、按須要轉換、以及重命名和刪除等操做。

列是OpenRefine中的基本元素:其是具備同一屬性的成千上萬的值的集合,能夠按照不少方法查看處理。

1.3.1 隱藏和展開列

若是要隱藏一列或幾列以方便觀察操做,那麼點擊列下拉菜單,選擇View,有四個可選項:

如下是對Categories點擊了收起全部其餘列的效果:

1.3.2 移動列

有時候改變原數據中列的順序十分重要。好比,爲了將兩列放在一塊兒比較。選擇須要處理的一列而後在列菜單中選擇「編輯列」 。子菜單中會出現以下選項,在最後的四個選項跟別是對列進行移動。

若是對全部列操做,可使用第一列名稱爲「所有」的列。這一列可使你同時操做多列。「視圖」菜單可讓你快速的隱藏和展開列。選擇「編輯列」中的「重排/移動列」能夠經過經過拖動從新對列進行排列,還能夠將將列拖動到右側來去除該列,以下圖所示:

 1.四、使用項目操做歷史

OpenRefine一個特別有用的功能是能夠在項目建立後保存全部的操做步驟。這也就意味着你不須要懼怕作數據變換嘗試:你能夠隨意按照本身的想法變換數據,由於一旦你發覺作錯了(即便是幾個月前作的),你也能夠撤銷該操做以恢復數據。

爲了恢復歷史數據,單擊你想保留的最近一個步驟操做。好比,爲了取消上圖第2步及之後的操做,能夠單擊第1步使其高亮顯示,這樣第2步以後就會變灰。這意味着選中項後的操做都將取消。若是點擊第0步,那麼全部操做都將取消。

請注意,撤銷某幾步操做後再作出新的操做的話,原來的後續操做內容會丟失.好比,若是你從第2步回退到第1步,而後對Description 列執行左移操做,那麼會顯示第2步操做2. Move column description to position 1 ,而先前的灰色操做項(第2步)會丟失:由於咱們不能在同時擁有兩種互相矛盾的操做歷史記錄。記得多嘗試下上面的步驟,省的之後帶來嚴重的困擾。

記住,只有對數據有實際影響的操做纔會出如今項目歷史操做表中。數據透視好比:交換行列視角、在一頁中改變顯示數目、隱藏或展開列並不改變原來數據,因此也就不會出如今操做歷史表中。以上操做也就沒法隨着項目信息傳遞:當你從新打開一個項目,不管原來是否隱藏,這時全部的列默認都是展開的,可是對於重命名列和刪除列這類操做會出如今操做歷史表中。在第二章,分析和修改數據中,咱們會看到還有一些類型的操做會存在在操做歷史表中:好比單元格和列的變換、可是過濾和透視操做則不會。

操做歷史也能夠以JSON格式導出,能夠點擊「提取」按鈕進行操做。

1.五、導出項目

雖然可能已經移動、重命名或者刪除了列,但其實原始數據並無被修改。不像有些電子表格軟件直接將改動寫進文件,OpenRefine只是對數據文件的一份拷貝進行操做,在界面右上角點擊Export按鈕進行操做:

大部分彈出的選項可以讓你將數據導出爲經常使用格式,好比csv、tsv、excel和open document格式、還有不經常使用的RDF格式。讓咱們往下看:

  • 導出項目: 這個選項能讓你導出OpenRefine格式的壓縮包,你能夠用來和其餘人共享或者僅僅用來備份。
  • HTML表格: 這個選項可讓你方便的將文件發佈到互聯網。
  • Triple loader 和MQLWrite: 這個選項有一些擴展功能,可以讓你將數據轉換成支持Freeebase規則的樣式(參照附錄:正則表達式和GREL)
  • 自定義表格導出器:可能這是最吸引你的部分。OpenRefine可讓你對你的數據導出有更精細的控制,好比對列進行選擇和排序、忽略空白行、正確選擇日期格式以獲得更有效的數據(參見附錄:正則表達式和GREL)。以下圖所示:

1.六、小結

到這裏,能夠初步瞭解了OpenRefine,一種新的具備數據畫像、清洗、轉換等等功能的工具,而且已經瞭解如何在建立新項目中導入數據和如何在完成操做後導出數據以及行、列的運行機制。

第二章 分析和修改數據

 2.1 數據排序

排過序的值更加容易理解和分析,以Record ID 列爲例進行排序,選擇列菜單中的「排序」 ,將彈出以下窗口:

單元格值能夠按照文本(區別大小寫或者不區別)、數字、日期、布爾值排序,另外還能夠對錯誤值和空值指定排序順序。好比錯誤值能夠排在最前面(這樣容易發現問題),空值排在最後(由於空值通常沒有意義),而有效值居中。

對Record ID列經過按數字升序排列爲例,咱們就會得到一列以七、九、14等等標識的列,而打開時是以267220、346260、 267098標識順序的,下圖對排序先後的狀況作了比對:

若是按照Text: 文本排序的話,會獲得以100、100一、10019開始的一列。同時應該關注的一點是:排序並不會被記錄在項目操做歷史中。你能夠在屏幕左側頂部的「撤銷/重作」頁中確認下。由於排序並不會改變數據,其僅僅是改變了顯示方式,好比行列互換、隱藏不想顯示的列(就像excel的排序過濾功能)。因此每次對某列進行排序,你就會面對三種抉擇:取消排序回到原來狀態、暫時保持、永久改變,可是你能夠在屏幕頂部的快捷菜單Sort來作到: 

Sort菜單可讓你移除排序操做或者永久對行進行排序。若是想將排序後的結果再進行後續操做,必定要將排序結果永久保存,好比對於空白單元格或者填充單元格。

2.2 數據透視

數據透視並不改變數據,可是可讓你得到數據集的有用信息。你能夠把數據透視看做是多方面查看數據的方法,就像從不一樣的角度觀察寶石同樣。咱們將學習如何按照要求或者數據具體的值來透視數據:對字符串進行文本透視、對數字和日期進行數字透視、幾個預約義的透視功能、最後還有標星和標旗功能。OpenRefine的強大之處也在於這些透視功能的組合使用。

2.2.1 文本透視

若是你的數據集中包含城市或者國家名稱的列,而你想大體瞭解下這個字段都有些什麼值和這些值的統計次數有多少,那麼就能夠用文本透視。固然,只有該列中的類別總數不是特別大的時候文本透視纔有用,由於文本透視並非爲了列出全部的信息,所有列出並無多大意義,同時透視結果也不會出現相同的兩個類別(除非有重複項,咱們將在下一點中說明)

讓咱們試試看,點擊Categories列菜單,選擇「歸類」|「文本歸類」 ,結果會出如今屏幕左側的「歸類/過濾器」頁中。惋惜的是,OpenRefine提醒咱們總共有14,805個分類,已經超過了咱們的電腦顯示內存。事實上,透視不能超過2000個分類。


這裏的提示窗口的出現也就意味着分類數太多了,須要減小。其實OpenRefine在超出時徹底有辦法提升限制數,但實際狀況下每每咱們想減小限制數的,太多的分類對於咱們毫無心義。若是想這麼作,能夠訪問系統參數:http://127.0.0.1:3333/preferences ,編輯ui.browsing.listFacet.limit,而後調低到想要的值。若是想恢復默認值2000,直接刪掉這個值便可。

點擊下面的「按歸類中量來歸類」連接,將打開二級透視界面。新的透視也是對Categories的透視,這裏可讓你對透視顯示範圍進行限定。當第一次打開的時候,OpenRefine會顯示全部分類,不管分類數量只有1次仍是有幾千次。由於有太多的分類會被顯示,因此通常開始的時候只顯示數量較多的分類就比較有意義。

拖動左邊的滑塊從最小值0到1000,文本透視狀況將自動更新,如今將只顯示大於1000數量的Categories分類。這裏只有7個,這就比先前大大減小了。爲了觀察方便,能夠選擇對「數量」(計數項)排序(降序)來替代按字母排序。下圖顯示你獲得的透視圖:

若是你想導出最多的7個分類名稱,能夠點擊上圖中的7 choices連接,會獲得一個TSV格式的內容,你能夠複製粘帖到你喜歡的文本編輯器或者電子表格軟件中。

可能你會以爲奇怪,好比Photographic prints|Photographs 並非一個分類名稱,其實包含兩個分類,被「|」分開了。這就是爲何咱們第一次透視會出現這麼多的分類。Glass plate negatives|Gelatin dry plate negatives|Photographs, Glass plate negatives|Photographs和Glass plate negatives被區分爲不一樣的分類,可是其實他們都屬於一個分類。這就是多義單元格的困擾,這裏將在第三章:高級數據操做學習中的按鈕Cluster進行介紹。

讓咱們在對數值列進行透視前來看看另外一個文本透視操做。Height雖然並非特別明顯,可是咱們也能夠看到這個列並不只僅包括數值,好比還有一些帶單位的數字990mm,這意味着咱們不能使用數值透視(最起碼不能直接用),可是咱們能夠試試文本透視,但願可以看出端倪。咱們在對Hight列進行透視操做(「歸類」|「文本歸類」)時,咱們發現只有1313個分類,低於2000限制數,用「數量」排序,咱們發現164mm的數量有1368,而第二位的215mm只有400,以下圖所示:

在上圖列表底部,咱們能夠看到Hight列中空值有45501,也就是說這些值缺失。

2.2.2 數字透視

若是在項目導入時勾選「將單元格的文本解析爲數字、日期等」,那麼數字也能夠經過綠色來快速識別。本例中Record ID就是個很好的例子,經過對其透視能夠看出ID的分佈,而且能夠看出是否每條記錄都有一個ID。點擊Record ID列菜單,選擇「歸類/數值歸類」,而後看看左側「歸類/過濾器返回一個不一樣分類數量的列表,而數字透視則是某個數值範圍的分佈,就像咱們經過頻數來透視同樣。

咱們能夠看到Record ID的值域從0到510,000,在270,000至280,000之間有個小缺口,在410,000至500,000有個大缺口。經過滑動滑塊,咱們能夠看出有533行的值大於500,000。

在圖的下方,咱們能夠看到值類型被分紅四種:數值型, Non-numeric,Blank和 Errors。這是由於一些錯誤所致使的。在咱們操做前能夠看到Errors(錯誤值)爲0,blanks(空值)數也是0,說明每一行都被分配了一個ID,有三行的值爲Non-numeric(非數字),不能用做ID。讓咱們只勾選Non-numeric來看看狀況。如今右側咱們可以看到這三行的內容了。這三行不光ID缺失,其餘不少列也是空白,除了persistent link和license information列,可是這些信息也是自動產生的。這幾行並無什麼實際意義,因此咱們能夠刪除(本章最後內容會介紹爲何會產生)

可是這裏有個問題,若是這三行ID確實爲空,那麼爲何會被分類到Non-numeric,而不是分類到Blank?實際上是空格致使的,咱們能夠經過編輯這幾個單元格來驗證。咱們能夠將鼠標移到單元格上,會出現edit標記,點擊進入你就會看到包含一個單獨的空格,以下圖所示:

爲了改正這個錯誤,能夠單擊Backspace或Delete鍵刪除這個空格,而後點擊「應用到全部相同單元格」按鈕或者按Ctrl_Enter。OpenRefne 會彈出一個黃框提示你有多個Record ID 列值被修改。最後,左側的透視圖會自動刷新,有問題的三行也會歸到Black分類。

2.2.3 時間軸透視

時間軸透視要求數據爲日期格式,因此相似17/10/1890 的文本字符串須要改成日期格式,17/10/1890 會被轉成1890-10-17T00:00:00Z ,其中這些0標識一天中的小時、分鐘、秒。你能夠用Production Date 列練手,可是請注意,真實的時間不多是肯定的,好比僅僅包含年份的1984,或者一個時間範圍如2006到2007.咱們能夠對某列作以下操做:編輯單元格|經常使用轉換|日期化。


下圖顯示了將Production Date 列轉換成日期後的時間軸透視圖:

2.2.4 散點圖(略)

2.2.5 定製透視

咱們如今已經學習了兩種主要的透視方法-文本透視和數字透視。openrefine也提供一些預約義透視選項,其能夠給大多數用戶提供有用的透視功能。讓咱們先看一下「自定義歸類」子菜單的內容,咱們能夠在列菜單「歸類」菜單中找到。

  • 按字歸類(單詞透視)列出了字段中全部不一樣的單詞(適用於英文),一個單詞被定義爲兩個空格之間的字符。這在你想對數據小子集進行分析時十分有用,由於大數據的話統計頻數會很快增長到很大,這很容易致使軟件奔潰。好比對列Description進行單詞透視,會顯示212,751個不一樣的單詞。
  •  複數歸類(重複項透視):檢測重複項
  • 數據對數歸類 (數字對數透視):對數字的對數值進行透視,這在數字符合冪分佈時特別有用。
  • 約爲1的數字對數歸類(1階數字對數透視)也同樣,只不過其不能應用於小於1的數字。
  • 文本長度歸類(文本長度透視)針對的是字符串中的字符個數,以Object Title列爲例,咱們能夠看到該列中的內容字符個數從0到260,你能夠看到有92個標題內容中內容小於10個字符數(無內容的佔大多數,這毫無心義),你還能夠看到2007個標題內容超過250個字符數(通常狀況下必定須要精簡了)對descriptions列進行文本長度透視也十分有趣,可是咱們看到這個分佈實在太廣了點(從0到4100,雖然85%數量的內容小於500個字符數),這致使咱們很難了解其規律。這時候咱們可使用文本長度對數透視,以下所示:

  • Unicode 字符歸類(Unicode字符集透視)並不計算字符串的長度,而是列出了全部字符串中使用的字符UNICODE碼數。在Object Title列嘗試下;大部分英語字符UNICODE碼數小於128,一些源於歐洲語言的古文UNICODE碼數會達到256,阿拉伯文或中文甚至更大。若是你發覺字符UNICODE碼數特別大,多是OpenRefine沒有正確的識別出編碼。碰到這種狀況,能夠新建一個項目而後選擇手工指定正確的編碼方式。
  • 按錯誤歸類/按空白歸類:按照空值來透視在瞭解字段填充分佈時十分有用,通常經常使用來與另外一個透視結果做比較。咱們看到Marks列開頭幾行就爲空,因此咱們經過點擊」按空白歸類「來了解該列,透視結果提示咱們18,986個爲FALSE(也就是非空),86,846個位TRUE(也就是空值)。換句話說,只有四分之一的部分有內容。還有明顯的列是Weight(在屏幕右邊,使用水平滑動條滑動可見),只有179個有內容,而99.998%的內容爲空。對Object titles列進行空值透視發現,有118行是無效行,它們都有一個RECORD ID跟着一個連接和無效的信息,可是其餘列卻都是空值,因此它們並不表明一個有效記錄。

2.2.6 對標星和標旗進行透視

要標星或者標旗,只須要在對應的符號上點擊便可。大都數狀況下,經過透視過程實現同時標註多行。好比,能夠經過對Registration Number列執行「歸類」| 「自定義歸類」| 「按空白歸類」來檢測出空值,而後點擊true來選出118行空行。而後點擊「所有」列菜單中「編輯行」|「加星標」,這樣即可以對這118行進行加星標。



如今假設你想顯示要麼diameter字段有內容或者weight字段有內容的行。若是你對這兩列都作了空值透視,而後分兩次點擊結果是false的內容,你將獲得29行匹配,但其實這29行指的是diameter字段有內容並且weight字段也有內容,這和咱們的目的不符,我了按要求取到數據,解決方法是分兩步:先對diameter列進行空值透視,獲得2106行爲false(也就是diameter內容存在),而後使用All| Edit rows| Star rows標星,清除透視而且對weight列進行空值透視,獲得179行(你會注意到只有150行被標星,由於29行已經被標星,其weight和diameter都有內容而已)。再次清除透視,而後選擇All| Facet| Facet by star得到數據,固然使用旗幟功能也能夠。

2.3 重複檢測

重複值是數據集中出現兩次或更屢次的惱人數據。重複數據不只浪費存儲空間,而且會致使干擾。重複項透視就是一種可以檢測重複的簡單辦法。可是其也有限制性,好比其只能對字符串進行重複檢測,最起碼不能直接對非字符串進行操做,咱們沒法對Record ID列進行重複項透視。

這裏最好的選擇就是對registration numbers列(內部標識)進行重複項透視:「歸類」|「自定義歸類」|「複數歸類」,281行被標註爲重複項,點擊左側中的true顯示這批數據。如今鼠標滾動下查看這些重複項。咱們發現一個問題:重複項中包含空白行,這些實際上確實徹底同樣,可是和有效行的重複是徹底不一樣的。

爲了剔除這118行空白行,咱們須要再對Registration Number列做一次空值透視:「歸類」|「自定義歸類」|「按照空白歸類」.點擊false保留163行真正的重複數據,咱們發現結果自動刷新了。

最後,再增長一個透視,此次是一個簡單文本透視,列出數據集中有多個相同registration numbers的項,按照計數項排序,咱們看到79項中,77項確實是嚴格的重複項(重複2次),(2008/37/1)出現了3次,(86/1147-3)甚至出現了6次,以下圖所示:

如今讓咱們回到RECORD ID列的討論來,由於重複項透視不能用於整數,因此咱們將採起一個迂迴的辦法來檢測該列。首先,咱們對ID列進行排序,其中參數項選擇「數字」和「從小到大」。排序只是一種視覺的改變,因此爲了讓數據永久改爲排序狀態,咱們須要選擇Sort菜單(就在Show: 5 10 25 50 rows右邊),點擊「固定行順序」。若是你忘記作了這一步,後續的操做其實會忽略排序這個動做,從而致使不可知的結果。

如今咱們已經獲得了排序後的數據,ID重複項必定是在一塊兒的。因此咱們選擇進行以下操做:「編輯單元格」|「相同空格填充」,重複項中的ID會被空白替代(全部重複項中第一個保留,後續的空白填充)。而後進行一次空值透視:Record ID | Facet|Customized facets| Facet by blank,咱們將獲得86個冗餘行(若是你刪除過空白行,也多是84),其中二次重複項會出現1個,三次重複項會出現2個,六次重複項會出現5個。這86個重複項就是保留1項後剩餘的須要刪除的冗餘項。

2.4 文本過濾

假如你想找出Object Title列中全部和美國相關的全部標題。選擇Object Title| 「文本過濾」,咱們將在左側看到一個對話框,就在上節中透視對話框相同的位置。如今輸入USA。OpenRefne 提示匹配到1,866行,勾選case sensitive (區別大小寫),那麼好比karakusa和Jerusalem之類的就會被排除,這樣咱們下降到1,737行。 

這樣簡單的文本過濾並無考慮到拼寫方式,好比遺漏了U.S.A. (201 個匹配), U S A (29個匹配)或 U.S.A (22個匹配)。這時候就須要用到正則表達式了,正則表達式十分強大,可是須要你對這些表達式中的奇怪符號有基本的認識,這樣才能發揮其功效。好比,表達式\bU.?S.?A\b(文本過濾時須要勾選regular expression)將匹配上面全部須要包括的內容,而且把干擾項排除,最後將返回1,978項匹配。

文本過濾的另外一個應用是檢測分隔符的使用,在Categories列種,管道符」|」被用來分隔目錄,讓咱們對Categories列應用一個文本過濾,過濾符爲「|」,OpenRefine顯示匹配到了71105行,這說明大部份內容裏面含有至少兩個目錄(由於單個目錄不須要管道符分隔)。

2.5 簡單單元格轉換

在咱們檢測數字重複值的時候咱們已經用到過了Blank down菜單。另外的轉換功能好比分割合併單元格、聚類、計算值相對來講較複雜,因此咱們將在下一章學習。其餘的轉換功能比較簡單,因此咱們將先學習「編輯單元格」|「經常使用轉換」子菜單下的功能,以下圖所示:

  • 移除首尾空白:對數據進行刪除多餘首尾空格操做是提高數據質量的很好的開始,特別是惟一標識符也不該該有空格,只能對字符串操做,不能對數字操做。
  • 收起連續空白
  • 反轉義HTML字符:若是你碰到一些值是以&開始而且以;結束的話,試用該功能,這樣內容就可以被正確解析。
  • 大小寫轉換:咱們可以將文本字符串轉換成所有小寫、所有大寫或者首字母大寫。要注意整數是否被轉換成了字符串(由於數字被認爲沒有被大寫)。你能夠試着對registration numbers列先作一次數字透視,而後進行大小寫轉換來看看這些數字的變化,程序提示你沒有數字,也就是說此次大小寫轉換將數字轉成了字符串。

  • 清空單元格:它將刪除該列全部的內容。

咱們已經介紹完了經常使用的轉換方式,可是請注意這些只是轉換功能的冰山一角,轉換的方法不可計數,這你會在第三章:高級數據操做和附錄:正則表達式和GREL體會到。

2.6 刪除匹配的行

在實際狀況中,這意味着那些有問題的行須要從數據集中刪除,由於它們的存在是對數據質量的損害。在刪除行前,請確保你已經作過了一個透視或者過濾,否則你可能會誤將全部數據刪除,另外請確保OpenRefine是以「行」rows顯示而不是以「記錄」records顯示。

咱們將首先刪除RECORD ID中沒有內容的行。首先對Record ID列進行操做:「歸類」|「數值歸類」,在左側彈出面板中去掉「數值型」 勾選,這樣咱們就只剩下Non-numeric數據,這裏咱們有3條。如今使用「所有」|「編輯行」|「移除全部匹配的行」刪除這個行。

這樣數據集減小了3行,,數據質量也提升了一點。如今清除透視後咱們發現數據行數量降低到了75,811行。

下一步,咱們將處理數據集中registration number列有問題的行。該列沒有空格(你能夠對Registration Number列應用一個簡單的文本過濾,輸入一個空格字符,咱們發現沒有匹配行)。因此咱們對該列進行空值透視:「歸類」|「自定義歸類」|「按照空白歸類」。選擇爲true的值,獲得115條匹配行。這些就是空行,咱們能夠用Remove all matching rows刪除。

如今咱們將處理重複行。重複行就稍顯麻煩點,但咱們仍是須要刪除它們的,可能你須要回顧下檢測重複項,對Registration Number列執行:「歸類」|「自定義歸類」|「複數歸類」。選擇true獲得163行匹配行。問題是,若是你直接刪除這些行,那麼不光重複項會被刪除,那個惟一的值同時也會被刪除。換句話說,若是某行出現了兩次,那麼刪除匹配行就會把兩條都刪除而不是僅僅刪除一條。不過即便你誤刪除了,你也能夠經過項目歷史恢復。

因此咱們須要作到既去除多餘重複項,同時還可以保留一項。咱們能夠這麼作:對Registration Number進行排序,選擇text和a-z選項(case sensitive沒必要勾選,由於該列只有大寫),而後選擇Sort| Reorder rows permanently來固定排序。最後,使用Registration Number | 「編輯單元格」|「相同空白填充」將多餘的重複項使用空白填充。最後有84個單元格被修改。

若是你的重複項透視界面還打開着,那麼你會注意到重複項刷新爲84行。這是由於去重後的值(163條中的一部分)被摘出了,這時候它們已經再也不是重複項了,因此在重複項透視中被識別爲false。而真正的重複項則被填充成了空白,它們具備同一個值:空值。這就是出現84項重複的緣由。如今你能夠將這些項刪除,而且可以保留下原值。

正常狀況下,你如今將還有75,612行數據。咱們還能夠進一步處理,可是你可能已經知道如何去作了,這些就留給大家去實驗。最後看下Undo / Redo頁中項目歷史究竟咱們作了哪幾步。

 2.7 小結

在本章中,咱們學習瞭如何使用OpenRefine來分析和修復數據的基本操做,這是數據分析和清理的最基本技能。

分析數據包括排序和各種透視功能,還包括文本過濾和檢重。

修復數據步驟則包括排序、單元格轉換、刪除。

第三章 高級數據操做

3.1 對多值單元格的處理

在不少表格數據中有一個廣泛的問題:若是一個單元格中有多個值怎麼辦?舉個例子,若是有一張包含名字、地址、電話號碼的客戶信息表格。錄入人員正在對這張表格進行信息錄入,當其發現有一個名字爲Mr.Thompson的人有兩個地址信息,而且每一個地址信息對應一個電話號碼,通常狀況下錄入人員會選擇下面三種可能的操做:

  • 只增長一個地址信息:這是最簡單的作法,這減小了通常的錄入工時。可是,這也意味着丟失了通常的信息,因此表格信息完整性被下降了。
  • 增長兩行:雖然如今表格信息是完整了,可是數據卻出現了冗餘。數據冗餘也很差,由於這很容易致使錯誤:這兩行可能會被認爲是兩個不一樣的都叫Mr.Thompson的人的信息,但若是這是Mr.Thompson不一樣時間所留下的信息,就容易致使錯誤。另外,由於這兩行沒有什麼聯繫,若是其中一行信息被更新了,另外一行並不能自動更新。
  • 在一行中添加全部信息:這種狀況下,兩個地址信息和兩個電話信息都被添加到對應字段中一個單元格內。可是對於原先字段的定義來講,咱們這樣操做能夠說是信息超載了。固然這樣操做對於信息來講是符合完整和非冗餘,可是也會有個問題。對於咱們人類來講咱們能夠絕不費力的識別出這些信息含義,可是計算機卻作不到。想象下一個寫信的人在信封上寫了兩個不一樣的地址;或者是一臺自動撥號機,其是經過將一個單元格的全部內容做爲一個電話號碼來進行撥出。上面兩種狀況都會產生錯誤。因此字段確實丟失了語義上的精確性。

雖然咱們知道咱們有不少種技術方法能夠解決多值單元格問題,好比表格關聯。可是,若是數據模型你不能控制,那麼你也就只能選擇上面三種中的一種

幸運的是,OpenRefine能夠作到多值單元格的識別。固然由於OpenRefine是一種自動化軟件,因此其須要在操做前指定某個字段爲multi-valued多值字段。在Powerhouse Museum數據集中,Categories列就包含多值單元格,由於其單元格內容能夠屬於不一樣的分類。在咱們進行操做前,咱們必須告訴OpenRefine這個字段是有點不一樣的。

假如咱們想了解Categories列中究竟有多少不一樣的分類,而且哪一個分類數量最多。選擇Categories下拉菜單:「編輯單元格」|「分離多值單元格」,這裏咱們使用了「|」做爲分隔符,以下圖所示:

肯定以後能夠看到OpenRefine已經分割好了單元格值,而且對Categories的透視界面也刷新了,顯示了單獨的分類。默認狀況下是按照字母順序顯示的,若是咱們按照頻數顯示的話咱們可以得到更加有用的信息。咱們能夠將Sort by 選項從name改成count。這樣咱們就可以發現出現數最多的分類。

下面還須要作的是那些尚未變爲單值的分類,咱們須要將分類名稱修改下,這樣全部的行都會更新。好比,修改分類名Clothing and Dress,在透視界面中移動到該分類名上方,點擊edit,以下圖所示:

 輸入一個新的名稱好比Clothing,而後點擊Apply。OpenRefine 就會把全部Clothing and Dress名稱修改成Clothing。而且透視界面也當即刷新了。

一旦你已經將分開的值編輯好了,那麼你能夠把他們從新組合在一塊兒。點擊Categories列的菜單:「編輯單元格」|「合併多值單元格」,而後輸入你想要得分隔符。此次的分隔符並不必定要和原來的相同,有不少字符可使用。好比,你可使用逗號後面跟一個空格來作分隔符。

3.2 行模式和記錄模式的轉換

如今讓咱們看下OpenRefine是如何處理多值單元格的。當咱們按照上一點的操做步驟對一個列進行了分割後,咱們發現OpenRefine作了兩件事情。一方面,多值內容中的第一部分被替換放回原來的位置,另外一方面,剩下的值被放到下一空行中對應的位置。舉個例子,以下圖所示,你能夠看到ID7-ID9的記錄基本是空行,只有Categories對應的單元格有內容,只有第一行(ID6)中其餘單元格內有內容(ID6):

row是指數據集中的一行。

Record包括一個主體中的全部行。第一行全部單元格非空,標識一條記錄;後續行中相同內容爲空,表示這些行隸屬於同一條記錄

雖然這種處理方式避免了信息的重複和錯誤,可是也使得比較難分辨隸屬於哪一個主體。好比,若是咱們對Categories列進行了文本透視(參照前一點),咱們能夠點擊每一個類別名稱來看究竟有哪些行屬於這個分類。可是,若是咱們這麼作的話,咱們會發現許多空行:

產生上圖結果的緣由是:OpenRefine其實確實顯示了全部分類值爲Numismatics的行,這些行中包括那些Numismatics不是首個分類名稱的行。可是對於某個主體中的其餘行卻並無包括。這在咱們關注某個主體中的全部行時就會產生問題。好比,咱們可能想對全部類別爲Numismatics的行進行標星操做,從而想對其進行後續操做時就會產生問題,咱們能夠試着這麼作而後看看發生什麼狀況。

選中文本透視視圖中的Numismatics,點擊ALL下拉菜單中Edit rows | Star rows,而後點擊文本透視視圖中的reset來看看發生什麼狀況。咱們發現只有值爲Numismatics的行被標星了,而隸屬於主體的其餘行卻並無被標星。很顯然咱們丟失了信息。因此,讓咱們經過Undo / Redo標籤頁撤銷標星操做

OpenRefine可讓咱們將隸屬於同一個主體的全部行集合成一個單獨的record(記錄)這樣作的話,可讓咱們在分割多值單元格的同時確保這些行還可以被認爲是一個總體。咱們能夠在「展現方式」中將「行」 改爲「記錄」。你當即會發現行中顏色的改變。其會從以每一個row進行顏色區隔變爲以每一個record進行顏色區隔。

若是咱們在records模式中,在Categories透視圖中選中Numismatics,咱們能夠發現包含Numismatics的全部主體都被選中了。若是咱們經過ALL下的「編輯行」|「加星標」進行標星,咱們發現全部包含Numismatics的主體都被標星了。

 

以上說明,在records模式下,操做對整條記錄有效,記錄起碼是一行以上。總結下,咱們能夠這麼說,rows模式只是各個獨立的行,而records模式則是一個總體,能夠包含數行。

若是你想匹配既在目錄名稱爲Numismatics中又在目錄名稱Medals中的記錄該怎麼辦呢?爲了作到這點,首先請確保咱們在records模式下,而後咱們對Categories進行透視,首先咱們選擇Numismatics,而後再作一次透視,此次選擇Medals,這樣咱們就獲取到了咱們想要的記錄。

如今若是切換回rows模式會怎麼樣呢?忽然,沒有記錄得到匹配。你起初可能感到疑惑,但其實很正常:沒有一行是同時既等於Numismatics又等於Medals的,每一行最多隻有這兩項中的一項。所以,多重選擇必須在records模式下

另外請注意,其餘章節請切換到rows模式,不然可能出錯。若是出現不可預料的錯誤,請先檢查下模式是否正確。這能減小不少麻煩。

3.3 類似單元格聚類

若是你在分割多值單元格後對分類進行了分析,你會發現一樣的分類並不必定有相同的拼寫。好比,Agricultural Equipment 和 Agricultural equipment(大小寫不一樣),Costumes 和 Costume(單複數區別)等等。好消息是這類問題能夠藉助OpenRefine自動處理。

找到拼寫有微小區別的內容的過程叫作clustering(聚類),在你分割好多值單元格後,你能夠點擊Categories列下拉菜單:「編輯單元格」|「簇集並編輯」,OpenRefine會打開一個對話框,這裏能夠選擇不一樣的聚類方法,不一樣的方法都提供了不少類似的功能。打開時默認參數爲「關鍵詞碰接」key collision和「指紋分類算法」fingerprint選中。OpenRefine會完成對Categories列的聚類算法計算,最後其會列出全部的聚類項,每一項都包含拼寫有微小差異的行,而且會提供一個整個聚會項的建議值,以下圖所示:


請注意OpenRefine並不能徹底自動的合併聚類值。事實上,OpenRefine須要你確認是否這些值真的指向同一個內容。這個措施能夠名稱類似但意義不一樣的內容被合併。

  • 「簇大小」:表明某個名稱有多少種不一樣的拼寫方式被找到。
  • 「行數」:表明有多少行數據被找到。
  • 「簇中值」:指明不一樣的拼寫方式而且其數量,另外,這些拼寫方式能夠被點擊,因此你能夠肯定那種是正確的,若是你將鼠標移動到某個拼寫上方,會出現「查看這個簇」連接,你能夠點擊查看全部這類型的數據。
  • 是否合併?:包含一個勾選框,若是你選中它,那麼全部的值將會修改成「新的格子值」中的內容,但你須要點擊「合併選中」按鈕確認。固然,你也能夠手工指定一個值,若是自動出現的值並不符合你的要求。

這裏強烈建議要仔細的檢查列表,否則會把不一樣的值聚類到一塊兒。在本例中,全部的建議聚類項都是正確的,能夠直接點擊「全選」按鈕,而後點擊「合併選中&從新簇集」按鈕,這個操做可讓咱們將全部聚類項進行聚類操做而且不會關閉界面,這樣咱們還能夠試試其它聚類算法。

OpenRefine當即用相同的算法進行了聚類,結果會顯示沒有須要聚類項了。讓咱們嘗試下換種聚類算法,可能發現OpenRefine又發現了幾個新的聚類,可是請記住咱們要求仔細檢查全部的列表,你能發現錯誤嗎?仔細看看下圖:

確實,這種聚類算法將Shirts和T-shirts 認爲是相同的,可是這可能並不對,因此,要麼手工選擇全部正確的建議,要麼不要勾選不正確的項。

OpenRefine提供兩種不一樣的聚類模式,「關鍵詞碰撞」key collision和「就近原則」nearest neighbor,這兩種模式原理不一樣。

  • 關鍵詞碰撞key collision,咱們使用鍵函數來影射某個鍵值。相同的聚類有相同的鍵值。好比,若是咱們有一個移除空格功能的鍵函數,那麼A B C, AB C,和 ABC就會有相同的鍵值:ABC。事實上,鍵函數在構建上更加複雜和高效。
  • 就近原則Nearest neighbor使用的是一種技術:值與值之間使用來distance function衡量。好比,若是咱們將每一次修改爲爲一個變化,那麼Boot 和 Bots變化數是2:一次增長和一次修改。對於OpenRefine來講,其使用的distance function稱爲levenshtein

在實際應用中,很難肯定究竟哪一種模式和方法組合最好。所以,最好的方法是嘗試不一樣的組合,每次都須要當心的確認聚類項是否真的能夠合併。OpenRefine可以幫助咱們進行有效組合:好比,先嚐試key collision ,而後 nearest neighbor。

3.4 單元格值替換

在第二章:分析和修改數據中,咱們學習到OpenRefine能夠自動修改一列的單元格內容,好比去除多餘空格。上一點中,咱們學習到聚類是另外一種修改列單元格內容的方法。然而,以上方法都僅僅是單元格值轉換通用方法的一部分。你能夠經過不一樣的稍顯複雜的方式修改單元格值。雖然這看起來像是EXCEL公式,可是你會驚訝於其功能的強大。

舉個例子,假如你不喜歡使用管道符做爲Categories列單元格值得分隔符,你想替換成爲逗號後面加個空格做爲分隔符。固然你能夠先把多值單元格拆分而後再組合實現,但其實咱們能夠一步完成上述操做,點擊Categories列下拉菜單選擇「編輯單元格」 |「轉換」會出現以下的轉換對話框:

以上界面中最重要的部分是Expression(表達式), 這裏能夠輸入小腳本,用來修改值。Language 項可讓咱們選擇表達式的語言,如今支持的語言有General Refine Expression Language(GREL), Jython (Java環境的Python語言), 和Clojure(函數型語言,相似Lisp語言),若是你對後兩種語言較熟悉,你會發現書寫表達式十分簡單。可是,GREL是設計特別用來做簡單轉換的,因此本書咱們將使用GREL。

在Preview頁,咱們可以同時看到初始值和轉換後的值,這可讓你實時的調試轉換表達式,可以當即看到效果。History頁保存了你曾經用過的表達式,這樣你後續能夠直接重用原來的公式。History頁還能夠對公式打上星標,這樣你還能夠在Starred頁找到它們。最後Help頁對大多數表達式作了簡介。

對話框底部,咱們能夠肯定若是表達式在某個特定單元格中運行結果出錯時怎麼辦。你能夠選擇保持原值、置空、使用錯誤值。另外,你也能夠選擇將轉換表達式對單元格進行重複應用的次數,這個頗有用,能夠對處理結果再進行處理。好比,若是你有一個表達式,用來將首字母大寫的單詞刪除,那麼就能夠利用這個重複功能將單元格中全部大寫單詞均刪除。

回到咱們的任務:將管道符修改成逗號後面加個空格。表達式處默認值是value,就像你猜到的那樣,這表明原始值。讓咱們作個小實驗看看會發生什麼:輸入1234做爲新單元格值 。預覽界面會更新,顯示全部單元格值變爲1234。這固然沒什麼意義,但對於你理解功能確定有用。咱們真正要作的是對原值按照咱們的意願進行替換。在Help頁,咱們找到實現上面意圖的GREL函數叫作replace。由於咱們想把管道符替換成逗號,因此咱們輸入value.replace("|", ", ")。這裏咱們對字符加了雙引號,由於它們是字符串而非數字。預覽界面會刷新單元格值,咱們發現就是咱們想要的結果,因此點擊OK。只須要很短的時間,OpenRefine就轉換好了Categories列的單元格內容,全部的管道符已經被替換。

在修改分隔符時須要特別當心,由於有可能分隔符偏偏是值內容中的一部分。上圖出現的錯誤信息以下:Error: replace expects 3 strings, or 1 string, 1 regex, and 1 string。因此錯誤的緣由是咱們傳遞replace參數時出錯了,這是有些單元格爲null所致使。確實,由於null並非字符串,因此咱們並不能對其中的字符進行操做。因此咱們須要告訴OpenRefine只轉換非空的單元格,這裏能夠在對這個列進行「文本過濾」,找出含有「|」的數據。

雖然管道符已經被替換成了逗號,可是Categories列還有一些其餘問題存在。確實,有一些值內容中就包含重複內容,好比第14條記錄:Didactic displays, Pearl hells, Buttons,Didactic displays。咱們沒法採用上面的重複項處理來解決,由於這裏的重複是在一個單元格內的。打開Categories列的值轉換窗口,輸入以下表達式:value.split(", ").uniques().join(", ")。這個表達式看起來有點複雜,可是分開解讀仍是比較容易理解的。首先第一個咱們將值按照「,」分割(逗號後面跟一個空格),而後使用uniques函數去重,最後再把內容從新鏈接到一塊兒。當你點擊OK後,OpenRefine會完成操做而且提示你有多少單元格進行了該項操做。

3.5 增長源列

假設咱們但願增長一列,這一列是對應分類單元格中分類計數。點擊Categories列,選擇「編輯列」|「由此列派出新列」會彈出一個相似單元格轉換的對話框,這裏提示須要一個列名。在「新列名稱」中輸入Category Count。如今咱們能夠建立分類計數的表達式了。由於分類是被某個字符分隔的(管道符或者逗號,若是你學習過上一點的話),咱們能夠簡單的將它們拆分而後計數。表達式以下:value.split(",").length() ,Preview 面板會顯示結果,若是發現沒有問題,那麼點擊OK.確認。



OpenRefine增長了一列新列,這樣咱們就可使用Category Count列來分析咱們的數據。好比,咱們能夠對CategoryCount列進行文本透視:「歸類」|「文本歸類」. 由於咱們只是想對每一個獨立的計數數量進行分析,而不是分析其值域。因此這裏使用文本透視比較簡單,雖然這列數據是數字格式。左側透視界面會顯示究竟分類數如何分佈,以下圖所示:

咱們發現有一點比較奇怪:有一欄的值是(blank)。若是咱們點擊下,咱們發現全部的記錄Categories字段爲空,那麼爲何Category Count不顯示爲0呢?答案是對於空值單元格,這個轉換表達式會致使一個錯誤,由於沒有值能夠被分割。上一點的學習中,咱們可能可以作到在轉換前把這些行過濾掉了。不過咱們這裏嘗試修復這些行。在透視界面中點擊(blank),點擊Category Count 下拉菜單: 「編輯單元格」|「轉換」 若是咱們在表達式窗口中輸入0而且點擊OK,那麼這些空值單元格就會變成0。那些行會消失,別奇怪,由於咱們在透視中還選中着blank,點擊過濾項 0(或者其餘你像選擇的),你就能 獲得你想要的數據。

3.6 拆分列

本章開始的時候,咱們演示瞭如何將一個單元格中的多值內容拆分紅多行。可是,有時候這並不能解決問題。現有例子中,單元格中的多個分類其實屬於同一個屬性:分類間比較類似,而且順序能夠互換。可是若是多值單元格中的內容屬於不一樣的類別的話狀況就不一樣了。好比,當一個clients表格包含電話字段可是沒有email字段,而某一個客戶卻同時又上面兩種信息。結果這我的的電話信息和email信息可能會被放在一塊兒,用斜槓分隔。

在Powerhouse Museum數據集中,咱們也在不少列種發現這種狀況。好比,在Provenance字段,咱們可以同時發現designers, makers等等信息。若是咱們可以把它們拆分紅不一樣的列的話,咱們分析就會更加有意義。咱們能夠點擊Provenance (Production)列下拉菜單: 「編輯列」|「分割此列」,咱們可以看到以下的拆分對話框:

咱們能夠選擇按照曾經介紹的「按分隔符」分割, 還能夠按照「按長度」分割。按長度分割在數據結構固定的時候特別有用,如1987 en-us,X/Y這樣的類型,其沒有固定的分隔符(或者根本沒有)。固然,本例中咱們使用分隔符。一個有趣的選項是設置一個限制,由於可能有分割成不少列,因此設置下限制好比5會比較明智。千萬不要忘記設置一個分隔符,好比這裏設置成「|」。你能夠選擇讓OpenRefine猜想下分割後的單元格類型(好比分割後可能會出現數字),還可讓OpenRefine刪除原來的列。

在你點擊OK後,你會發現OpenRefine將原來叫作Provenance (Production) 的列被替換成爲了不少叫作 Provenance(Production) 1, Provenance (Production) 2等等的列。這些列能夠後續按照實際含義修更名稱。並非全部列都有內容,只有那些至少含有5項的單元格分割後纔會全部單元格都有內容。雖然分割後不會超過你設置的最大列數目,可是仍是會產生分割前的單元格分項較少,致使沒法填滿全部的列的狀況。

咱們再對Object Title列進行分割,咱們發現該列中有些單元格是以數字開頭的。若是把數字從中剝離出來應該十分有意義。首先,讓咱們先過濾出這些數字開頭的項。點擊Object Title 下拉菜單中的Text filter.咱們這裏寫上以數字開頭的正則表達式^\d.這個表達式告訴過濾器從開頭(^)進行查找而且尋找數字(\d)。別忘了勾選regular expression 。不然 OpenRefine 會把正則表達式當成字符查找。如今咱們就獲得了那些以數字開頭的項。

點擊Object Title下拉菜單,而後選擇:「編輯列」|「分割此列」,如今咱們使用一個空格做爲分隔符,設置咱們最多要2列而後點擊OK. 數字和標題被分割成了兩列。

3.7 行列轉換

有時候數據並非以你料想的方式在行和列中分佈。確實,有不少種數據排布方式,這取決於具體的狀況。好比在Powerhouse Museum數據集中,有一些不少維度的列:Height, Width, Depth, Diameter和Weight.可是,並非全部這些列中都有數據,因此若是按照這種方式排布耗時耗力。一個替代方法是將這5列轉換成2列:一列包含維度名稱(好比Height 或 Weight),另外一列包含量度值(好比35mm 或 2kg)(有點相似於key-value形式)。

這裏咱們想作的就是將這些列轉換成行。爲了作到這點,點擊Height 列下拉菜單:「變換」 |「將不一樣列中的單元格轉換爲行」,會彈出以下對話框:

左側「來源列」欄中選擇須要轉換的開始列,Height 列已經被選中是由於咱們就是點擊這一列開始操做的。「目的列」欄選擇中止轉換的列。這兩列中間的全部列就是須要轉換的列(因此你須要首先將這些列放在一塊兒).這裏咱們選擇Weight,因此這兩列及其中間的列將會被轉換。

右側,咱們能夠選擇轉換列中的變化內容。「兩個新列」欄有兩項設置, 好比Dimension和 Measurement。另外「一個新列」欄能夠將名稱和值都放到一個單元格中,可是這樣作後續分析可能比較麻煩。當全部設置項設置好後,點擊Transpose 開始轉換。5列數據將轉換成2列,以下所示:

請注意,這裏OpenRefine須要設置成「記錄」模式以保證信息關聯。因此,若是某行有不一樣的量度信息,那麼轉換後它們會佔據多行。可能你但願可以看到全部5個值,即便有些是空值。那麼你能夠選擇在轉換對話框中去掉Ignore blank cells勾選。

咱們還能夠經過執行「變換」|「取鍵值列組合成列」來實現反向轉換。可是,這個操做對於空單元格十分敏感,因此必須當心。你可能已經可以將Provenance列(名稱/值配對出現)轉換成全列格式。

3.8 小結

本章介紹了一些高級的數據操做。對於多值單元格咱們有不少處理方法:當它們的值屬於同一類型的話,咱們能夠將它們分割成多行;當它們意義不一樣的話,咱們能夠將它們分割成多列。另外咱們也學習了OpenRefine中的一種特殊模式:記錄模式。在記錄模式下,屬於同一主體的多個行被認爲是一個總體,這樣就能讓咱們進行更高效的操做。

咱們也介紹了聚類,這在單元格值自己含義同樣可是拼寫不一樣時很是有用。你甚至能夠定義本身的轉換操做,或者基於已存在的列建立新列。最後,咱們學習瞭如何進行合適的行列轉換。總的來講,本章介紹了OpenRefine的高級操做,這些操做隱藏在簡單的界面下面。到如今爲止,你基本能夠稱得上是OpenRefine高手了。

第四章 數據集關聯(略)

本章主要學習如何 與URL進行關聯。本章中,介紹瞭如何使互相孤立的數據集創建聯繫。一方面,你能夠對單內容字段進行解析,這樣可使得這些單元格與URL對應,而且可以在線查詢詳細信息。你也可使用內置的Freebase解析或者安裝RDF擴展包 來實現對連接數據的解析。另外一方面,你也可使用擴展包進行抽取單名稱項,這可使OpenRefine對單元格內的內容進行查詢,而且找到每一個內容小項的URL。最後,你的數據集會與其餘數據集創建豐富的聯繫,使之在發佈時變得頗有價值。

4.1 使用Freebase解析值

字符和URL之間的轉換,OpenRefine內置Freebase 解析(略)

4.2 安裝擴展包(略)

4.3 增長解析服務(略)

4.4 與關聯數據進行解析(略)

第五章 正則表達式和GREL(略)

 

----------------------------

我的總結,openrefine最大的特色有以下的幾個:

一、在數據導入的時候,能夠根據數據類型將數據轉換爲對應的數值和日期型等。

二、類似單元格聚類,能夠根據單元格字符串的類似性來聚類,而且支持關鍵詞碰撞和近鄰匹配算法。

三、在單元格值替換時,可以對錶達式運行出錯的處理,如保留原值、置空或者使用錯誤值,另外還能夠控制表達式運行的次數。

四、並無傳統意義上的兩個數據集之間的關聯查詢和處理,如mysql中的join操做

五、數據集關聯主要是對內容作URL的關聯,在目前所接觸到的場景中沒有用到該功能。

 

參考資料:

一、《Using OpenRefine》翻譯

二、相關學習資料:https://pan.baidu.com/s/1pLXEPvl 密碼: cpab

相關文章
相關標籤/搜索