博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
独家 | 一文读懂数据质量和验证检查(附代码)
阅读量:4226 次
发布时间:2019-05-26

本文共 2441 字,大约阅读时间需要 8 分钟。

640?wx_fmt=png

作者:Vinod Kumar 

翻译:季洋

校对:王雨桐

本文约1600字,建议阅读8分钟

本文主要讲述关于数据质量和验证检查的实例,以及运用Apache Spark和Scala采用编码来确保数据质量是多么容易。

大数据和机器学习都是和数据打交道。因此,在系统中保持数据的正确性就非常重要。如果数据不准确,不仅仅会降低系统的效率,还会得到一些不恰当的观点。通过数据质量和验证是确保数据正确性的重要步骤之一。随着数据量的不断增加,噪声数据也随之而来,每天都要引入新的方法和检验以确保数据的质量。由于数据量巨大,需要考虑的另一件事是如何确保快速处理这些检查和验证;例如,一个系统采用高分布式的方法来遍历每一条进入系统的数据。本文将讲述关于数据质量和验证检查的一些例子,以及在Apache Spark和Scala的帮助下运用程序来确保数据质量是多么简单。

数据准确性:指的是观测结果和真实值或可接受为真的值之间的接近度。

  • 空值: 包含空值(null)的记录。如: male/female/null

640?wx_fmt=png

  • 特定值: 某公司的ID号。

640?wx_fmt=png

模式验证:每一批数据必须遵循相同的列名和数据类型。

640?wx_fmt=png

同列下的值重复(如记录中重复的email)

640?wx_fmt=png

唯一性检查: 各记录关于某列值是唯一不重复的,这一点和重复性检查类似。

640?wx_fmt=png

正确性检查:可以使用正则表达式进行检查。例如,我们可以查找包含@的电子邮件id。

640?wx_fmt=png

数据的普及性:你的数据有多及时?假定每天都有数据进入,随后要检查数据并打上时间戳。

数据的质量和验证检查的条目可以源源不绝,但是基于Spark和Scala的方法的好处是,用较少的代码,可以利用海量的数据达到更多目的。

有些时候,一个系统可能有某些特定的需求,这与谁需要这些数据以及以什么形式数据有关;同时这些数据使用者会对数据提出假设。

数据的可用性: 使用者可能对数据有特定要求,如:

  • 列1的值不等于列2的值

  • 列3的值应该等于列1的值加上列2的值

  • 列x的值不应该超过x%的时间

640?wx_fmt=png

然而这些被看作基本的数据验证,还有一些更高级别的检查来确保数据的质量,如:

  • 异常监测:这包括两个主要方面:

比如给定维度,如基于时间的异常。这意味着在任何指定时间范围内(时间片段),记录数不能超过平均值的x%。为了做到这点,运用Spark做法如下:

  • 假定时间片段为1分钟。

  • 首先,需要对时间戳列进行过滤和格式化处理,如此时间戳才能以分钟为单位表示出来。这将产生重复,但是这应该不是问题。

  • 接下来,运用groupBy,

  • 如下: 

    sampledataframe.groupBy("timestamp").count()。

  • 算出平均值,同时找出记录数超出均值x%的那些时间片段(如果存在的话)。 

  • 排序

记录应该遵循一定的顺序。例如,在一天内,某个消费者的数据记录应该是从产生兴趣开始,点击,加载页面,加入购物车,最后以购买结束。这些可能只是部分记录,但它们应该遵循一定的顺序。为了检查顺序,运用Spark做法如下:

  • groupBy("ID") – 以序列号分组

  • 对每一分组运行排序检查

  • 循环依赖:让我用一个例子来解释这点。

  • 如果从列A到列B中取出两列,记录如下:

640?wx_fmt=png

  • 如果应用程序要得到家庭关系结构,这会形成一个环状依赖关系。

  • 故障趋势

考虑到每天都有数据进入系统。让我们设想它的行为或接触点数据。为了简单起见,我们将每天的数据称为一‘批’。在每一批数据中,如果我们都会得到一组完全相同的故障,则一定存在跨批次的故障趋势。

如果故障是源于相同的一组email_id(邮箱号为一列字段),则这可能是自动程式行为的征兆。

  • 数据偏倚:这意味着在图形上数据呈现一个连续的偏差。如:

如果向时间戳上加上30分钟,那么所有的记录都会有这30分钟的隐形偏倚。如此一来,如果预测算法想要使用这些数据,这种偏差将影响结果。

如果用来生成这些数据的算法有学习偏差,那么对一组数据会生成更多的默认值,随后用于其他数据。例如基于购买行为,它会预测出错误的购买者性别。

 

自动程式行为: 通常,一个自动程式行为如下:

  • 它使用相同的唯一标识符生成记录。像前文提到的同一组email_id。

  • 它会在任何特定时间生成网络流量。这是基于时间的异常现象。

  • 它生成的记录有固定顺序:跨数据批次的顺序检查。

原文标题:

Data Quality and Validation

原文链接:

https://dzone.com/articles/java-amp-apache-spark-for-data-quality-amp-validat

译者简介

640?wx_fmt=png

季洋,苏州某IT公司技术总监,从业20年,现在主要负责Java项目的方案和管理工作。对大数据、数据挖掘和分析项目跃跃欲试却苦于没有机会和数据。目前正在摸索和学习中,也报了一些线上课程,希望对数据建模的应用场景有进一步的了解。不能成为巨人,只希望可以站在巨人的肩膀上了解数据科学这个有趣的世界。

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:datapi),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

640?wx_fmt=jpeg640?wx_fmt=jpeg

点击“阅读原文”拥抱组织

你可能感兴趣的文章
dev/kmem 和dev/mem的区别
查看>>
test-definitions/blob/master/auto-test/bigdata/bigdata.sh
查看>>
/test-definitions/blob/master/auto-test/blktrace/blktrace.sh
查看>>
test-definitions/blob/master/auto-test/blogbench/blogbench.sh
查看>>
test-definitions/blob/master/auto-test/boost/boost.sh
查看>>
Java多态性理解
查看>>
git学习网站
查看>>
JavaScript 学习网站
查看>>
cocos2dx java调用c++ -- 字符串传递
查看>>
CCScaleTo与CCScaleBy比较
查看>>
cocos2dx CCObject引用计数,内存释放分析(1)
查看>>
cocos2dx2.X 编译时,传递编译选项
查看>>
ccCArray.cpp 文件
查看>>
cocos2dx 屏幕大小
查看>>
libgdx: 2D Particle Editor工具使用
查看>>
eclipse 给jar库添加源码
查看>>
cocos2.X版本lua端使用定时器的方法
查看>>
lua math.fmod使用注意小数问题
查看>>
lua 时间转化
查看>>
lua学习笔记之五(Lua中的数学库)
查看>>