第一个问题,什么是数据预处理?
数据预处理,英文全称是:data preprocessing,顾名思义就是指在进行对主要的数据进行处理以前对数据进行的一些处理
数据预处理分为:
缺失值处理、异常值处理、特征缩放、数值离散化和不平衡数据处理
数据预处理的重要性:
在数据挖掘过程中,数据预处理是不可或缺的部分。
大数据应用中数据的典型特点是独立的、不完整、含噪声和不一致。
大部分数据挖掘算法对数据质量以及数据规模有特殊要求,通过数据预处理能有效的提高数据的质量,为数据挖掘过程节约大量时间和空间。
一、数据的抽取转换加载–ETL
下图是整体的平台架构:
如上图所示,图中虚线框的部分就是ETL的过程,在这个部分聚焦了海量数据预处理操作。
从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL的过程。ETL可以认为是数据仓库的血液,它维系着数据仓库中数据的新陈代谢。数据仓库日常的管理和维护工作的大部分精力就是保持ETL的正常和稳定。
那么什么是ETL?
ETL是一个数据管道,负责将分布的、异构的数据(Extract阶段)根据一定的业务规则进行数据清洗、转换、集成(Transform阶段),最终将处理后的数据加载到数据目的地(Load阶段),比如数据仓库。
人们很容易认为,创建数据仓库就是简单地从多个数据源抽取数据,然后加载到数据仓库的数据库中。事实远非如此,在实际业务中ETL过程是非常复杂的,它需要来自各个岗位职责人的积极配合,包括开发人员、分析师、测试人员、高层管理人员。
ETL的重要性:
ETL为企业提供了分析历史数据的可能。
ETL提高了企业工作效率。开发人员可以快速处理数据,省去编写复杂代码的过程。
ETL提供统一的视角来观察、统计、分析数据,促进跨部门、跨组织的合作,为企业决策提供良好的数据支撑。
ETL,也就是抽取加载转换,详细的每个过程也是需要了解的部分。
E:抽取:extract
数据来源:数据库:Oracle、SQL Sever、Flat data等
抽取中,要注意的细节:
检查数据类型;确保数据完整;去除重复数据;去除脏数据;确保导出数据属性与源数据一致。
抽取数据的三种方式:
更新提醒 Update Notification
增量抽取 Incremental Extraction
全量抽取 Full Extraction
1.更新抽取
当源系统中有新的数据加入或发生数据更新操作时,系统会发出提醒。这是最简单的一种数据抽取方式。
2.全量抽取
当数据源中有新的数据加入或发生数据更新操作时,系统不会发出提醒。此时可以采用全量抽取。全量抽取类似于数据迁移或数据复制。它将数据源中的表或视图的数据原封不动的从数据库中抽取出来,并转换成自己的ETL工具可以识别的格式。全量抽取比较简单,一般只在系统初始化时使用,全量一次后,就要每天采用增量抽取。
注意:
全量抽取是第一次进行的
当源系统中有新的数据加入或发生数据更新操作时,系统不会发出提醒
它将数据源中的表或视图的数据原封不动的从数据库中抽取出来,并转换成自己的ETL工具可以识别的格式。
全量抽取比较简单,一般只在系统初始化时使用,全量一次后,就要每天采用增量抽取。
3.增量抽取
当数据源中有新的数据加入或发生数据更新操作时,系统不会发出提醒,但可以识别出更新的数据,此时可以采用增量抽取。增量抽取只抽取自上次抽取以来数据库表中新增或者修改的数据。在ETL中,增量抽取使用更加广泛。
增量抽取方式:
流抽取:适合小数据集,实时数据采集。
批量抽取:适合大数据集。
适合增量抽取方式的数据,所具有的特性:
源数据的数据量较小;
源数据不易发生变化;
源数据呈现规律性变化;
目标数据量巨大。
T:数据转换:transform
数据转换一般包括清洗和转换两部分。
首先清洗掉数据集中重复的、不完整的以及错误的数据;
然后根据具体的业务规则,对数据做转换操作,从而实现数据转换的目的。
注意:
在实际业务中,大多数情况下从数据源抽取的数据都经过转换,整合处理后输入到数据目的地中。
在实际业务中也存在高质量的数据,无需经过转换操作。源数据直接到达数据目的地,这种数据叫做Pass Through Data。
转换操作 :
基本操作 cleaning、deduplication、check、transpose
高级操作 filtering、jion、splitting、integration
L:数据加载:load
加载是ETL中最后一步,是将已转换后的数据加载到指定的数据仓库中,为后续数据的分析、挖掘提供数据准备。
数据加载需要注意的技术点:
缺失值和空值检测。
目标数据与和源数据一致性检测。
验证已转换数据是否符合预期,即测试数据加载验证
加载两种方式:
全量加载 Full Load:
全表清空后再进行数据加载。
从技术角度上说,比增量加载简单。一般只需在数据加载之前,清空目标表,再全量导入源表数据即可。但当源数据量较大 、业务实时性较高时,大批量的数据无法在短时间内加载成功,此时需要与增量加载结合使用。
增量加载 Incremental Load:
目标表仅更新源表中变化的数据。
增量加载难度在于更新数据的定位,必须设计明确的规则从数据源中抽取信息发生变化的的数据,并将这些变化的数据在完成相应的逻辑转换后更新到数据目的地中。
增量加载方式:判断新增数据:
1.系统日志分析方式:
该方式通过分析数据库自身的日志来判断变化的数据。关系型数据库系统都会将所有的 DML 操作存储在日志文件中,以实现数据库的备份和还原功能。ETL 增量抽取进程通过对数据库的日志进行分析,提取对相关源表在特定时间后发生的 DML 操作信息,就可以得知自上次抽取时刻以来该表的数据变化情况,从而指导增量抽取动作。
2.触发器方式:增、删、改 + 触发器
触发器增量抽取主要有 2 种方式:
直接进行数据加载
利用增量日志表进行增量加载
直接进行数据加载方式是创建一个与源表结构类似的临时表,然后创建一个三种类型的触发器,分别对应 insert , update , delete 操作。每当源表有数据变动的时候,利用触发器将变化的数据填入此临时表表中。最后通过维护这个临时表,在进行 ETL 过程的时候,将目标表中相应的数据进行修改。ETL 过程结束后,清空此临时表。
3.时间戳方式
4.全表比对方式
5.增量数据直接或转换后加载
加载方式好坏的评判标准:
可按频率准确地捕获业务系统中的变化数据。
尽量降低对业务系统造成的压力,及对现有业务的影响。
能够很好的实现属性映射。
可快速恢复或回滚数据。
ELT:
数据抽取、加载和转换 (Extract、Load、Transform) 简称ELT。
与ETL的本质区别:在ELT数据管道中,数据被抽取后先加载到数据仓库,然后利用数据库的聚合分析能力或外部计算框架处理能力对数据进行转换操作。
ELT优势:
1.简化ETL架构。数据抽取后无需使用单独的转换引擎,数据转换和消耗在同一个地方。
2.降低抽取的时间和性能开销。在实际应用中,不同的业务对数据要求存在差异,需要对同一组数据做不同的转换操作。ETL需要多次抽取、转换、加载,而ELT能实现一次抽取、加载,多次转换,实现一份数据多次应用,降低时间和资源开销。
注意:
尽量不要清洗全部数据。企业可能存在一次清洗全部数据的现象,但清洗过多数据会花费较长时间,企业往往没有做好等待全部数据清洗完毕的准备。
根据实际业务,按需清洗数据,避免数据积压,因为构建数据仓库的最大原因是提供更干净、更可靠的数据。
二、数据清洗:
数据清洗是指通过删除、转换、组合等方法,处理数据集中的异常样本,为数据建模提供优质数据的过程。
分类:
缺失值处理
异常值处理
缺失值原因:
在实际业务中,不可避免的会出现数据缺失的现象,总结下来大致有如下几种情形。
人为疏忽、机器故障等客观因素导致信息缺失。
人为刻意隐瞒部分数据。比如在数据表中,有意将一列属性视为空值,此时缺失值就可看作是一种特殊的特征值。
数据本身不存在,比如银行做用户信息收集时,对学生群体来说工资这一属性不存在,因此在数据表里显示为空值。
系统实时性能要求较高。
历史局限性导致数据收集不完整。
影响:
(1)数据和特征决定了机器学习的上限,而模型和算法的应用只是逼近这个上限
(2)数据集中缺少部分数据可以降低模型过拟合机率,但也存在模型偏差过大的风险,因为没有正确地分析变量的行为和关系,从而导致错误的预测或分类
数据缺失类型:
数据集中不含缺失值的变量称为完全变量,数据集中含有缺失值的变量称为不完全变量。数据缺失类型可以分为完全随机缺失,随机缺失和非随机缺失。
完全随机缺失 (Missing Completely at Random, MCAR):
对所有数据来说,所有变量的缺失概率都是相同的。数据的缺失不依赖于不完全变量或完全变量。比如,领导通过抛硬币来决定是否公布公司的财务状况。
随机缺失 (Missing at Random, MAR):
数据的缺失与其他完全变量有关。比如,收集家庭收入信息这一变量,女性比男性的数据缺失率高。其中性别为完全变量。
非随机缺失 (Missing Not at Random, MNAR):
数据的缺失与不完全变量自身的取值有关。MNAP分为两种,分别是:
缺失值依赖于未观察变量
数据缺失不是随机的,取决于未观测到的变量。比如,学校开设一门课程,中途退出的人较多,可能与课程内容质量不好有关,但数据集中并未收集“课程质量评分”这一变量。
缺失取决于缺失值本身
缺失值的概率与缺失值本身直接相关,比如收入过高或过低的人群不愿意提供自己的收入证明。
数据缺失原因多种多样,针对不同的缺失原因,数据缺失值的处理方式也各不相同。值得注意的是,有时属性缺失并不意味着数据缺失,比如,银行收集客户信息时,学生在“工资”这一栏为空值。缺失本身是包含有价值的信息的。因此要结合具体业务场景、数据场景选择合适的数据缺失值处理方式。
缺失值处理方法众多,总结下来为三种:
删除
填充
不处理
1.删除:
2.填充:
基于统计学原理,根据初始数据集中非缺失对象取值的分布情况来对一个缺失值进行填充。
填充方式包含人工填充、特殊值填充、平均值填充、热卡填充、KNN、预测模型、组合完整化方法等。
填充总体分为两类:
定类:众数
定量:均值、中位数
2.1KNN:
通过KNN的方法将所有样本进行划分,通过计算欧式距离,选取与缺失数据样本最近的K个样本。
然后通过投票法或K个值加权平均来估计该样本的缺失数据。其本质是找相似插补。
2.2回归:
把数据中不含数据缺失的部分作为训练集,根据训练集建立回归模型。
将此回归模型用来预测缺失值并进行填充。
2.3变量映射:
把变量映射到高维空间中。
客户信息表中,性别一栏有 “男”、“女”和 NULL值 (数据表中信息缺失) 三种情况。
现可将客户信息表中性别属性值更改为“是否男”、“是否女”、“是否缺失”三种。
3.不处理
补齐的缺失值毕竟不是原始数据,不一定符合客观事实。对数据的填充在一定程度上改变了数据的原始分布,也不排除加入了噪音节点的可能性。
因此,对于一些无法应对缺失值的模型,可以用缺失值填充的方式补齐缺失数据。但有些模型本身可以容忍一定的数据缺失情况,此时可以选择不处理的方式,比如Xgboost模型。
还有一个异常值处理。首先什么是异常值?
异常值是偏离整体样本的观察值,也叫离群点 (Outlier),如下图一所示。
异常值会影响数据模型的精准度,因此异常值处理是数据预处理中重要的一步。在实际应用中,研究者可将其用于一些异常检测场景,比如入侵检测、欺诈检测、安全监测等。
当异常值出现时,需了解异常出现的原因。针对不同原因,采取不同异常值处理方法,以便达到较好的数据挖掘效果。
异常值出现的原因大致有以下几种:
1.数据输入错误。相关人员无意或故意导致数据异常,比如,客户年收入13万美元,数据登记为130万美元。
2.数据测量、实验误差。此为较常见误差,可因测量仪器不精准导致。
3.数据处理错误。ETL操作不当,发送数据异常。
4.抽样错误。数据采集时包含了错误或无关数据。
5.自然异常值。非人为因素导致的数据异常。比如,根据历史数据预测明年降水量,但今年7月降水量与前五年同期相比大大增加。
当出现异常值时,会产生以下几种影响:
增加了整体数据方差,降低了统计学检测的权威性。
异常值是随机分布,因此可能会改变数据集的正态分布。
可能会对回归、ANOVA、T检验等统计学假设的结果产生影响。
如何处理异常值?
异常值的处理方法多种多样,常用方法有删除异常值、将异常值视为缺失值、估算异常值。具体处理方法需结合实际业务情况综合考虑。
删除异常值。适用于异常值较少的情况。
将异常值视为缺失值,按照缺失值处理方法来处理异常值。
估算异常值。Mean/Mode/Median估计数据填充异常值。
这里需要注意:异常值不一定全部不要,也要看情况判断