数据质量及认知
认知数据
当我们拿到一个数据集,我们应该如何去认知这个数据集。正确的步骤应该是 数据源质量 -> 数据类型 -> 数据集质量 -> 平均水平 -> 数据分布 -> 量变关系 -> 多维交叉。
仔细审核数据源的质量
经验教训告诉我们,在拿到数据集后,花些时间去审核数据源的质量都不为过。数据源,分为两部分,一部分是数据库中的表,一部分是取数代码,也就是 sql代码。 对于本次电商项目,那么数据源的表就是 DDS_EMALL_ALIPAY_* 的20张表,而取数代码,就是生产数据进入数仓时的逻辑(全部表做了拉链,但是少部分表,真正用拉链表做了状态更新)
需要明确的几个问题
-
表中的字段有没有在近期改动?做了什么样的改动?
就拿爬虫数据来说,爬虫的数据的量级可能变化(代码或者网页变化导致)
- 表中的字段是不是名副其实的字段?
- 该表谁负责维护?有没有定期维护?
-
该表是否是中间表?他的字段内容是从哪里来的?
知道数据源的来源是很重要的。搞清楚数据流向有利于更有把握阐述问题。
- 该表是以什么样的频率刷新数据?
尤其警惕数仓的中间表
- 数仓的表大多是其他表合成而来的,这些表的数据质量往往难以保证
- 数仓某些表可能是某个短期需求的产物,做完之后就没有人维护了
- 中间表往往存在多层的引用,即某张中间表某个字段的来源来自于另一张中间表,甚至交叉引用,这样字段的质量更难保证
取数代码常见错误
- 限制条件错误。限制两件的错误往往出现在多次使用的代码中。这句话的具体场景,是某些时候,我们使用的是高频使用的代码,这些代码根据不同的业务方需求,去临时的改一些限制条件,而这些限制条件我那个网是相互关联的,改了一个没改另一个,导致取得的数据不准确。
- 连接表错误。跨表查询时,没有清晰的思路,一会left,一会inner。
- 取出多余的字段。第一导致运算负荷增加,第二增加其他成员的学习成本。
- 计算方式出错。
提升数据集的质量
对于数据集的质量,往往就需要做一些逐步做一些东西。处理数据集中的垃圾(特殊符号,对于模型,中文字就是特殊字符),处理空值,处理异常值,处理异常字段,统一数据类型和单位。而做一些就相当于在看照片前,将照片表面上的灰层去掉,将缺失的像素添上,将马赛克修掉。
清理垃圾数据
-
字符编码
常见的 utf-8,gbk,gb2312。 最常见的还有 utf-8 with bom 和 utf-8 without bom,这中间是有区别的。oracle导出是 utf-8 with bom, 需要转成 without
处理空值的技巧
很多时候我们是直接删除空值,但是 如果空值的行数超过1%,我们就需要去思考为什么是空值。
其实我们遇到的大多数空值问题是这样的场景。什么什么删选条件对某个id 做聚合。
异常值和异常字段的处理
异常值往往需要我们好好的查看,对数据进行排序后,发现某些数值特别夸张,或者文本特别长。 对于数值变量,是有数值型变量异常值的判断方法。
统一数据类型和单位
多个日期字段统一为 date 或者 timestrip。等等等 还有一些量级,比如说数据单位是什么,不要有的是 元,有的是万元。
必要的描述统计分析
描述统计的内容才是数据认知的核心技能。 描述统计笼统说就是包含了平均数,方差,标准差,最大最小值,四分位数,峰度,偏度等一系列统计量。 描述统计的过程就是让你快速的从一堆数据中抽象出信息的过程。
统计指标
中位数能够避免数据的平均数受到异常值的影响 众数真正的价值,我觉得并不是用在数值型的数据中,而是用在类别型的数据中
数据的稳定性
标准差数值的大小,衡量了数据序列的波动情况,即稳定性。我认为任何风险衡量的模型,其本质都离不开衡量波动性,即方差与标准差。一个数据的波动性越大,说明它所涵盖的信息量越大,信息量越大,不可知的因素就一定会更多,因此风险会更大。
衡量两个数据序列间相互波动的情况是有方法的,我们称其为协方差。假设有A和B两组数据,数字个数相同,AB的协方差就是A中的数值与A均值的差乘以B中的数值与B的均值的差,再除以A组数据中数字的个数。
数据分布
五数
深入认知数据的分布特征
频率分布图实在是观察数据分布的第一神器。画出两个(一个是分箱上的柱状图,一个是累计分布的折线图)
相关性
利用相关性可以干嘛。
- 利用相关系数来发掘数据间隐藏的联系。对于数值型的指标做一个相关系数的矩阵,查看所有指标的两两之间的相关系数。
- 利用相关系数来减少统计指标。针对某项业务涉及指标体系是,我们会罗列很多指标,但是过多的指标会给后续的报告制作,信息解读和产品开发都带来巨大的成本。那么相关系数就是删选指标的一种条件
- 利用相关系数来验证主观判断。决策层往往主观的形成一些逻辑关系,觉得什么影响到什么,到底有没有影响,可以快速的计算出一个相关系数再做判断。相关系数的应用能让决策层更冷静的作出判断。虽然相关关系并不是因果关系。