天天看點

一文教你如何正确地清理資料

作者:BigQuant

本文摘要

資料清理是耗時的,但是是資料分析過程中最重要和最有價值的部分。沒有清理資料,資料分析過程是不完整的。

但是如果我們跳過這一步會發生什麼呢?

假設我們的價格資料中有一些錯誤的資料。不正确的資料在我們的資料集中形成異常值。我們的機器學習模型假設這部分資料集(也許特斯拉的價格确實在一天之内從50美元跳到了500美元)。你現在知道分析的最終結果了吧。

機器學習模型給出了錯誤的結果,沒有人希望這樣!由于預測的方式是錯誤的,你必須從頭開始分析,再一次!是以,資料清理是分析的一個重要部分,不應該被忽略。

文章目錄

這個部落格将帶你通過整個過程的資料清理,并提供解決方案的一些挑戰面臨這個過程。

  • 什麼是資料?
  • 各種資料來源
  • 原始資料和處理過的資料是什麼樣子的?
  • 資料清理的好處
  • 高品質資料的特點
  • 資料清理術語
  • 清理資料的步驟
  • 了解你的資料
  • 資料清理中需要解決的基本問題
  • 交易資料清理
  • 已經存在的軟體
  • 學習資料清理的資源
  • 常見問題

什麼是資料?

資料科學是當今最受追捧的職業之一。那麼讓我從回答這個古老的問題開始——什麼是資料?根據維基百科,“資料是關于一個或多個人或物體的定性或定量變量的價值集合,通過觀察收集。”。

考慮一個包含不同種類水果運輸資訊的資料集。

一文教你如何正确地清理資料

資料集中的一些變量可能是定性的,例如水果的名稱、顔色、目的地和起源國、顧客的回報(失望、内容、滿意)或定量的,例如水果的成本、運輸成本、裝運重量、裝運成本和裝運水果的數量。

其中一些變量可能來自其他較低層次的變量。在這個例子中,運輸成本來源于水果和運輸成本變量的成本。

一文教你如何正确地清理資料

這些定量變量也可分為連續和離散兩類。顧名思義,連續變量在數行上是連續的,可以假定任何實值。離散變量可能隻有特定的值,通常是整數。貨物的重量将是一個連續的變量,而如果我計算每一批水果的數量,它将是一個離散的變量。

定性變量可以分為名義變量和序數變量。名義變量或無序變量是一種标簽變量,這些标簽沒有定量值。例如,水果的顔色或貨物的目的地可能是名義上的變量。序數變量或有序變量是那些标簽具有定量值的變量,即它們的排序問題。在水果的資料庫中,客戶回報将是一個有序的變量。

大多數人認為資料科學是傳遞非常準确和精确資訊的漂亮的圖表和圖表。然而,大多數人沒有意識到生成這些數字的過程是必要的。

資料分析流水線由5個步驟組成。

原始資料-> 處理腳本-> 整理資料-> 資料分析-> 資料通信

通常,管道的前三個步驟被忽略了。初學者直接跳到資料分析步驟。任何公司或學術研究都将緻力于擷取他們的資料并在内部進行預處理。是以,你會想知道如何擷取原始資料,清潔和預處理它自己。

這個部落格将涵蓋所有關于清潔和擷取資料進行分析的内容。

各種資料來源

首先,讓我們讨論從哪裡可以獲得資料的各種來源。最常見的來源可能包括來自資料提供網站的表格和電子表格,如 Kaggle 或加州大學歐文分校機器學習知識庫或原始 JSON 和文本檔案獲得刮網絡或使用 API。那個。Xls 或。來自 Kaggle 的 csv 檔案可能會被預先處理,但原來的 JSON 和。需要處理 txt 檔案以獲得某種可讀格式的資訊。詳細的資料提取方法可以在這裡找到。

原始資料和處理過的資料是什麼樣子的?

理想情況下,您希望您的幹淨資料是這樣的:

一文教你如何正确地清理資料

每列隻有一個變量。在每一行中,您隻有一個觀察結果。它被巧妙地組織成一個矩陣形式,可以很容易地在 Python 或 R 中導入,以執行複雜的分析。但通常情況下,原始資料不是這樣的。它看起來像這樣:

一文教你如何正确地清理資料

資料多的讓人頭皮發麻...

這是使用 Twitter API 傳遞查詢的結果,以獲得喬•拜登(Joe Biden)過去的20條推文。您還不能對這些資料執行任何形式的分析。

稍後我們将詳細讨論原始和整潔資料的元件。

