如果说抓取数据是数据分析的第1步,那么数据清洗就是数据分析的第2步,那么为什么要进行数据清洗呢?如何进行数据清洗呢?本文会先简单介绍一下什么是数据清洗,然后会对我们抓取的天猫商城和京东商城胸罩销售数据进行数据清洗。
数据清洗是指发现并纠正数据中可识别的错误或让数据更加规范的最后一道程序,包括检查数据一致性,处理无效值和缺失值,以及统一数据格式、转换数据格式等。与网上阅卷审核不同,数据清洗一般是由计算机程序而不是人工完成。
数据清洗从名字上也看的出就是把“脏”的“洗掉”,指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。因为数据仓库中的数据是面向某一主题的数据的集合,这些数据从多个业务系统中抽取而来而且包含历史数据,这样就避免不了有的数据是错误数据、有的数据相互之间有冲突,还有的数据的格式不是我们想要的,这些数据统称为“脏数据”,我们要按照一定的规则把“脏数据”洗掉,这就是数据清洗,而数据清洗的任务是过滤和处理那些不符合要求的数据,最后将处理结果交给下一个工序:数据分析。
下面看一下数据清洗的主要类型。
(1)残缺数据
这一类数据主要是一些应该有的信息缺失,如供应商的名称、分公司的名称、客户的区域信息缺失、业务系统中主表与明细表不能匹配等。对于这一类数据过滤出来,按缺失的内容分别写入对应的数据库字段或文件即可。
(2)错误数据
这一类错误产生的原因是抓取数据后没有进行判断直接写入后台数据库造成的,比如数值数据变成全角数字字符、字符串数据后面有一个回车操作、日期格式不正确、日期越界等。这一类数据也要分类,对于类似于全角字符、数据前后有不可见字符的问题,只能通过写 SQL 语句的方式找出来,然后再按要求更新回数据库即可。日期格式不正确的或者是日期越界的这一类错误可能会导致程序失败,这一类错误需要根据实际情况利用 SQL 重新修改。
(3)重复数据
对于这一类数据,需要将重复数据记录删除,或加上重复标记。
(4)数据格式不一致
这类数据也非常常见,如本例中的胸罩颜色、罩杯支持、上胸围尺寸等数据,每个店铺可能都不相同,对于这类数据,需要将数据格式进行统一,统一标准可以根据实际情况而定。
上面简单介绍了什么数据清洗,下面来看一下如果清洗胸罩销售数据。
如果读者使用前面介绍的方法从天猫和京东抓取了胸罩销售数据,现在我们已经有了一个 SQLite 数据库,里面有一个t_sales
表,保存了所有抓取的数据,如图1所示。
图1 保存到数据库中的胸罩销售数据
从销售数据可以看出,网络爬虫抓取了颜色(Color)、尺寸(Size)、来源(Source)、评论(Discuss)和时间(Time)五类数据,当然还可以抓取更多的数据,这里只为了演示数据分析的方法,所以并没有抓取那么多的数据。
不过这五类数据有些不规范,本项目只考虑 Color 和 Size,所以先要对这两类数据进行清洗,由于每个店铺,每个商品的颜色叫法可能不同,所以需要将这些颜色值统一一下。例如,所有包含“黑”的颜色值都可以认为是黑色,所以可以新建立一个 color1 字段(尽量不要修改原始数据),将清洗后的颜色值保存到 color1 字段中,然后可以使用下面的 SQL 语句对颜色值进行清洗。
update t_sales set color1 = '黑色' where color like '%黑%' ;
update t_sales set color1 = '绿色' where color like '%绿%' ;
update t_sales set color1 = '红色' where color like '%红%' ;
update t_sales set color1 = '白色' where color like '%白%' ;
update t_sales set color1 = '蓝色' where color like '%蓝%' ;
update t_sales set color1 = '粉色' where color like '%粉%' and color1 is null ;
update t_sales set color1 = '青色' where color like '%青%' ;
update t_sales set color1 = '卡其色' where color like '%卡其%' ;
update t_sales set color1 = '紫色' where color like '%紫%' ;
update t_sales set color1 = '肤色' where color like '%肤%' ;
update t_sales set color1 = '水晶虾' where color like '%水晶虾%' ;
update t_sales set color1 = '玫瑰色' where color like '%玫瑰%' ;
update t_sales set color1 = '银灰' where color like '%银灰%' ;
接下来对要对胸罩尺寸进行清洗,由于胸罩尺寸有罩杯和上胸围两个指标,但抓取的胸罩尺寸数据将这两个指标都混到了一起,所以在数据清洗时需要将他们分开。首先建立两个新字段(size1 和 size2),size1 保存罩杯尺寸,size2 保存上胸围尺寸。可以使用下面的 SQL 语句将 size 的值进行拆分,分别保存到 size1 和 size2 中。
保存罩杯尺寸的 SQL 语句:
update t_sales set size1 = 'AA' where size like '%AA%' ;
update t_sales set size1 = 'A' where size like '%A%' and size not like '%AA%' ;
update t_sales set size1 = 'B' where size like '%B%' ;
update t_sales set size1 = 'C' where size like '%C%' ;
update t_sales set size1 = 'D' where size like '%D%' ;
update t_sales set size1 = 'E' where size like '%E%' ;
update t_sales set size1 = 'F' where size like '%F%' ;
update t_sales set size1 = 'G' where size like '%G%' ;
保存上胸围尺寸的SQL语句:
update t_sales set size2 = '70' where size like '%70%' ;
update t_sales set size2 = '75' where size like '%75%' ;
update t_sales set size2 = '80' where size like '%80%' ;
update t_sales set size2 = '85' where size like '%85%' ;
update t_sales set size2 = '90' where size like '%90%' ;
update t_sales set size2 = '95' where size like '%95%' ;
update t_sales set size2 = '100' where size like '%100%' ;
update t_sales set size2 = '105' where size like '%105%' ;
update t_sales set size2 = '110' where size like '%110%' ;
清洗完的数据如图2所示。
enter image description here
网友评论