臟數據就是在物理上臨時存在過,但在邏輯上不存在的數據。
數據清洗是整個數據分析過程的第一步,就像做一道菜之前需要先擇菜洗菜一樣。 數據分析師經常需要花費大量的時間來清洗數據或者轉換格式,這個工作甚至會佔整個數據分析流程的80%左右的時間。
在這篇文章中,我嘗試簡單地歸納一下用Python來做數據清洗的7步過程,供大家參考。
一、數據預處理
一、數據預處理
- 部署環境,導入分析包和數據
#導入數據分析包
import pandas as pd
import numpy as np
#導入csv數據
#dtype = str,最好讀取的時候都以字元串的形式讀入,不然可能會使數據失真
#比如一個0010008的編號可能會讀取成10008
fileNameStr = ./Actual transactions from UK retailer.csv
DataDF = pd.read_csv(fileNameStr,encoding = "ISO-8859-1",dtype = str)
# encoding = "ISO-8859-1" -- 用什麼解碼,一般會默認系統的編碼,如果是中文就用 "utf-8"
DataDF = pd.read_csv(fileNameStr,encoding = "utf-8",dtype = str)
2. 嘗試去理解這份數據集
我們可以通過對數據集提問來判斷這份數據能不能滿足解答我們的問題,數據是否乾淨需不需要進一步處理,問題包括但不限於:
數據集多少數據?
包含了什麼欄位?欄位格式是什麼?欄位分別代表什麼意義欄位之間的關係是什麼?可以用做什麼分析?或者說能否滿足了對分析的要求?有沒有缺失值;如果有的話,缺失值多不多?現有數據裡面有沒有臟數據?尤其需要注意人工輸入的數據,經常會出現名稱寫錯,多輸入空格等等的情況
3. 下面我們就結合代碼來看一下數據
#1 從宏觀一點的角度去看數據:查看dataframe的信息
DataDF.info()
也可以用這兩條來看:
#1.1查看每一列的數據類型
DataDF.dtypes
#1.2有多少行,多少列
DataDF.shape
# 2.檢查缺失數據
# 如果你要檢查每列缺失數據的數量,使用下列代碼是最快的方法。
# 可以讓你更好地瞭解哪些列缺失的數據更多,從而確定怎麼進行下一步的數據清洗和分析操作。
DataDF.isnull().sum().sort_values(ascending=False)
# 3.是抽出一部分數據來,人工直觀地理解數據的意義,儘可能地發現一些問題
DataDF.head()
可以看到:
1)Country和UnitPrice都出現了NaN值,需要去掉
2)InvoiceDate的時間出現具體時分,可以刪去
3)Description大概率是人工填寫的數據,一般都會有比較多格式問題。
猜測會存在有標點符號摻雜/大小寫不一致等問題,所以進一步這些人工填寫數據的去重項拎出來研究一下
# 查看這個商品名稱的去重項
DataDF[Description].unique()
# 設置輸出全部的內容
# threshold就是設置超過了多少條,就會呈現省略
#(比如threshold=10的意思是超過10條就會省略)
np.set_printoptions(threshold=np.inf)
發現有很多空格的問題
根據第一步數據預處理後,整理一下該數據集有下列問題需要處理:
1)調整數據類型:由於一開始用到了str來導入,打算後期再更換格式,需要調整數據類型。
2)修改列名:該數據的名稱不易於理解,需要改列名
3)選擇部分子集:因為有部分列在數據分析中不需要用到
4)可能存在邏輯問題需要篩選:比如Unit Price為負
5)格式一致化:Description可能會存在有標點符號摻雜/大小寫不一致/空格重複出現等問題
6)消滅空值:CustomerID、Description、Country和UnitPrice都出現了NaN值,需要去掉
於是下面就開始後續的數據清洗6步
二、調整數據類型