資料清理的好處

一文教你如何正确地清理資料

如上所述,一個幹淨的資料集對于産生合理的結果是必要的。即使希望在資料集上構模組化型,檢查和清理資料也可以指數級地提高結果。向模型輸入不必要或錯誤的資料會降低模型的準确性。一個更清晰的資料集會給你一個比任何花哨的模型更好的分數。一個幹淨的資料集還将使您組織中的其他人将來更容易處理它。

高品質資料的特點

在執行資料清理之後,您至少應該具有以下這些東西:

  • 你的原始資料
  • 幹淨的資料集
  • 描述資料集中所有變量的代碼本
  • 一個指令表,包含對原始資料執行的所有步驟,這些步驟産生了幹淨的資料

當資料滿足以下要求時,我們可以說資料是最原始的形式:

  • 沒有軟體應用到它,因為它已經交給它
  • 沒有對資料執行任何操作。
  • 未執行摘要
  • 未從資料集中移除任何資料點

處理後的資料,它應該滿足這些要求:

  • 每一行應該隻有一個觀察
  • 每列應該隻有一個變量
  • 如果資料存儲在多個表中,請確定這些表之間至少有一列是通用的。這将幫助您在需要時一次從多個表中提取資訊。
  • 在每個列的頂部添加一行,其中包含變量的名稱。
  • 盡量使變量名易于閱讀。例如,使用 Project _ status 而不是 pro _ stat
  • 處理過程中使用的所有步驟都應記錄下來,以便從一開始就可以重制整個過程

對于第一次看到你的資料的人來說,這個代碼本是必要的。它将幫助他們了解資料集的基本形式和結構。它應該包含:

  • 關于變量及其機關的資訊。例如,如果資料集包含一個公司的收入,一定要提到它是以百萬還是以十億計的貨币。
  • 關于總結方法的資訊。例如,如果年收入是變量之一,請提及你用什麼方法得出這個數字,是收入的平均值還是中值。
  • 提及你的資料來源,無論是你自己通過調查收集的還是從網上獲得的。這樣的話,也提一下網站。
  • 一種常見的格式是. doc、 . txt 或标記檔案(. md)。

指令表是確定你的資料和研究是可重複的。使用指令表資料社群的其他資料科學家可以驗證你的結果。這增加了你研究的可信度。確定包括:

  • 電腦腳本
  • 這個腳本的輸入應該是原始資料檔案
  • 輸出應該是經過處理的資料
  • 腳本中不應該有使用者控制的參數

資料清理術語

  1. 聚合:使用多個觀察值來提供某種形式的變量的摘要。常用的聚合函數有。總額() ,。平均()等。Python 提供了。可以同時執行多個函數的聚合()函數。
  2. Append:Append暗示垂直連接配接或堆棧兩個或多個資料架構、清單、系列等。使用函數追加資料架構。
  3. 插補:一般統計學家将插補定義為填補缺失值的過程。我們将在後面的部落格中更詳細地讨論插補。
  4. Deduping:Deduping 是從資料集中删除重複觀察值的過程。本部落格稍後将對此進行更詳細的讨論。
  5. 合并:合并和附加是資料清理中最令人困惑的術語。合并兩個資料架構還包括将它們連接配接在一起。這裡唯一的差別是我們橫向連接配接它們。例如,如果我們有兩個資料集,一個包含使用者的 Facebook 資料,另一個包含使用者的 Instagram 資料。我們可以根據使用者使用的 email id (兩個資料集中的公共列)合并這兩個資料集,因為這對某個使用者來說很可能是公共的。
  6. 縮放:縮放或标準化是縮小一個特性的範圍并使其介于0和1之間的過程。這是用來準備的資料,以建立一個機器學習模型上。機器學習算法算法給高值賦予較高的權重,給低值賦予較低的權重。縮放将處理這種值的高度變化。
  7. 解析:是将資料從一種形式轉換為另一種形式的過程。在部落格的前面,我們研究了來自 Twitter API 的原始資料。這些資料的原始形式是沒有用的,是以我們需要解析它。我們可以将每條 tweet 作為一個觀察值,将 tweet 的每個特性作為一個專欄。這将使資料以表格的形式顯示和可讀。

清理資料的步驟

有幾個步驟,如果遵循得當,将確定一個幹淨的資料集。

  1. 好好看看你的資料,了解其中發生的基本問題
  2. 列出所有的基本問題并分析每一個問題。盡量估計問題的根源
  3. 清理資料集并再次執行探索性分析
  4. 檢查清潔後的問題

