本来这些储备知识,我想在后续的实际算法案例中进行解释,但是考虑到很多的小伙伴在学习的过程中都是逐步推进的,需要一定的时间去理解和应用,所以前期我们需要把所有的东西都准备好,这样就可以保证后续的算法实践游刃有余。
数据清理
我们一般看到的数据都是较为干净的数据,也就是结构化的数据,但是有时候在日志信息中,需要我们去提取出结构化的数据进行处理,这个时候就需要用到数据清理了。
数据清理用到的工具
1、Python
Python作为目前火热的编程语言,它的优势在于不需要编写大量的程序代码就可以实现我们所需的功能,而且在数据处理方面,Python的第三方库Pandas和Numpy有着不可描述的便捷性。
这也是我在概述篇里面介绍的需要准备的知识,同时在博主的文章里面也有比较详细的数据处理的文章,点击即可查看和学习。
2、Kettle
kettle作为ETL工具,可能很多人比较的陌生,这个工具在数据预处理方面有着比较好的优势,具有可重复性和简单性,由于它是一个图形界面的开发工具,不需要编程知识就可以完成,只需要明白每一步的过程和相应的按钮含义。
数据清理主要包括缺失值与异常值的清理
针对缺失值,可以采用简单的删除,但如果缺失值的比例达到一定阈值,就需要读者去判断是否在采集过程中出现了问题,不可以进行简单的删除操作了,因为一旦删除了数据,数据所代表的信息就无法找回了。
也可以将缺失值添加成默认值,或是采用拉格朗日插值法对缺失值进行填充等方式。
在Pandas里面有很多种对缺失值的处理办法,还可以使用左右填充的方法以及上下填充,也可以按照某一列的统计量进行填充,还可以填充特定规则的数据,下面给出具体的代码实现
检测出空值
# 检测出有空值的行数据 df[df.isnull().T.any()]
直接删除
df.dropna() # 删除包含空值的所有行 df.dropna(axis=1) # 删除包含空值的所有列 # 删除一行全部是空值的数据行 df.dropna(how="all") df.dropna(how="all",axis=1) # 删除列数据里面全部是空值的列
填充处理
# 通过给定的数据填充,一般是0 df.fillna(0) 指定我们的数据列,进行填充 df[["成绩"]].fillna(100) # 指定数据列按照平均值进行填充 df[["成绩"]].fillna(round(df["成绩"].mean(),2)) # 这里的平均值可以替换成最大值max,最小值min,以及各种的统计函数
前后左右值填充
# 使用前后左右的值来填充 # 上面的值 forwardfill 列上前一个值 df[['成绩']].fillna(method="ffill") # 下面的值 backfill 列上后一个值 df.fillna(method="bfill") # 左边的值 forwardfill 行上前一个值 df.fillna(method="ffill", axis=1) # 右边的值 backfill 行上后一个值 df.fillna(method="bfill", axis=1) # 如果超过边界无法取值
这里需要注意一下,有些时候由于边界的原因,无法填充,那么可以先使用某一个填充然后再去使用另外一个填充模式,这样全方位的填充,效果比较的好!
数据集成
主要是指将多种数据源汇集到一起,放入一个数据仓库的过程。在数据集成的过程中会出现实体识别(Entity Resolution),冗余属性识别,数据值冲突等问题。
在将多种数据源集成时,实体识别是很常见的事情,实体识别可描述成:在一个或多个数据源中的不同记录是否描述为同一个实体, 同一实体在数据集成过程中可被用于数据去重和连接键等集成操作中。
用一个数据库中的实例就是,如果 A 表中有一个字段为 stu_id, B 表中有一个字段为 stu_num,那么这两个字段是否都为同一个实体的属性呢?
如果是同一个属性,那么在集成时,这个这段可以作为多表关联的条件,生成新表时保留两者中的一个值就可以。
冗余属性识别是指是否某些属性之间存在相关性,或者一个属性可以由其它的属性推导得出。数据值冲突指的是不同数据源中针对同一个实体的属性值不同,这可能是单位不一致导致的。
数据集成就是在多种数据源的集成过程中,解决掉上述的几个问题,形成一个大的不冗余的数值清楚的数据表。
说到数据集成,一般用于大量的数据维度的例子,比如某电商的售卖系统所产生的数据,这里就需要考虑到数据里面的范式了,在我的《数据库技术原理应用-计算机三级》可以看到具体的解释,点击蓝色字体即可跳转。