注册

驱动力

其他分类其他2023-09-07
313

CONTENTS

目录

数说

一文看懂数据清洗:缺失值、异常值和重复值的处理

风向

金融领域数据清洗研究

一线

浅谈数据分析中的数据清洗方法策略

About us

5大SQL数据清洗方法!

一文看懂数据清洗:缺失值、异常值和重复值的处理

数据缺失分为两种:一种是行记录的缺失,这种情况又称数据记录丢失;另一种是数据列值的缺失,即由于各种原因导致的数据记录中某些列的值空缺。
不同的数据存储和环境中对于缺失值的表示结果也不同,例如,数据库中是Null,Python返回对象是None,Pandas或Numpy中是NaN。

数说

驱动力

01 数据列缺失的4种处理方法

导读:在数据清洗过程中,主要处理的是缺失值、异常值和重复值。所谓清洗,是对数据集通过丢弃、填充、替换、去重等操作,达到去除异常、纠正错误、补足缺失的目的。

在极少数情况下,部分缺失值也会使用空字符串来代替,但空字符串绝对不同于缺失值。从对象的实体来看,空字符串是有实体的,实体为字符串类型;而缺失值其实是没有实体的,即没有数据类型。
丢失的数据记录通常无法找回,这里重点讨论数据列类型缺失值的处理思路。通常有4种思路。
1. 丢弃
这种方法简单明了,直接删除带有缺失值的行记录(整行删除)或者列字段(整列删除),减少缺失数据记录对总体数据的影响。但丢弃意味着会消减数据特征,以下任何一种场景都不宜采用该方法。
  • 数据集总体中存在大量的数据记录不完整情况且比例较大,例如超过10%,删除这些带有缺失值的记录意味着会损失过多有用信息。
  • 带有缺失值的数据记录大量存在着明显的数据分布规律或特征,例如带有缺失值的数据记录的目标标签(即分类中的LABEL变量)主要集中于某一类或几类,如果删除这些数据记录将使对应分类的数据样本丢失大量特征信息,导致模型过拟合或分类不准确。
2. 补全
相对丢弃而言,补全是更加常用的缺失值处理方式。通过一定的方法将缺失的数据补上,从而形成完整的数据记录,对于后续的数据处理、分析和建模至关重要。常用的补全方法如下。
  • 统计法:对于数值型的数据,使用均值、加权均值、中位数等方法补足;对于分类型数据,使用类别众数最多的值补足。
  • 模型法:更多时候我们会基于已有的其他字段,将缺失字段作为目标变量进行预测,从而得到最为可能的补全值。如果带有缺失值的列是数值变量,采用回归模型补全;如果是分类变量,则采用分类模型补全。
  • 专家补全:对于少量且具有重要意义的数据记录,专家补足也是非常重要的一种途径。
  • 其他方法:例如随机法、特殊值法、多重填补等。

文章来源于大数据DT ,作者宋天龙
原文链接:https://mp.weixin.qq.com/s/raMIIahQ41OugTQ-eSJ0rA

数说

驱动力

缺少字段的值缺失数量有多少)的字段对于模型的影响非常小,那么我们根本就不需要对缺失值进行处理。
因此,后期建模时的字段或特征的重要性判断也是决定是否处理字段缺失值的重要参考因素之一。
对于缺失值的处理思路是先通过一定方法找到缺失值,接着分析缺失值在整体样本中的分布占比,以及缺失值是否具有显著的无规律分布特征,然后考虑后续要使用的模型中是否能满足缺失值的自动处理,最后决定采用哪种缺失值处理方法。
在选择处理方法时,注意投入的时间、精力和产出价值,毕竟,处理缺失值只是整个数据工作的冰山一角而已。
在数据采集时,可在采集端针对各个字段设置一个默认值。以MySQL为例,在设计数据库表时,可通过default指定每个字段的默认值,该值必须是常数。
在这种情况下,假如原本数据采集时没有采集到数据,字段的值应该为Null,虽然由于在建立库表时设置了默认值会导致“缺失值”看起来非常正常,但本质上还是缺失的。对于这类数据需要尤其注意。