了解你的資料

接收資料時要執行的第一個步驟之一是了解所收到的資料。了解資料集包含什麼——其中的變量、它們的類型、缺失值的數量等等。在本部落格中,我們将使用銀行的合成客戶交易資料。這裡提供資料集。

首先,讀取 excel 檔案并使用. head ()和. info ()方法擷取資料架構的摘要。

import pandas as pd
import numpy as np
df=pd.read_excel('ANZ_synthesised_transaction_dataset.xlsx')
df.head()           

.head()方法将向您展示前5行

一文教你如何正确地清理資料

Info ()

Info ()方法将提供 DataFrame 的簡明摘要。

一文教你如何正确地清理資料

您将得到類似于下面這樣的輸出。這将顯示列名、每個列中非空值的數量以及每個列的資料類型。

盡管這會間接顯示每列中的空值,但您還可以使用。是的。Sum ()擷取每列中的空觀察值數。

. isna ()将傳回一個布爾數組。如果觀察值為空,則傳回1; 如果觀察值不為空,則傳回0。

() . sum ()

一文教你如何正确地清理資料

您還可以使用. only ()在特定列中找到唯一值

為了觀察移動列中的唯一值,我們使用-

Movement.only ()

一文教你如何正确地清理資料

這些步驟應該讓您對必須對資料進行哪些清理有一個基本的了解。

資料清理中需要解決的基本問題

在原始資料中看到的一些基本問題是:

缺失值處理

有時在資料集中,您會遇到丢失或為空的值。這些缺失的值可能會影響機器學習模型,并導緻它給出錯誤的結果。是以,我們需要适當地處理這些缺失的值。這個問題可以通過多種方式解決:

  1. 處理這個問題最簡單的方法就是忽略缺少值的觀測值。這是可行的,隻有當缺失的觀察彌補了整個資料集的一小部分。忽略大量的觀察結果可能會縮短資料庫并得出錯誤的結果。這可以通過使用 df.drona ()方法實作。
  2. 另一種方法是估算缺失的值。這意味着您可以确定哪個值可能是丢失的值。這可以通過取變量的平均值/中值或找到類似的觀察值并相應地計算缺失值來完成。隻有在正态分布的情況下才應該使用均值,也就是說,資料沒有傾斜。在資料有偏差的情況下,應使用中位數。這可以通過使用 df.filna ()方法來完成。
  3. 有時缺少的值本身可能表示某些資料。例如,有些人可能不願意與任何性别保持一緻。這些觀察結果不能被歸類為缺失。在這種情況下,最好的辦法就是讓這些觀察結果保持原樣。

重複的價值觀

資料集中可能有重複的值。這可能是由于收集資料時的人為錯誤造成的,也可能是在合并來自不同來源的資料集時發生的。處理它的最佳方法是删除重複的值。這可以通過使用 df.drop _ double ()方法來完成。

離群值

一文教你如何正确地清理資料

離群值是指對于列來說異常大或小的值。它們與平均值的偏差遠遠大于變量的标準差。然而,“大得多和小得多”這樣的術語是非常模糊的,并沒有提供一個普遍的價值來考慮一個觀察作為一個離群值。

一般來說,如果一個值超過1.5 * IQR,那麼它就是一個異常值。 IQR 表示四分位間距。

例如,如果 IQR 為100,Q1和 Q3值分别為50和150。是以,如果觀測值低于 Q1-1.5 * IQR,即低于50-1.5 * 100 = -100,那麼觀測值就是異常值。高于 Q3 + 1.5 * IQR 的值也是異常值。

一些機器學習模型,比如回歸,容易受到異常值的影響。是以,它們應該被删除,但隻有在徹底審查了異常值的原因之後。

字元串清理

字元串變量中可能出現不規則現象。這些情況可能是由于人為錯誤或從不同來源收集資料時發生的。它們涵蓋的範圍很廣,可能因資料的不同而有所不同。解決這個問題的方法也因使用者而異。這通常取決于問題本身。最常見的錯誤是拼寫錯誤和不同格式的書寫相同的意見。拼寫錯誤很難解決。如果它們的數量很少,可以通過搜尋觀察結果手動完成。如果拼寫錯誤引起大問題,可以通過使用模糊比對來找到它們。第二個問題可以通過在 python 中使用 regex 庫來解決。它使用部分比對來查找和替換。它還可用于标準化,以删除特殊字元,并在字元串中隻保留字母數字字元。

比如說,

import regex as re

x='abc[#4 6a}'

