脏数据就是在物理上临时存在过,但在逻辑上不存在的数据。
数据清洗是整个数据分析过程的第一步,就像做一道菜之前需要先择菜洗菜一样。 数据分析师经常需要花费大量的时间来清洗数据或者转换格式,这个工作甚至会占整个数据分析流程的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步
二、调整数据类型