3. 真值转换法
在某些情况下,我们可能无法得知缺失值的分布规律,并且无法对于缺失值采用上述任何一种补全方法做处理;或者我们认为数据缺失也是一种规律,不应该轻易对缺失值随意处理,那么还有一种缺失值处理思路—真值转换。
该思路的根本观点是,我们承认缺失值的存在,并且把数据缺失也作为数据分布规律的一部分,将变量的实际值和缺失值都作为输入维度参与后续数据处理和模型计算中。但是变量的实际值可以作为变量值参与模型计算,而缺失值通常无法参与运算,因此需要对缺失值进行真值转换。
以用户性别字段为例,很多数据库集都无法对会员的性别进行补足,但又舍不得将其丢弃掉,那么我们将选择将其中的值,包括男、女、未知从一个变量的多个值分布状态转换为多个变量的真值分布状态。
  • 转换前:性别(值域:男、女、未知)。
  • 转换后:性别_男(值域1或0)、性别_女(值域1或0)、性别_未知(值域1或0)。
然后将这3列新的字段作为输入维度替换原来的1个字段参与后续模型计算。
4. 不处理
在数据预处理阶段,对于具有缺失值的数据记录不做任何处理,也是一种思路。这种思路主要看后期的数据分析和建模应用,很多模型对于缺失值有容忍度或灵活的处理方法,因此在预处理阶段可以不做处理。
常见的能够自动处理缺失值的模型包括:KNN、决策树和随机森林、神经网络和朴素贝叶斯、DBSCAN(基于密度的带有噪声的空间聚类)等。这些模型对于缺失值的处理思路是:
  • 忽略,缺失值不参与距离计算,例如KNN。
  • 将缺失值作为分布的一种状态,并参与到建模过程,例如各种决策树及其变体。
  • 不基于距离做计算,因此基于值的距离做计算本身的影响就消除了,例如DBSCAN。