x=re.sub(r"[^a-zA-Z0-9\s]","",x)

x

一文教你如何正确地清理資料

這裡我們可以看到這個表達式 re.sub (r“[ ^ a-zA-Z0-9 s ]”,“”,x)删除了所有不是字母數字或空格的字元。是以我們可以使用 regex 來執行模式比對。

标準化

資料的标準化意味着将所有的觀測結果放在同一類型的一個變量中。對于一個數值變量,確定所有的觀測值具有相同的機關。一定要在欄名或代碼本中提到度量機關。

字元串變量必須都是大寫或小寫,因為這使得它們在任何時候都更容易搜尋。

日期應為 DateTime 格式。它是日期和時間的普遍使用和首選格式。對于人工解釋,日期要麼以 dd/mm/yyyy 格式提及,要麼以 mm/dd/yyyy 格式提及,所使用的格式也必須提及。

交易資料清理

交易資料中的一個主要問題是 DateTime 違規。資料中的日期和時間應該采用 Python 中的 datetime 格式。如果需要,可以更容易地從列中提取單獨的日期和時間。在銀行事務資料集中,日期列已采用日期時間格式。是以,我們将處理資料集中的提取列。要将列轉換為 datetime,請使用 panas.To _ datetime ()函數。

import datetime as dt

df.extraction=pd.to_datetime(df.extraction)

df.extraction

一文教你如何正确地清理資料

這裡您可以看到資料類型是 datetime64。

您可以對 datetime 對象進行大量操作。

這裡有一些例子-

df.extraction.dt.day_name() #will return day of the week

一文教你如何正确地清理資料

df.extraction.dt.hour #returns the hour of the day

一文教你如何正确地清理資料

df.extraction.dt.quarter #returns which quarter of the year is it

一文教你如何正确地清理資料

df.extraction.dt.minute # returns minute of the hour

一文教你如何正确地清理資料

日期時間庫是廣泛而有用的,特别是在處理時間序列時。日期時間的詳細函數可以在這裡找到。

先前存在的軟體

當最近的最後期限迫在眉睫時,所有這些步驟也可能變得相當乏味。在這種情況下,有某些軟體和網站,将執行所有這一切為您! !這裡有一個全面的網站清單,你可以通路,使您的工作更容易。

學習資料清理的資源

有關資料清理方法和實踐的更多深入資訊,這裡有一些有用的連結-

  • 資料清理: 問題和目前的方法
  • 有效資料清理終極指南(免費電子書)
  • 資料科學程式設計(免費電子書)
  • Jeff Leek 的 GitHub 知識庫
  • 金融資料科學與特征工程 | Ernest P. Chan 博士 | QuantInsti Quantra

常見問題

資料清理、資料挖掘和資料争吵之間的差別是什麼?

資料清理是清除或糾正不準确或不完整資料的過程。上面讨論的不同技術可用于執行資料清理。另一方面,資料挖掘是從幹淨的資料中提取有價值的資訊并從中得出推論的過程。資料清理和資料挖掘的整個過程,如果同時進行,就稱為資料争吵。

什麼是可重複的資料? 為什麼它很重要?

可重複的資料意味着,如果其他人對同一資料使用相同的處理過程,那麼他們必須得出相同的結論,你的資料處理方法必須以這種方式記錄。為此,不能手動對原始資料進行任何更改。原始資料的副本必須儲存,以供他人使用。這樣做将確定您的資料集是可信的,并且其他人可以信任它們的使用。

什麼是可靠和免費的資料源?

其中一種收集資料的方法是從網站上擷取原始文本資料,然後進行清理。另一種方法是從 Kaggle、 UCI 機器學習資料庫和政府官方網站等網站擷取資料。這裡的一篇非常有用的文章包含了一個資料集的綜合清單。其他網站包括:

  • FiveThirtyEight
  • BuzzFeed News
  • Socrata
  • Awesome-Public-Datasets on Github
  • Google Public Datasets
  • Academic Torrents
  • Quandl
  • Jeremy Singer-Vine

結論

總之,資料清洗是資料處理流水線的重要組成部分。沒有它,分析和機器學習模組化将失敗,并給出誤導性的結果。我們已經讨論了如何使資料集“幹淨”以及在處理資料時的注意事項。我們現在知道如何計算空值、處理重複值和異常值、标準化資料和處理誤導性字元串。您還可以使用預先存在的軟體自動清理您的資料!

正如一句流行的諺語所說,“清潔僅次于虔誠”,讓你的資料保持清潔,進而使你的結果保持幹淨。

繼續閱讀