2020 版 Python 數據清理終極指南!

2020-12-06 CSDN

作者 | Lianne & Justin

譯者 | 陸離

一般來說,我們在擬合一個機器學習模型或是統計模型之前,總是要進行數據清理的工作。因為沒有一個模型能用一些雜亂無章的數據來產生對項目有意義的結果。

數據清理或清除是指從一個記錄集、表或是資料庫中檢測和修改(或刪除)損壞或不準確的數據記錄的過程,它用於識別數據中不完整的、不正確的、不準確的或者與項目本身不相關的部分,然後對這些無效的數據進行替換、修改或者刪除等操作。

這是個很長的定義,不過描述的較為簡單,容易理解。

為了簡便起見,我們在Python中新創建了一個完整的、分步的指南,你將從中學習到如何進行數據查找和清理的一些方法:

缺失的數據;不規則的數據(異常值);不必要的數據——重複數據等;不一致的數據——字母大小寫、地址等。在本文中,我們將使用Kaggle提供的俄羅斯房地產數據集(

https://www.kaggle.com/c/sberbank-russian-housing-market/overview/description),目標是要預測一下俄羅斯近期的房價波動。我們不會去清理整個數據集,因為本文只是會用到其中的一部分示例。

在對數據集開始進行清理工作之前,讓我們先簡單地看一下裡面的數據。

從上述的結果中,我們了解到這個數據集總共有30471行和292列,還確定了特徵是數值變量還是分類變量,這些對我們來說都是有用的信息。

現在可以查看一下「dirty」數據類型的列表,然後逐個進行修復。

讓我們馬上開始。

缺失的數據

處理缺失的數據是數據清理中最棘手但也是最常見的一種情況。雖然許多模型可以適應各種各樣的情況,但大多數模型都不接受數據的缺失。

如何發現缺失的數據?

我們將為你介紹三種技術,可以進一步了解在數據集中的缺失數據。

1、缺失數據的熱圖

當特徵數量較少的時候,我們可以通過熱圖來進行缺失數據的可視化工作。

下圖顯示了前30個特徵的缺失數據樣本。橫軸表示特徵的名稱;縱軸顯示觀測的數量以及行數;黃色表示缺失的數據,而其它的部分則用藍色來表示。

例如,我們看到特徵life_sq在許多行中是有缺失值的。而特徵floor在第7000行附近幾乎就沒有什麼缺失值。

缺失數據熱圖

2、缺失數據的百分比列表

當在數據集中有足夠多的特徵時,我們可以為每個特徵列出缺失數據的百分比。

這將在下面形成一個列表,用來顯示每個特徵的缺失值的百分比。

具體來說,我們看到特徵life_sq缺失了21%的數據,特徵floor則只缺失了1%。這個列表是一個較為有用的匯總,根據它就可以補充熱圖可視化了。

缺失數據的百分比列表——前30個特徵

3、缺失數據的直方圖

當我們有足夠多特徵的時候,缺失數據的直方圖也是一種技術。

為了了解更多關於觀測數據的缺失值樣本的信息,我們可以使用直方圖來對它進行可視化操作。

這個直方圖有助於識別30471個觀測數據中的缺失值情況。

例如,有6000多個沒有缺失值的觀測數據,而將近4000個觀測數據中僅有一個缺失值。

缺失數據直方圖

我們應該怎麼做?

對於處理缺失的數據,沒有任何一致的解決辦法。我們必須在研究了特定的特徵和數據集之後,來決定處理它們的最佳方式。

在下文中,分別介紹了四種處理缺失數據的常見方法。但是,如果遇到更複雜的情況,我們就需要利用一些相對更加複雜的方法,比如缺失數據建模等。

1、放棄觀察

在統計學中,這種方法被稱為列表刪除技術。在這個方案中,只要包含了一個缺失值,我們就要刪除整條的觀測數據。

只有當我們確定所缺失的數據沒有提供有用信息的時候,我們才能執行此操作。否則,我們應該考慮使用其它的辦法。

當然,也可以使用其它標準來刪除觀察數據。

例如,從缺失數據的直方圖中,我們可以看到總共缺失了至少35個以上的特徵觀測數據。我們可以創建一個新的數據集df_less_missing_rows,然後刪除具有35個以上缺失特徵的觀測數據。

2、刪除特徵

與方案一比較類似,我們只有在確定當前特徵沒有提供任何有用信息的時候才能執行這個操作。

例如,從缺失數據百分比的列表中,我們注意到hospital_beds_raion的缺失值百分比高達47%。那麼,我們就可以刪除整個特徵數據了。

3、填補缺失數據

當特徵是一個數值變量的時候,可以進行缺失數據的填補。我們會將缺失的值替換為相同特徵數據中已有數值的平均值或是中值。

當特徵是一個分類變量的時候,我們可以通過模式(最頻繁出現的值)來填補缺失的數據。

以life_sq為例,我們可以用它的中值來替換這個特徵的缺失值。

此外,我們還可以同時對所有的數字特徵使用相同的填補數據的方式。

比較幸運的是,我們的數據集中並沒有缺失分類特徵的值。然而,我們可以對所有的分類特徵進行一次性的模式填補操作。

4、替換缺失的數據

對於分類特徵,我們可以添加一個類似於「_MISSING_」這樣的值,這是一種新類型的值。對於數值特徵,我們可以使用-999這樣的特殊值來替換它。

這樣,我們仍然可以保留缺失值作為有用的信息。

不規則的數據(異常值)

異常值是與其它的觀測值截然不同的數據,它們可能是真正的異常值或者是錯誤值。

如何發現不規則的數據?

根據特徵是數值的還是分類的,我們可以使用不同的技術來研究其分布特點用以檢測它的異常值。

1、直方圖和方框圖

當特徵是數值的時候,我們可以使用直方圖或者是方框圖來檢測它的異常值。

下面是特徵life_sq的直方圖。

由於可能存在異常值,因此,數據準確性的差別看起來是異常顯著的。

直方圖

為了更深入地研究這個特徵,下面我們來畫一個方框圖。

在這個圖中,我們可以看到一個超過7000的異常值。

方框圖

2、描述性統計數據

此外,對於數值特徵,異常值可能過於明顯,以致方框圖無法對其進行可視化。相反地,我們可以看看它們的描述性統計數據。

例如,對於特徵life_sq,我們可以看到最大值是7478,而75%的四分位數只有43。很明顯,7478值是一個異常值。

3、條形圖

對於分類特徵,我們可以使用條形圖來了解特徵的類別以及分布的情況。

例如,特徵ecology具有合理的分布,但是,如果有一個類別只有一個叫做「other」的值,那麼這肯定就是一個異常值。

條形圖

4、其它的技術

還有許多其它的技術也可以用來發現異常值,例如散點圖、z-score和聚類等等,在這裡將不會一一進行講解。

我們應該怎麼做?

雖然尋找異常值並不是什麼難事,但是我們必須確定正確的解決辦法來進行處理。它高度依賴於所使用的數據集和項目的目標。

處理異常值的方法有些類似於缺失數據的操作。我們要麼放棄、要麼調整、要麼保留它們。對於可能的解決方案,我們可以參考本文的缺失數據部分。

不必要的數據

在對缺失數據和異常值進行了所有的努力之後,讓我們看看關於不必要的數據,這就更簡單了。

首先,所有輸入到模型中的數據都應該為項目的目標服務。不必要的數據就是數據沒有實際的數值。根據不同的情況,我們主要劃分了三種類型的不必要數據。

1、無信息或者重複值

有時,一個特徵沒有有用的信息,因為太多的行具有相同的值。

如何發現無信息或者重複值?

我們可以創建一個具有相同數值的百分比較高的特徵列表。

例如,我們在下面指定顯示95%以上的具有相同值的行的特徵。

我們可以一個一個地研究這些變量,看看它們是否具有有價值的信息,在這裡就不顯示細節了。

我們應該怎麼做?

我們需要了解重複特徵背後的原因,當它們真的缺少有用信息的時候,就可以把它們放棄了。

2、不相關的數據

同樣,數據需要為項目提供有用的信息。如果這些特徵數據與我們在項目中要解決的問題沒什麼關係,那麼它們就是不相關的。

如何發現不相關的數據?

首先,我們需要瀏覽一下這些特徵,以便之後能識別那些不相關的數據。

例如,一個記錄多倫多天氣的特徵數據並不能為預測俄羅斯房價提供任何有用的信息。

我們應該怎麼做?

當這些特徵數據並不符合項目的目標時,我們就可以放棄它們了。

3、重複數據

重複數據是指存在多個相同的觀測值。

重複數據主要包含兩種類型。

(1)基於所有特徵的重複數據

如何發現基於所有特徵的重複數據?

當觀察到的所有特徵數據都相同的時候,就會發生這種重複現象,這是很容易發現的。

我們首先要去除數據集中的唯一標識符id,然後通過刪除重複數據來創建一個名為df_dedupped的數據集。我們通過比較兩個數據集(df和df_deduped),找出有多少個重複行。

得出,10行是完全重複的觀察結果。

我們應該怎麼做?

我們應該刪除這些重複數據。

(2)基於關鍵特徵的重複數據

如何發現基於關鍵特徵的重複數據?

有時最好根據一組唯一的標識符來刪除那些重複的數據。

例如,同一建築面積、同一價格、同一建築年份的兩個房產交易同時發生的可能性幾乎為零。

我們可以設置一組關鍵特徵作為交易的唯一標識符,包括timestamp、 full_sq、life_sq、floor、build_year、num_room、price_doc,我們會檢查是否有基於這些標識符的副本(重複記錄)。

基於這組關鍵特徵,共有16個副本,也就是重複數據。

我們應該怎麼做?

我們可以根據關鍵特徵刪除這些重複數據。

我們在名為df_dedupped2的新數據集中刪除了16個重複數據。

不一致的數據

讓數據集遵循特定的標準來擬合模型也是至關重要的。我們需要用不同的方法去探索數據,這樣就可以找出不一致的數據了。很多時候,這取決於細緻的觀察和豐富的經驗,並沒有固定的代碼用來運行和修復不一致的數據。

下面我們將介紹四種不一致的數據類型。

1、大小寫不一致

在分類值中存在著大小寫不一致的情況,這是一個常見的錯誤。由於Python中的數據分析是區分大小寫的,因此這就可能會導致問題的出現。

如何發現大小寫不一致?

先讓我們來看看特徵sub_area。

它用來存儲不同地區的名稱,看起來已經非常的標準化了。

但是,有時候在同一個特徵數據中存在著大小寫不一致的情況。舉個例子,「Poselenie Sosenskoe」和「pOseleNie sosenskeo」就可能指的是同一地區。

我們應該怎麼做?

為了避免這種情況的發生,我們要麼所有的字母用小寫,要麼全部用大寫。

2、數據格式不一致

我們需要實行的另一個標準化是數據格式。這裡有一個例子,是將特徵從字符串(String)格式轉換為日期時間(DateTime)格式。

如何發現不一致的數據格式?

特徵timestamp是以字符串的格式來表示日期的。

我們應該怎麼做?

我們可以使用下面的代碼進行轉換,並提取出日期或時間的值。之後,會更容易按年或月進行分組的交易量分析。

3、數據的分類值不一致

不一致的分類值是我們要討論的最後一種不一致數據的類型。分類特徵值的數量有限。有時候由於輸入錯誤等原因,可能會存在其它的值。

如何發現不一致的分類值?

我們需要仔細觀察一個特徵來找出不一致的值,在這裡,我們用一個例子來說明一下。

由於我們在房地產數據集中並不存在這樣的問題,因此,我們在下面創建了一個新的數據集。例如,特徵city的值被錯誤地定義為「torontoo」和「tronto」。但它們兩個都指向了正確的值「toronto」。

一種簡單的確認方法是模糊邏輯(或是編輯間隔,edit distance)。它衡量了我們需要更改一個值的拼寫用來與另一個值進行匹配的字母差異數量(距離)。

我們知道這些類別應該只有「toronto」、「vancouver」、「montreal」以及「calgary」這四個值。我們計算了所有的值與單詞「toronto」(和「vancouver」)之間的距離。可以看到,那些有可能是打字錯誤的單詞與正確的單詞之間的距離較小,因為它們之間只差了幾個字母而已。

我們應該怎麼做?

我們可以設置一個標準將這些錯誤的拼寫轉換為正確的值。例如,下面的代碼將距離「toronto」2個字母以內的所有值都設置為「toronto」。

4、地址數據不一致

地址特徵目前成為了我們許多人最頭疼的問題。因為人們經常在不遵循標準格式的情況下,就將數據輸入到資料庫中了。

如何發現不一致的地址?

我們可以通過查看數據來找到難以處理的地址。即使有時候我們發現不了任何問題,但我們還可以運行代碼,對地址數據進行標準化處理。

在我們的數據集中沒有屬於隱私的地址。因此,我們利用特徵address創建了一個新的數據集df_add_ex。

正如我們所看到的那樣,地址數據可是非常不規範的。

我們應該怎麼做?

我們運行下面的代碼,目的是將字母統一變成小寫的、刪除空格、刪除空行以及進行單詞標準化。

現在看起來好多了。

我們終於完成了,經過了一個很長的過程,清除了那些所有阻礙擬合模型的「dirty」數據。

原文連結:

https://towardsdatascience.com/data-cleaning-in-python-the-ultimate-guide-2020-c63b88bf0a0d

本文為 CSDN 翻譯,轉載請註明來源出處。

【End】

《原力計劃【第二季】- 學習力挑戰》正式開始!即日起至 3月21日,千萬流量支持原創作者,更有專屬【勳章】等你來挑戰

相關焦點

  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python視頻教程 2020年07月08日 11:00作者:黃頁編輯:黃頁 本課程為
  • 數據科學(Data Science)自學指南 2020 版(一)
    編者按:數據科學家是21世紀最性感的職業。我學的不是這個專業,真可惜。沒關係,中途上車還來得及。一位化學工程專業的畢業生拿到的第一份工作就是數據分析師。他是怎麼做到的?自學。他是怎麼自學的呢?且看Travis Tang的詳細介紹。原文發標題是:How to Teach Yourself Data Science in 2020
  • Python和R之間轉換的基本指南:有效學習另一種語言的簡單方法
    Python和R之間轉換的基本指南這裡介紹的方法與我們自學習外語的時候使用的方法是有共同之處的,例如我們要學習英語,可以使用以下三個關鍵的練習幫助我從笨拙地將中文單詞翻譯成英語,轉變為直接用英語思考和回答(英語思維)。把新的英語單詞和我已經知道的中文單詞關聯起來。把英語和中文的單詞作比較,使我能很快地領會這個生詞的意思。
  • 掌握了這24個頂級Python庫,你就是大神!
    因此,本文介紹了24種涵蓋端到端數據科學生命周期的Python庫。文中提及了用於數據清理、數據操作、可視化、構建模型甚至模型部署(以及其他用途)的庫。這是一個相當全面的列表,有助於你使用Python開啟數據科學之旅。
  • 數據工程師需要掌握的 18 個 Python 庫
    所以使用 pip install Twisted-18.9.0-cp37-cp37m-win32.whl 來安裝,然後使用pip install scrapy 來安裝scrapy就可以了數據獲取Beautiful SoupBeautiful Soup也是一個從網站爬取數據的庫,他提供一些簡單的、python式的函數用來處理導航、搜索、修改分析樹等功能。
  • Python數據類型串講(中)
    2、列表在對序列有了大體的認識後,現在開始介紹序列中最具代表性的數據類型——列表。python中列表以中括號'[ ]'為標識,將一個或多個元素(以逗號分隔)括起來為一個列表,其元素可以為python中任意一種數據類型包括列表本身,且各元素不需要具備相同的數據類型。
  • 2020版《中國2型糖尿病防治指南》重磅發布!九大更新要點搶先知 |...
    導讀:《中國2型糖尿病防治指南(2020版)》重磅發布,九大更新要點搶先知! 2020年11月25-27日,中華醫學會糖尿病學分會第二十四次全國學術會議(CDS)在蘇州市以線上線下相結合的形式火熱召開。《
  • python數據類型總結——列表
    python用列表或元組來幫助我們。python列表一系列元素組成一個集合,可能通過索引,對每個元素進行訪問。這種數據類型統稱為序列。在python中,字符串就是一種序列。列表遍歷這種遍歷也可以用於字符串,如下:字符串遍歷python
  • 數據科學的Python軟體包
    巨大的社區支持Python具有廣泛的社區支持之一,在dev op社區上存在各種活躍的論壇,python開發人員在該論壇上發布他們的錯誤,而社區則試圖幫助他們。各種用於數據科學的Python庫到目前為止,我們已經介紹了什麼是數據科學以及為什麼要使用Python,現在讓我們討論可用於數據科學的各種python庫。1.
  • 代碼詳解:Python正則表達式的終極使用指南
    全文共8032字,預計學習時長16分鐘處理文本數據的一個主要任務就是創建許多以文本為基礎的特性。人們可能想要在文本中找出特定格式的內容,比如找出存在於文本中的電子郵件,或者大型文本中的電話號碼。雖然想要實現上述功能聽起來很繁瑣,但是如果使用Python正則表達式模塊,就可以使這一操作更加簡單。
  • 《神界:原罪2》終極版發布 Steam版免費升級至終極版
    0今日《神界:原罪2》終極版登陸PS4和Xbox One平臺。除此之外,終極版還以補丁形式免費更新Steam版,更新大小為8.2GB。 終極版更新了競技場模式,增加新地圖,新劇情新物品,劇情模式等。終極版還對遊戲界面和內存佔用進行了優化,調整了任務和技能。《神界:原罪2》終極版除了繼承遊戲本體自帶的內容,還支持本地雙人,聯機最多支持四人的合作模式。針對主機手柄,專門重新設計了UI部分,智能同/分屏。在新版中,玩家可以直接進入好友的對戰來開啟快速戰鬥,享受PVP對決的快感。
  • Python輸出數據print,獲取輸入數據input,基礎入門
    python的輸入和輸出一、print輸出print 默認輸出是換行的,如果要實現不換行需要在變量末尾加上 end=""如:print把內容輸出到文件二、input輸入print是輸出,input接收鍵盤的輸入input()函數,是python的內置函數,接收任意數據類型的輸入,將所有輸入的數據,定義為字符串來進行處理
  • python海量數據快速查詢的技巧
    對於小文件而言,這樣的操作編碼簡單,運行速度也比較滿意,但是對於大型資料庫而言,將資料庫存為字典這個動作是非常耗費時間的,而且每次運行代碼都要執行這樣的操作,導致效率大大降低。想要改善這一狀況,有以下兩種解決辦法1.
  • Python基礎學習之常用六大數據類型
    剛開始學習一門程式語言,除了了解運行環境與語言類型之外,最基本還是從該語言的基本數據類型開始學起。Python六大常用數據類型: int 整數 float 浮點數 str 字符串 list 列表 tuple 元組 dict 字典講解這些先說一下python中的變量與變量名。
  • 超硬核的 Python 數據可視化教程!
    matplotlibpython中最基本的作圖庫就是matplotlib,是一個最基礎的Python可視化庫,一般都是從matplotlib上手Python數據可視化,然後開始做縱向與橫向拓展。Seaborn是一個基於matplotlib的高級可視化效果庫,針對的點主要是數據挖掘和機器學習中的變量特徵選取,seaborn可以用短小的代碼去繪製描述更多維度數據的可視化效果圖其他庫還包括Bokeh(是一個用於做瀏覽器端交互可視化的庫,實現分析師與數據的交互);Mapbox(處理地理數據引擎更強的可視化工具庫)等等本篇文章主要使用
  • 13個小案例輕鬆認識python
    python流行一段時間了,開始的就感覺只是一種新的語言罷了,可是這個世界總是對新事物非常尊崇,平時用的不多,看起來也沒多大動力,結合著平時講VB(信息技術《算法與程序設計》9講)的套路,用案例簡單自學下python,這13個小案例不像網絡上的圖形處理等那麼酷炫,不能做出酷炫的作品,也沒有涉及基礎的算法,但也是python的基礎吧
  • 《銀河系漫遊指南》宇宙的終極答案
    在作品中,一個古老而先進的文明,為了探求「宇宙、生命和萬物存在的終極答案」而建造了一臺超級計算機。在漫長的歲月長河中,這個文明經歷了興衰迭起,唯獨這個超級項目始終被維護著。《銀河系漫遊指南》是根據道格拉斯·亞當斯的科幻小說《銀河系漫遊指南》改編。二戰之後,百廢待興的1952年,道格拉斯·亞當斯出生在英國劍橋一個衣食無憂但家庭關係相對複雜的家庭。
  • 初學者如何用「python爬蟲」技術抓取網頁數據?
    網絡爬蟲,也叫作網絡數據採集,是指通過編程從Web伺服器請求數據(HTML表單),然後解析HTML以提取所需的數據。2、為什麼要懂HTMLHTML是一種用於創建網頁的標記語言,該網頁嵌入了諸如文本和圖像之類的數據,這些數據可以被瀏覽器讀取並呈現為我們看到的網頁。這就是為什麼我們首先爬網HTML,然後解析數據的原因,因為數據隱藏在HTML中。
  • 《神界:原罪2》終極版強制加載MOD方法說明
    《神界原罪2》終極版有著更好的畫面和更加完善的機制
  • 行上行下|2020年腦科學技術乾貨合集
    乾貨 | 腦電-超掃描數據分析16. 實現EEG功能連接的可視化17. 人類大腦連接的網絡可視化工具18. 使用Cartool工具包分析EEG源成像?19. HyPyP包:超掃描可視化python包20. 用行為數據處理EEG數據事件碼21. 自動刪除休息階段的腦電數據?22.