在数据建模前的数据归约阶段,有一种归约的思路是降维,降维中有一种直接选择特征的方法。假如我们通过一定方法确定带有缺失值(无论

02 不要轻易抛弃异常数据

异常数据是数据分布的常态,处于特定分布区域或范围之外的数据通常会被定义为异常或“噪音”。产生数据“噪音”的原因很多,例如业务运营操作、数据采集问题、数据同步问题等。
对异常数据进行处理前,需要先辨别出到底哪些是真正的数据异常。从数据异常的状态看分为两种:
  • 一种是“伪异常”,这些异常是由于业务特定运营动作产生的,其实是正常反映业务状态,而不是数据本身的异常规律。
  • 一种是“真异常”,这些异常并不是由于特定的业务动作引起的,而是客观地反映了数据本身分布异常的分布个案。
大多数数据挖掘或数据工作中,异常值都会在数据的预处理过程中被认为是噪音而剔除,以避免其对总体数据评估和分析挖掘的影响。但在以下几种情况下,我们无须对异常值做抛弃处理。

数说

驱动力

数据集中的重复值包括以下两种情况:
  • 数据值完全相同的多条数据记录。这是最常见的数据重复情况。
  • 数据主体相同但匹配到的唯一属性值不同。这种情况多见于数据仓库中的变化维度表,同一个事实表的主体会匹配同一个属性的多个值。
去重是重复值处理的主要方法,主要目的是保留能显示特征的唯一数据记录。但当遇到以下几种情况时,请慎重(不建议)执行数据去重。
1. 重复的记录用于分析演变规律
以变化维度表为例。例如在商品类别的维度表中,每个商品对应的同1个类别的值应该是唯一的,例如苹果iPhone7属于个人电子消费品,这样才能将所有商品分配到唯一类别属性值中。但当所有商品类别的值重构或升级时(大多数情况下随着公司的发展都会这么做),原有的商品可能被分配了类别中的不同值。如下表所示展示了这种变化。

1. 异常值正常反映了业务运营结果
该场景是由业务部门的特定动作导致的数据分布异常,如果抛弃异常值将导致无法正确反馈业务结果。
例如:公司的A商品正常情况下日销量为1000台左右。由于昨日举行优惠促销活动导致总销量达到10000台,由于后端库存备货不足导致今日销量又下降到100台。在这种情况下,10000台和100台都正确地反映了业务运营的结果,而非数据异常案例。
2. 异常检测模型
异常检测模型是针对整体样本中的异常数据进行分析和挖掘,以便找到其中的异常个案和规律,这种数据应用围绕异常值展开,因此异常值不能做抛弃处理。
异常检测模型常用于客户异常识别、信用卡欺诈、贷款审批识别、药物变异识别、恶劣气象预测、网络入侵检测、流量作弊检测等。在这种情况下,异常数据本身是目标数据,如果被处理掉将损失关键信息。
3. 包容异常值的数据建模
如果数据算法和模型对异常值不敏感,那么即使不处理异常值也不会对模型本身造成负面影响。例如在决策树中,异常值本身就可以作为一种分裂节点。
提示:除了抛弃和保留,还有一种思路可对异常值进行处理,例如使用其他统计量、预测量进行替换。但这种方法不推荐使用,原因是这会将其中的关键分布特征消除,从而改变原始数据集的分布规律。

03 数据重复就需要去重吗

此时,我们在数据中使用Full join做跨重构时间点的类别匹配时,会发现苹果iPhone7会同时匹配到个人电子消费品和手机数码2条记录。对于这种情况,需要根据具体业务需求处理。
  • 如果跟业务沟通,两条数据需要做整合,那么需要确定一个整合字段用来涵盖2条记录。其实就是将2条数据再次映射到一个类别主体中。
  • 如果跟业务沟通,需要同时保存两条数据,那么此时不能做任何处理。后续的具体处理根据建模需求而定。
  • 相关知识点:变化维度表
变化维度表是数据仓库中的概念。维度表类似于匹配表,用来存储静态的维度、属性等数据,而这些数据一般都不会改变。但是变与

数说

驱动力

  • 如果用户退货则会增加反向订单,并影响物流、配送和仓储相关的各个运营环节,导致运营资源无端消耗、商品损耗增加、仓储物流成本增加等问题。
因此,这些问题必须在前期数据采集和存储时就通过一定机制解决和避免。如果确实产生了此类问题,那么数据工作者或运营工作者可以基于这些重复值来发现规则漏洞,并配合相关部门,最大限度地降低由此而带来的运营风险。
--END--

不变是一个相对的概念,随着企业的不断发展,很多时候维度也会随着发生变化。因此在某个时间内的维度是不变的,而从整体来看维度也是变化的。
对于维度的变化,有3种方式进行处理:
  • 直接覆盖原有值。这种情况下每个唯一ID就只对应一个属性值,这样做虽然简单粗暴也容易实现,但是无法保留历史信息。
  • 添加新的维度行。此时同一个ID会得到两条匹配记录。
  • 增加新的属性列。此时不会新增数据行记录,只是在原有的记录中新增一列用于标记不同时期的值。
具体到企业内使用哪种方式,通常由数据库管理员根据实际情况来决定。
注意:真正的变化维度表或维度表不会以中文做主键,通常都会使用数字或字符串类作为唯一关联ID,本节的示例仅做说明之用。
2. 重复的记录用于样本不均衡处理
在开展分类数据建模工作时,样本不均衡是影响分类模型效果的关键因素之一。解决分类方法的一种方法是对少数样本类别做简单过采样,通过随机过采样,采取简单复制样本的策略来增加少数类样本。
经过这种处理方式后,也会在数据记录中产生相同记录的多条数据。此时,我们不能对其中的重复值执行去重操作。
3. 重复的记录用于检测业务规则问题
对于以分析应用为主的数据集而言,存在重复记录不会直接影响实际运营,毕竟数据集主要是用来做分析的。
但对于事务型的数据而言,重复数据可能意味着重大运营规则问题,尤其当这些重复值出现在与企业经营中与金钱相关的业务场景时,例如:重复的订单、重复的充值、重复的预约项、重复的出库申请等。
这些重复的数据记录通常是由于数据采集、存储、验证和审核机制的不完善等问题导致的,会直接反映到前台生产和运营系统。以重复订单为例:
  • 假如前台的提交订单功能不做唯一性约束,那么在一次订单中重复点击提交订单按钮,就会触发多次重复提交订单的申请记录,如果该操作审批通过后,会联动带动运营后端的商品分拣、出库、送货,如果用户接收重复商品则会导致重大损失;

风向

驱动力

摘 要: 金融行业原本的系统运行处理数据能力较慢,系统内部数据处理加工人员干预较多等多方面因素导致数据不准确、数据质量不高,因此对这些数据进行清洗是必不可少的;本文记录了对金融行业系统中存在的数据质量问题级数据清洗方法的研究,阐述了影像数据质量的因素,并提出了数据清洗的方法及一般过程.
关键词: 数据质量;数据清洗;清洗方法
1 引言
随着金融行业的发展,对数据质量的要求变得越来越高,中国人民银行也对所有金融机构提出了新的报送要求,而金融行业原本使用的系统较多且由不同公司开发完成,数据定义规则也不相同,因此各金融机构要对自己内部的数据进行数据清洗以达到人行的要求、满足客户的需要.
2 数据质量与数据清洗
随着信息化程度的提高,金融机构内部积累了大量的业务数据,这些数据是金融机构进行正确决策的数据基础,由于“垃圾进,垃圾出”,高质量的数据可以提高金融机构决策的正确性,而质量差的数据则起到相反的作用.所以为了更好的利用这些数据为金融机构服务,很多金融机构纷纷建立了自己的数据中心或者数据仓库.数据清洗是数据中心或数据仓库系统的重要环节,是保证数据质量的主要手段
2.1 数据质量
基于信息系统的大背景下,金融机构数据中心中的数据通常是从不同的数据源抽取后存入的.信息系统越大,数据质量的问题就越明显,给金融机构决策带来的风险就越高.
2.1.1 数据质量的定义

金融领域数据清洗研究

作者黄成龙

从文献的角度,数据质量是一个多维的概念,目前还没有数据质量维度的统一定义,通常的维度包含准确度、完整性、一致性、时效性,而数据对这四个主要维度的满足程度被定义为数据质量.从满足业务需求的角度,数据质量被定义为“满足数据使用者需求的程度”.第一种仅仅从文法的角度进行定义,第二种从实际使用的角度进行定义,都不是很全面和准确.本文将数据质量定义为“通过准确度、完整性、一致性、时效性这四个指标来衡量满足数据使用者需求的程度”.
2.1.2 数据质量问题的种类
当建立一个信息系统的时候,即使进行了良好的设计和规划,也不能保证在所有情况下,信息系统中数据的质量都能满足用户的要求.用户录入错误、金融机构合并以及环境随着时间的推移而改变,这些都会影响所存放数据的质量.信息系统中可能存在的数据质量问题有很多种,从数据质量问题存在范围的角度分为以下
四种:
1、 属性(字段)层面.这类错误仅局限于单个属性的值.
例:银行存储个人信息中的生日为“2000/02/30”,显然这是个错误的值,因为 2 月没有 30 号;保险公司的保单系统中,有一个保单记录,姓名却是空值;这些都属于单个属性错误.
2、 记录层面.这类错误表现在一条记录不同属性值之间出现的不一致性.
例:证券公司存储个人信息中的所在省为“山东省”,所在市为“上海市”,省和市明显不对应;这种就是一条记录中属性依赖冲突.
3、 记录类型.表现为同一数据源中不同的记录类型之间的不一致性.
例:基金公司记录张三买了基金的,有两条记录,但性别栏却分别为“男”与“女”两个不同的值;这种就是记录与记录冲突.
4、 数据源层面.表现为数据源中的某些属性值或记录与其他数据源中的相关值的不一致性.
例:贷款公司记录李四的证件号为“1020199004010032”,但实际李四的证件号为“1020199004010036”;这类数据问题就属于就数据源层面的.

风向

驱动力

清洗程序会处理完所有可以自动处理的数据,对数据清洗程序不能自动处理的情况,产生数据清洗报告,由相应的领域专家手工的处理.这种方式即节约了人力成本,又能保证数据清洗的质量,适用于大数据量的数据源.根据金融机构的情况及要求分析,使用第三种方式——实时人机交互方式进行清洗金融行业的数据是最恰当的方式.
3 金融领域数据清洗的具体方法步骤
一般的清洗方法包括需求分析、信息环境分析、任务定义、方法定义、基本配置,以及基于以上工作获得数据清洗方案等.通过需求分析明确信息系统的数据清洗需求,通过信息环境分析明确数据所处的信息环境特点,任务定义要明确具体的数据清洗任务目标,方法定义确定合适的数据清洗方法,基本配置完成数据接口等的配置,要形成完整的数据清洗方案,并整理归档.
而金融领域的却有一些区别,为方便本章节介绍,本章以对银行的征信、贷款类系统进行数据清洗,数据库用 Oracle,清洗工具用 JE22 开发为例.
3.1 清洗设计与方法
3.1.1 数据模型设计
1、首先要分析情况建立数据清洗的最终模型,即最终要得到的结果
例如:业务号码|业务种类|发生地点|开户日期|授信额度|担保方式|还款方式|剩余还款月数|本月应还款金额|违约次数|姓名|证件号|年收入那么在数据库中建一张表包含以上的字段;
2、其次要确认各个系统中我们可以得到那些数据,即需进行清洗的数据
例信贷系统中有:业务号码|业务种类|发生地点|开户日期|授信额度|担保方式|还款方式|…
征信系统中有:证件号|还款方式|剩余还款月数|本月应还款金额|违约次数|…
核心系统中有:业务号码|姓名|证件号|月收入|…
那么需建立分别含有以上字段的三张表;

3、最后我们需要根据初始数据和最终数据,建立许多中间需要的表,用来做数据清理时使用的临时表,还有建立部分信息的存量表及最终数据的历史表用来存放基本不变的例如个人信息和为最终数据做备份.
3.1.2 清洗方法设计
在第 2 章结尾我们确认了使用第第三种方式——实时人机交互方式对金融行业的数据进行清洗最为合适,那么接下来以 3.1.1 中例子的内容进行设计:
1、就是要剔除无用的数据,也就是各个系统中|…的部分;
2、要做的是清除的是属性中的杂质及规范化,确认数据的统一性;
3、就是先在得到的基本表里面做一些基本的格式检验,例如检查日期格式是否正确,姓名是否缺失,发生地是否超长等,如有错误通过人工修改后继续检验直到无错;
4、根据最后需要的结果做一些数据的加工与计算,例如得到的数据是月收入,最终需要的是年收入,则使用月收入*12 等;
5、把基本表中的数据合成跟最终数据一样的形式的临时,然后根据业务规则在做一些检验,例如还款方式为“一次性”,剩余还款月数>0,那么本月应还款金额就应该为“0.00”等,如有错误通过人工修改后继续检验直到无错;
6、把加工完成的数据提供给人民银行、业务人员或客户,并备份到历史表.
3.2 具体清洗步骤
一般的数据清洗由准备、检测、定位、修正、验证五个部分组成,具有灵活、可扩展、交互性好、松耦合的特点;而本文对于金融领域的数据清洗又做了部分调整使其更适用于金融行业,如本章例子中的具体步
骤应为:
3.2.1 数据采集
将各系统文件层的非关系型数据装载到关系型数据库接口层表结构中.即将客户提供的业务数据采集到数

风向

驱动力

据库接口层的数据层,包括信贷数据的采集与征信数据的采集以及核心提供.通过各个系统进行数据抽取解决了完整性的问题.
此过程通过可 J2EE 编程完成,部分核心代码如下:

3.2.3 基本数据检查
检查数据的正确性,以及相似重复记录、不完整记录、逻辑错误、异常数据等数据质量问题的检测,并将其显示在页面,且可以通过人工进行修改,修改够继续执行检查直到检查完全部数据.例如检查身份信息长度超长,Oracle 中具体存储过程部分如下:

3.2.2 数据规范化
将数据由接口层表加载到对应的中间接口层表,同时进行数据的规范化工作;例如去除特殊符号和规范英文可通过 JAVA 调用 Oracle 存储过程完成,具体命令如下类似:

风向

驱动力

修改则通过 J2EE 工程的 JSP 页面实现,如下类似

3.2.5 高级数据校验
高级数据校验也就是最终数据校验,要检查数据层计算指标的业务逻辑性.例如之前说的还款方式为“一次性”,剩余还款月数>0,那么本月应还款金额就应该为“0.00”等,若不为“0.00”同 3.2.3 一样显示在页面上,但修改时则需要登录数据库进行修改,提示是如下类似:

通过 3.2.2 规范化以及本节的处理,解决了准确度的问题.
3.2.4 数据加工
这一步的主要功能:根据金融机构的业务规则或基础指标对数据进行一系列的加工计算从而达到要求.
例在信贷系统中还款方式“1”代表每 1 个月还一次,“6”则带代表每半年还一次,而征信系统中的还款方式“1”代表每年还 1 次;则“2”代表每半年换一次,需要做统一规定,转换为 1 为每月一还,2 为每季度,3为每半年,4 为每年,通过这种方法解决了一致性的问题.还有例如:要求违约次数最高为两位数,超过 99 次按 99 次计算,则代码如下:

3.2.6 整理并归档
全部修改完成后,继续执行,对检测结果进行统计,以获得全面的数据质量信息,并将相关信息整理归档,最后提示完成.并且通过每天的数据第二日就进行处理解决了时效性的问题,至此决定数据质量的准确度、完整性、一致性、时效性这四个指标的满足程度基本都达到最高.

经过这一系列的处理之后,得到规范且准备的数据,也就完成了数据清洗.提供给人民银行也完全可以达到要求;因为有历史归档表,在客户查询自己像违约次数这类资料时可以准确提供;客户新办贷款时,业务人员也可以轻松确认该客户的信息以确定是否发放贷款或确定发放金额;充分体现了数据清洗的作用.
4 总结
在本文中,论述了数据质量的概念、种类及影响数据质量问题的因素.并在分析总结已有的数据质量概念的基础上提出了自己对数据质量的定义.数据清洗是提高数据质量的有效途径,本文中分析讨论了数据清洗的概念和原理,提出了对金融行业进行数据清洗的一般过

风向

驱动力

程.研究了数据清洗的内容和清洗的过程,根据不同的数据质量问题,分析介绍了相应的数据清洗的方法.金融机构中数据具有很强的业务相关性,针对该特点提出了基于业务逻辑的属性清理方法.清理方法首先分析业务数据的规律和特点,将这些数据的规律和特点作为业务逻辑规则存入规则库中,清洗工具根据这些业务规则进行数据清洗.这种根据具体业务逻辑规则进行的数据清洗,可以更加有效的对数据进行清洗.
致谢 在此,我们向对本文的工作给予支持和建议的同行,尤其是北京航空航天大学计算学院孙海龙老师所教的信息检索班上的同学和老师表示感谢.
参考文献:
[1] 曹建军,习兴春,陈爽,绍衍振.数据清洗及其一般性系统框架.计算机科学,2012-11,39(11A):207-211.
[2] 宋金玉,陈爽,郭大鹏,王内蒙.数据质量与数据清洗方法.指挥信息系统与技术,2013-10,4(5):63-70.
[3] 叶鸥,张璟,李怀军.中文数据清洗研究综述.计算机工程与应用, 2012,48(14):121-129.
[4] [美]阿拉派蒂.Oracle Database 11g 数据库管理艺术.钟鸣等译,北京:人民邮电出版社,2010
--END--

导读:数据分析整个框架里面比较关键除了模型本身以外,更多依赖的是丰富高质量的数据源。在数据收集时需要捕获有关源的关键元数据,如来源、大小、时效性和相关内容的额外知识。迭代地识别当前数据资产基础和这些数据源的差距,使用分析、可视化、 挖掘或其他数据科学方法探索这些数据源,以定义模型算法输入或模型假设。

  由于原始数据中或多或少存在一些缺失、损坏的脏数据。如果不处理会导致模型失效。就好比一个水平很高的厨师,给到的原材料如果不卫生不干净,那也很难做出一道让人满意的菜品。因此在整合数据建立模型之前, 应先评估数据的质量,对数据进行清洗。
  当然,数据清洗除了能保障高质量的数据输出之外。也能够同步对数据探索。数据清洗和数据探索的作用是相辅相成的,通过数据探索,检阅数据的特征描述、分布推断以及结构上的优化,能更好的为数据清洗选择合适的清洗方法。而数据清洗后的数据则可以更有效的进行数据探索。本文重点讲解数据清洗的一些方法和注意事项。接下来,介绍数据清洗的三个重要部分:异常值判别、缺失值处理以及格式内容清洗。

浅谈数据分析中的数据清洗方法策略

转自老司机聊数据 作者成于念
原文链接:https://mp.weixin.qq.com/s/6g7-v8acuXZkQi8RiXjCSA

一、异常值判别

数据清洗的第一步是识别会影响分析结果的“异常”数据,然后判断是否剔除。异常值通常有以下几个表现:
(1)缺乏完整性
  完整性即记录数量名称是否完整,内部数据由于属于企业内部自己

一线

驱动力

生产的数据,相对而言比较好掌控检查。而如果是采购的外部数据,例如:城市土地人口宏观数据或者某城的二手房交易数据,则完整性需要外部数据供应商提出相应保障。
(2)缺乏准确性
  收集的数据必须要能够正确反映业务需求,否则分析结论会对业务造成误导。这方面的检查,需要首先理解业务背景,第二需要判断收集的此类数据以及数据项是否可以转换为分析项目所需数据。如果部分数据不符合业务逻辑,或者数据准确性很差,则对数据分析造成很大的影响。
(3)缺乏唯一性
  数据的唯一性应该从两个角度检查,常见的错误是多个数据一个编码,例如产品住宅,商铺都是同一编码,或者同时一个实物对应多个编码。如果导入系统,系统需要能够识别,否则将会影响分析主体的唯一性。
目前常用的识别异常数据的方法有物理判别法和统计判别法:

简而言之,例如导入数值有:10,11,17,9,20,174这几个,我们可以通过以上判别方法,第一时间发现174这个值存在异常(与均值、标准差等系数进行对比得出异常值)。
  当然,这种系统判别并进行删除异常值的方式虽然高效,但也存在风险。因为每个方法不尽相同,得出的异常值也有可能存在偏差。为了减少这种误删的概率,可以将多种统计判别方法结合使用,并且要找出异常值出现的原因。是手工录入错误还是数据接收过程中出错。同时,如果发现有多个异常值,建议逐个删除,即删除一个后再进行检验。
 在数据缺失严重的情况下,分析结果会失真。因此需要将缺失值进行填补,传统方式检查出来的空值有人工进行补充,但是需要补充人员找到相关资料检验无误后再进行填补。当然如果对于结果要求并不是特别大,且我们能通过数据找到规律的情况下,可以采用合理的方法自动填补空缺值。例如:可以根据身份证号码,自动判断人员的性别。常见的方法有平均值填充、K最近距离法、回归法、极大似线估计法等。(具体描述查看下图)

二.缺失值处理

值得注意的是,数据收集的过程中,如果对于某个字段要求必输,则可以通过系统导入时自动判断是否为null,如果为null则导入不成功,从源头控制数据质量。
  当然,我们在做数据分析的过程中,也要看数据量的大小。一般情况下数据量越大,异常值和缺失值对整体分析结果的影响会逐渐变小。所以,在“大数据”模式下,如果异常值和缺失值较小的情况下,可以忽略减轻部分工作量,而侧重对数据结构合理性进行分析。

一线

驱动力

日常工作中,分析师会接到一些专项分析的需求,首先会搜索脑中的分析体悉,根据业务需求构建相应的分析模型(不只是机器学习模型),根据模型填充相应维度表,这些维度特征表能够被使用的前提是假设已经清洗干净了。
但真正的原始表是混乱且包含了很多无用的冗余特征,所以能够根据原始数据清洗出相对干净的特征表就很重要。
前两天在Towards Data Science上看到一篇文章,讲的是用Pandas做数据清洗,作者将常用的清洗逻辑封装成了一个个的清洗函数。

三.格式内容清洗

如果数据是由系统日志而来,那么通常在格式和内容方面,会与元数据的描述一致。而如果数据是由人工收集或用户填写而来,则有很大可能性在格式和内容上存在一些问题,简单来说,格式内容问题有以下几类:
1、时间、日期、数值、全半角等显示格式不一致
  这种问题通常与输入端有关,在整合多来源数据时也有可能遇到,将其处理成一致的某种格式即可。
2、内容中有不该存在的字符
  某些内容可能只包括一部分字符,比如身份证号是数字+字母,中国人姓名是汉字(赵C这种情况还是少数)。最典型的就是头、尾、中间的空格,也可能出现姓名中存在数字符号、身份证号中出现汉字等问题。这种情况下,需要以半自动校验半人工方式来找出可能存在的问题,并去除不需要的字符。
3、内容与该字段应有内容不符
  姓名写了性别,身份证号写了手机号等等,均属这种问题。但该问题特殊性在于:并不能简单的以删除来处理,因为成因有可能是人工填写错误,也有可能是前端没有校验,还有可能是导入数据时部分或全部存在列没有对齐的问题,因此要详细识别问题类型。
格式内容问题是比较细节的问题,但很多分析失误都是栽在这个坑上,比如跨表关联或VLOOKUP失败(多个空格导致工具认为“成于念”和“成 于 念”不是一个人)、统计值不全(数字里掺个字母当然求和时结果有问题)等等,需要大家重点关注。
  数据质量是数据经营分析的基础,如何确保最终导入的数据质量是我们必须要引起重视的问题之一。只有通过解决数据的信度问题和效度的问题,才能为构建分析指标体系夯实数据基础。
--END--

5大SQL数据清洗方法!

文章来源于数据管道 ,作者宝器原文链接:https://mp.weixin.qq.com/s/6g7-v8acuXZkQi8RiXjCSA

https://towardsdatascience.com/the-simple-yet-practical-data-cleaning-codes-ad27c4ce0a38

而公司的业务数据一般存储在数据仓库里面,数据量很大,这时候用Pandas处理是不大方便的,更多时候用的是HiveSQL和MySql做处理。
基于此,我拓展了部分内容,写了一个常用数据清洗的SQL对比版,脚本很简单,重点是这些清洗场景和逻辑,大纲如图:

热点

驱动力

缺失值:NULL做运算逻辑时,返回的结果还是NULL,这可能就会出现一些脚本运行正确,但结果不对的BUG,此时需要将NULL值填充为指定值。

01 删除指定列、重命名列

场景:
多数情况并不是底表的所有特征(列)都对分析有用,这个时候就只需要抽取部分列,对于不用的那些列,可以删除。
重命名列可以避免有些列的命名过于冗长(比如Case When 语句),且有时候会根据不同的业务指标需求来命名。

场景:理解用户行为的重要一项是去假设用户的心理,这会用到用户的反馈意见或一些用研的文本数据,这些文本数据一般会以字符串的形式存储在数据库中,但用户反馈的这些文本一般都会很乱,所以需要从这些脏乱的字符串中提取有用信息,就会需要用到文字符串处理函数。

删除列Python版:
df.drop(col_names, axis=1, inplace=True)
删除列SQL版:
1、select col_names from Table_Name
2、alter table tableName drop column columnName
重命名列Python版:
df.rename(index={'row1':'A'},columns ={'col1':'B'})
重命名列SQL版:
select col_names as col_name_B from Table_Name

因为一般情况下是没有删除的权限(可以构建临时表),反向思考,删除的另一个逻辑是选定指定列(Select)。

02 重复值、缺失值处理

场景:比如某网站今天来了1000个人访问,但一个人一天中可以访问多次,那数据库中会记录用户访问的多条记录,而这时候如果想要找到今天访问这个网站的1000个人的ID并根据此做用户调研,需要去掉重复值给业务方去回访。

重复值处理Python版:
df.drop_duplicates()
重复值处理SQL版:
1、select distinct col_name from Table_Name
2、select col_name from Table_Name group bycol_name
缺失值处理Python版:
df.fillna(value = 0)
df1.combine_first(df2)
缺失值处理SQL版:
1、select ifnull(col_name,0) value from Table_Name
2、select coalesce(col_name,col_name_A,0) as value from Table_Name
3、select case when col_name is null then 0 else col_name end from Table_Name

03 替换字符串空格、清洗*%@等垃圾字符、字符串拼接、分隔等字符串处理

热点

驱动力

字符串处理Python版:
## 1、空格处理
df[col_name] = df[col_name].str.lstrip() 
## 2、*%d等垃圾符处理
df[col_name].replace(' &#.*', '', regex=True, inplace=True)
## 3、字符串分割
df[col_name].str.split('分割符')
## 4、字符串拼接
df[col_name].str.cat()
字符串处理SQL版:
## 1、空格处理
select ltrim(col_name) from Table_name 
## 2、*%d等垃圾符处理
select regexp_replace(col_name,正则表达式) from Table_name 
## 3、字符串分割
select split(col_name,'分割符') from Table_name 
## 4、字符串拼接
select concat_ws(col_name,'拼接符') from Table_name 

场景:有时候你需要的特征存储在不同的表里,为便于清洗理解和操作,需要按照某些字段对这些表的数据进行合并组合成一张新的表,这样就会用到连接等方法。

合并处理Python版:
左右合并
1、pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=True,
         suffixes=('_x', '_y'), copy=True, indicator=False,
         validate=None)
