這篇文章把數據講透了(三):數據清洗
編輯導讀:隨著“數智化”時代的到來,我們生活中的方方面面都離不開數據,而你真的了解數據嗎?本文將為你重新解讀數據的概念和價值,以及數據的價值是如何在“數智化”時代下一步一步得到運用與升華的;因內容頗多,筆者將分幾期為大家進行講解。
一、前言
上兩期文章中,我們已經了解到“數據”是一個龐大的體系(如下圖所示);并用了菜市場的例子,為大家講解數據來源的含義,用買菜的例子,為大家講解數據采集的步驟;而今天小陳主要給講解,我們“買完菜”以后,怎樣進行擇菜、洗菜,即數據清洗的過程。
二、數據清洗(擇菜、洗菜)
想一步步了解數據清洗究竟是怎樣如何運作的,首先我們需要明確數據清洗的概念是什么?
1. 數據清洗的基本概念與重要性
數據清洗——重新檢查和驗證數據的過程,旨在刪除重復信息,糾正現有錯誤并提供數據一致性。
以上,是百度百科對數據清洗的概念定義。以我個人的理解來看,數據清洗就是一個將“臟數據”替換成“高質量可用數據“的過程。
畢竟,數據清洗作為數據預處理中至關重要的環節,清洗后數據的質量很大程度上決定了后續研究型數據分析的結果準確性。
2. 數據清洗的對象與方法實操
以上陳述了數據清洗的重要性,下面我們來進一步確定,需要被清洗的對象。
數據清洗的對象我個人將其大致分兩類,下面我們逐一進行介紹。
1)可避免型臟數據
可避免型臟數據,顧名思義,這類臟數據可以直接通過簡單處理成為有效數據或人為修改避免的。
這類臟數據在日常生活中,其實是十分常見的,例如命名不規范導致的錯誤、拼寫錯誤、輸入錯誤、空值等等。
舉個例子,下面是某二手車平臺的相關數據(文件名:car-data.xlsx),可以看到,圖中4年轉售價欄中存在明顯的臟數據(該欄數據形式應為阿拉伯數字,單位為萬),這就是輸入錯誤導致的可避免型臟數據。
認識了此類臟數據的類型,那么我們在拿到數據后,如何及時的對此類“可修正”的數據錯誤進行偵察訂正呢?此處我們分別以excel、python為例,數據集還是上面二手車數據。
excel中,對“可避免型”臟數據的偵察,可以通過篩選功能進行查看,如下,選中“4年轉售價”維度的數據,并對其進行篩選,可以偵察到nan(空)值2個,輸入錯誤值2個。
python語言中,則可以試用data.describe()查看目標列的基本統計信息:
查看對應信息后,若確定由錯別字,英語大小寫不統一的情況可以使用:data[‘car-data’].str.upper() ;輸入了額外的空格:data[‘car-data’].str.strip()。
2)不可避免型臟數據
不可避免型臟數據,主要形式包括異常值、重復值、空值等;此類臟數據的處理,就需要聯系一些統計學知識進行偵察與填補,下面還是舉一些具體例子進行闡述。
異常值:
常用偵察手段3σ定律檢驗(假設一組檢測數據只含有隨機誤差,對其進行計算處理得到標準偏差,按一定概率確定一個區間,認為凡超過這個區間的誤差,就不屬于隨機誤差而是粗大誤差,含有該誤差的數據應予以剔除,一般而言這個區間是平均值正負三個標準差,因此稱3σ定律)。
如下所示,二手車數據中需要對“車寬”的異常值進行檢驗:
重復值:
如下所示,拿到數據后,我們先要校驗一下是否存在重復記錄;如果存在重復記錄,python中可以使用 drop_duplicates() 來刪除重復數據,以免重復計入,導致數據準確性下降。
如上所示,第5和第9條數據,除id信息外,其余信息均相同,對此類數據我們需要根據它們的數據特征進行刪除;而觀察下方數據,有FIRST NAME和LAST NAME作為獨一無二的標識,我們就能根據數據特征利用下方代碼對重復值進行剔除。
df.drop_duplicates([‘first_name’,’last_name’],inplace=True)
空值:
針對空值而言,python語言有多種方式對空值進行偵察返回,下面我們逐一介紹。
data.is null()、data.not null(),會返回true or false,我們就能得知對應指標的空值情況,還能用sum()函數,對空值的總體個數進行把控。
面對以上各類空值,我們應該怎么做呢?刪除單個?刪除多個?利用平均值、中位數進行補充?
其實以上的操作方法,在應對空值時都是十分常見的,而我們需要掌握的是,在合適的場景使用對應的方式,下面為大家介紹一些常見的空值處理場景~
場景1:該維度數據,半數以上or全為為空值——從指標有效性角度出發考慮,是否刪除對應指標。
命令:data.dropna(how=’all’),刪除全為空值的行(無效指標)。
場景2:該維度存在空值(但空值數量不多),且總體數據樣本量大——因為數據樣本充足,可以考慮對存在nan值的樣本進行過濾,采用無nan值樣本(代碼如下,涉及nan值的數據都會被剔除)。
df.dropna(axis=0,how=’any’) #drop all rows that have any NaN values。
場景3:該維度存在空值(但空值數量不多),且樣本總體數量有限,故而不能像場景2一樣,對有nan值的數據進行拋棄,需要利用數理統計方法,選取合適值對nan值進行填充。
代碼:data.fillna(我們可以看到此例中,使用均值對空值進行填充)。
三、結語
本期,筆者通過一個“洗菜、擇菜”的例子,帶著大家了解了數據清洗的對象與大體方法,相信大家有所收獲!
下期,筆者講在數據清洗的基礎上,為大家講解如何利用常用工具進行數據挖掘!
本文由 @小陳同學ing. 原創發布于人人都是產品經理,未經作者許可,禁止轉載。
題圖來自Unsplash,基于CC0協議。
這個是應該產品做的嗎?