2、pd.concat([df1,df2])
上下合并
df1.append(df2, ignore_index=True, sort=False)
合并处理SQL版:
左右合并
select A.*,B.* from Table_a A join Table_b B on A.id = B.id
select A.* from Table_a A left join Table_b B on A.id = B.id
上下合并
## Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
## Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
select A.* from Table_a A 
union
select B.* from Table_b B 

04 合并处理

热点

驱动力

# UNION 因为会将各查询子集的记录做比较,故比起UNION ALL ,通常速度都会慢上许多。一般来说,如果使用UNION ALL能满足要求的话,务必使用UNION ALL。

场景:假如现在你是某宝的分析师,要分析今年不同店的不同品类销售量情况,需要找到那些销量较好的品类,并在第二年中加大曝光,这个时候你就需要将不同店里不同品类进行分组,并且按销量进行排序,以便查找到每家店销售较好的品类。

窗口分组Python版:
df['Rank'] = df.groupby(by=['Sale_store'])['Sale_Num'].transform(lambda x: x.rank(ascending=False))
窗口分组SQL版:
select 
  * 
from
  (
  Select 
    *,
    row_number() over(partition by Sale_store order by Sale_Num desc) rk
  from 
    table_name
  ) b where b.rk = 1

05 窗口函数的分组排序

Demo数据如上,一共a,b,c三家店铺,卖了不同品类商品,销量对应如上,要找到每家店卖的最多的商品。

可以很清晰的看到,a店铺卖的最火的是蔬菜,c店铺卖的最火的是鸡肉,b店铺?
嗯,b店铺很不错,卖了888份宝器狗。
总结,上面的内容核心是掌握这些数据清洗的应用场景,这些场景几乎可以涵盖90%的数据分析前数据清洗的内容。而对于分析模型来说,SQL和Python都是工具,如果熟悉SQL,是能够更快速、方便的将特征清洗用SQL实现。

《驱动力》
联系电话:15801365057
地址:北京市朝阳区朝外大街甲6号
邮箱:kai.zhao@yeepay.com

数据驱动变革

Copyright © 2024 陕西妙网网络科技有限责任公司 All Rights Reserved

增值电信业务经营许可证:陕B2-20210327 | 陕ICP备13005001号 陕公网安备 61102302611033号