数据质量测试:测试数据有效性和准确性的方法

2023-10-31

以下为作者观点,来看看你认同吗?

如果西西弗斯(编者注:希腊神话中的人物)是一个数据分析师或数据科学家,他在山上滚动的巨石将是他的数据质量保障。即使所有获取、处理和建模的工程流程都无懈可击,但在数据管道的任何阶段测试数据质量的能力,以及面对 "Is this OK "的问题,已经够难了。

为什么呢?因为很难定义OK的含义。

图片

传统上,数据质量被分成6个方面。

  • 准确性:一项信息在多大程度上反映了现实?
  • 完备性:它是否满足你对全面性的期望?
  • 连贯性:存储在一个地方的信息与存储在其他地方的相关数据是否一致?
  • 及时性:当你需要时,你的信息是否可用?
  • 有效性:信息是否有特定的格式、类型或大小?它是否遵循业务规则/最佳实践?
  • 完整性:不同的数据集能否被正确地连接起来,以反映一个更大的画面?关系是否被很好地定义和实施?

这些维度是在对设计数据仓库采取广泛的观点时定义的。考虑了所有定义和收集的数据集,它们之间的关系,以及正确服务于组织的能力。

当我们看一个单一的数据集时,我们的质量考虑就比较“狭窄”:

  • 它不需要完整性,因为其他数据集可能会弥补。
  • 一致性和完整性是不相关的,因为其他数据集没有被考虑。
  • 时效性主要取决于工程管道的运作,而不是数据的质量。

在我们的案例中,问一个数据集是否可以,等于问 “它是否有效和准确?”。

在这篇文章中,我将描述有效性测试,分解准确性测试的概念,并回顾现有的测试框架。

验证:元数据测试

元数据是描述数据的信息,而不是数据本身。例如,如果数据是一个表,元数据可能包括模式,例如列的数量,以及每一列中变量的名称和类型。如果数据是在一个文件中,文件格式和其他描述性参数,如版本、配置和压缩类型可能是元数据的一部分。

测试的定义很直接:对元数据的每个值都有一个期望,这个期望来自于组织的最佳实践和它必须遵守的规定。如果你是一个软件工程师,这种类型的测试非常像一段代码的单元测试。就像单元测试覆盖率一样,可能需要一些时间来创建所有这些测试,但达到高测试覆盖率是可能的。

每当元数据改变时,维护测试也是需要的。当然期望值往往有差距,当我们习惯于在改变代码时更新我们的单元测试时,我们必须愿意投入同样的时间和注意力,在我们的模式演变时维护元数据的验证。

数据准确性的三种类型

类型1:入门级的事实核查

我们收集的数据来自于我们周围的现实,因此它的一些属性可以通过与已知记录的比较来验证,例如:

  • 这个地址是真实的吗?
  • 这是一个活跃的网页吗?
  • 我们是否出售这个名字的产品?
  • 对于价格栏,其数值是否为非负值?
  • 对于一个强制性的字段,它不是空的吗?
  • 值来自于一个给定的范围,所以最小和最大是已知的。

获取验证值通常需要查询另一个能够可靠地提供答案的数据集。这个数据集可以是公司内部的,比如人力资源系统中的雇员记录。以及公司外部的来源,如街道、城市、国家注册数据库等。

一旦获得了验证值,测试本身就是一个简单的比较/包含查询,其准确性仅限于所用的外部数据集的准确性。

这个测试验证了数据本身,而不是其元数据。最好是在收集数据的时候尽可能地进行这种验证,以避免准确性问题。例如,如果数据是由一个人填表收集的,数字表格可以只提供有效的选项。由于这并不总是可能的,建议在获取阶段对数值进行验证。

类型2:设置级别健全性

事实核查是测试单一记录中的一个值。当涉及到大数据时,我们需要测试我们拥有的集合的属性。这个集合可能包括来自某个时间段的数据,来自某个操作系统的数据,ETL过程的输出,或者一个模型。不管它的来源是什么,它作为一个集合都有我们想要验证的特征。这些特征是统计学上的,比如说:

  • 数据预计来自于一个给定的分布。
  • 平均数、方差或中位数的值被预期在一个给定的范围内的概率很高。

统计学测试仍然需要你知道预期,但你的预期现在有了不同的形式。

  • 这个数据来自这个分布的概率够高吗?
  • 这一栏的平均值应该在这个范围内,概率为95%。

想象一下,一张保存着扑克游戏中发给玩家的手牌的表格。在这种情况下,可以预先计算出手牌的预期分布。

我们进行的测试将查看持有发牌手数的那一列的数值,并询问,这组数值来自预期分布的概率是多少?

在这个统计测试中,定义通过/失败的参数将必须是概率性的。如果分布是均匀的,概率小于X%,你会得到一个警报。当然,你宁愿手动检查一个被警告的数据集,也不愿意让一个错误连带着进入你的数据管道。

类型3:基于历史的集合级别的正确性

就像统计准确性测试一样,我们要看的是一组记录的属性。只是在这种情况下,我们没有一个现实世界的真相来源可以依赖。我们有数据集本身的历史:同一个数据集随着时间的推移而演变。

我们可以使用这些历史数据来创建一个数据特征的基线,然后测试今天的新数据集是否与基线一致。

我们可以从历史数据中推断出一些特征的例子。

  • 某一列中数值的期望值和方差。
  • 某一列中数值的分布,如一天中每分钟的事件数量。
  • 寻找数据的特征和它们的预期分布。
  • 预计随着时间的推移,会有一定的季节性,例如黑色星期五的销售高峰,周末的流量较少。
  • 运行异常检测算法,查看特征的历史,看看当前的值是否正常。

学习基线不仅为测试结果增加了概率方面,也为基线值的有效性增加了概率。我们执行与类型2相同的统计测试,但我们对其正确性有一个额外的风险,因为我们所比较的基线只有一定的概率是正确的,因为它是从历史数据中统计推导出来的。

我们还应该进行这个测试吗?如果基线正确的概率足够高,而且你明智地使用了阈值,那么绝对应该。建议你记住,警报系统需要在假阳性和假阴性之间取得平衡。

  • 假阴性:测试失败,而它本应通过。
  • 假阳性:测试通过了,而它应该是失败的。

你应该根据业务需要,以优化所需错误的方式构造你的测试。你会有错误,所以要确保你有你能接受的错误,而且是高概率的。

推荐几个数据质量测试框架工具

Deequ

一个来自AWS实验室的开源工具,可以帮助你定义和维护你的元数据验证。Deequ是一个建立在Apache Spark之上的库,用于定义 “数据的单元测试”,衡量大型数据集的数据质量。Deequ适用于表格数据,例如CSV文件、数据库表格、日志、扁平化的json文件。基本上任何你能装入Spark数据框架的东西。

该项目正在努力发展到上述的准确性测试,但其主要能力是在验证领域内。

Great Expectations

同样专注于验证,这个开源工具允许轻松地集成到你的ETL代码中,并可以测试来自SQL或文件接口的数据。由于它的结构是一个日志系统,它可以通过文档格式使用,并从定义的测试中创建自动文档。它还提供对数据进行剖析,并自动生成测试期间断言的预期。

Torch by Acceldata

Torch允许使用一个基于规则的引擎进行验证。可以根据你自己的领域专业知识和Torch提供的大量规则来定义规则。该系统提供了一些与数据集历史分析有关的能力,但这些都是非常基本的第二类测试。Acceldata为数据管道的可观察性提供了一套更广泛的工具,涵盖了数据质量的6个维度的其他方面,Torch是其模块之一。

OwlDQ

OwlDQ是基于对数据集的动态分析和对预期的自动适应。规则允许对要跟踪的特征进行定义,以及通过/失败的概率,但繁重的数据特征分析则留给了OwlDQ引擎。

MonteCarlo

这是一个无代码的实现可观察性平台。它使用机器学习来推断和学习你的数据是什么样子的,主动识别数据问题,评估其影响,并通过与普通运营系统的集成发出警报。它还可以进行根本原因分析。

Databand

一个管道元数据监控工具,也提供开箱即用的数据质量指标(如数据模式、数据分布、完整性和自定义指标),无需修改代码。


资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据质量测试:测试数据有效性和准确性的方法 的相关文章

  • 新入职一个00后卷王,每天加班到2点,太让人崩溃了····

    在程序员职场上 什么样的人最让人反感呢 是技术不好的人吗 并不是 技术不好的同事 我们可以帮他 是技术太强的人吗 也不是 技术很强的同事 可遇不可求 向他学习还来不及呢 真正让人反感的 是技术平平 却急于表现自己的人 每天加班到12点 在老
  • 软件测试|web自动化测试神器playwright教程(三十八)

    简介 在我们使用selenium时 我们可以获取元素的属性 元素的文本值 以及输入框的内容等 作为比selenium更为强大的web自动化测试神器 playwright也可以实现对元素属性 文本值和输入框内容的抓取 并且实现比seleniu
  • 软件测试|使用Python读写yaml文件,你会了吗?

    简介 YAML YAML Ain t Markup Language 是一种可读的数据序列化格式 它常用于配置文件和数据交换 Python 提供了许多库来处理 YAML 文件 在本文中 我们将探讨如何使用 PyYAML 库来读取和写入 YA
  • 软件测试|如何使用selenium处理iframe富文本输入框

    简介 在网页开发中 富文本框是常见的元素 用于输入富文本内容 如富文本编辑器或邮件编辑器 如果我们要使用Python和Selenium进行自动化测试或操作这种富文本框 可能会遇到一些挑战 本文将详细介绍如何使用Python和Selenium
  • 跨平台UI自动化框架:Airtest,游戏开发和应用测试的利器

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 测开和测试平台是否有存在的必要?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • msyql 异常,别干着急,70%的问题都在这里!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 新手也能看懂的【前端自动化测试入门】

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 软件测试中的白盒测试,这些技巧你知道吗?

    对于很多刚开始学习软件测试的小伙伴来说 如果能尽早将黑盒 白盒测试弄明白 掌握两种测试的结论和基本原理 将对自己后期的学习有较好的帮助 今天 我们就来聊聊黑盒 白盒测试的相关话题 1 黑盒测试的方法和小结 最常见黑盒测试方法包括 边界值 等
  • 新手也能看懂的【前端自动化测试入门】!

    前言 最近在网上搜索前端自动化测试相关的文档 但是发现网上的文章都是偏使用 没有把一些基础概念说清楚 导致后续一口气遇到一些 karma Jasmine jest Mocha Chai BDD 等词汇的时候很容易一头雾水 这次一方面整理一下
  • 甜蜜而简洁 —— 深入了解Pytest插件pytest-sugar

    在日常的软件开发中 测试是确保代码质量的关键步骤之一 然而 对于测试报告的生成和测试结果的可读性 一直以来都是开发者关注的焦点 Pytest插件 pytest sugar 以其清晰而美观的输出 为我们提供了一种愉悦的测试体验 本文将深入介绍
  • Python常用的自动化小脚本!

    一 list转json string转json 可以使用Python内置的 json 模块将列表 List 和字符串 String 转换成JSON格式 List转JSON假设我们有一个列表 List my list apple banana
  • 探索自动化测试断言:提升测试效率与质量的关键!

    前言 断言在自动化测试中起着关键的作用 它是验证测试结果是否符合预期的重要手段 如果在自动化测试过程中忽视了断言 那么这个测试就失去了其本质的意义 因为我们无法得知测试结果是否达到了预期的效果 因此 断言在自动化测试中的重要性不言而喻 那么
  • 做测试不会 SQL?超详细的 SQL 查询语法教程来啦!

    前言 作为一名测试工程师 工作中在对测试结果进行数据比对的时候 或多或少要和数据库打交道的 要和数据库打交道 那么一些常用的sql查询语法必须要掌握 最近有部分做测试小伙伴表示sql查询不太会 问我有没有sql查询语法这一块的文档可以学习
  • 程序员找工作难!拿到外包公司的 offer 我应该去么?

    引言 前一阵子有一个帖子引起了非常广泛的讨论 描述的就是一个公司的外包工作人员 加班的时候因为吃了公司给员工准备的零食 被公司的HR当场批评 这个帖子一发出来 让现在测试行业日益新增的外包公司备受关注 那么外包公司和非外包公司有什么样的不一
  • 外包干了2个月,技术倒退2年。。。

    先说一下自己的情况 本科生 20年通过校招进入深圳某软件公司 干了接近4年的 功能测试 今年国庆 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了3年的女朋
  • Web自动化测试 —— capability参数配置

    一 capability概述 capability是webdriver支持的标准命令之外的扩展命令 配置信息 配置web驱动属性 如浏览器名称 浏览器平台 结合selenium gird完成分布式 兼容性测试 官网地址 https www
  • 一文从0到1手把手教学UI自动化测试之数据驱动!

    在UI的自动化测试中 我们需要把测试使用到的数据分离到文件中 如果单纯的写在我们的测试模块里面 不是一个好的设计 所以不管是什么类型的自动化测试 都是需要把数据分离出来的 当然分离到具体的文件里面 文件的形式其实有很多的 这里主要说明JSO
  • Airtest自动化测试工具

    一开始知道Airtest大概是在年初的时候 当时 看了一下官方的文档 大概是类似Sikuli的一个工具 主要用来做游戏自动化的 通过截图的方式用来解决游戏自动化测试的难题 最近 移动端测试的同事尝试用它的poco库来做自动化 看样子还不错
  • 深入解析 YAML 配置文件:从语法到最佳实践

    一 认识YAML YAML YAML Ain t Markup Language 是一种人类可读的数据序列化语言 它的设计目标是使数据在不同编程语言之间交换和共享变得简单 YAML采用了一种简洁 直观的语法 以易于阅读和编写的方式表示数据结

随机推荐

  • kali linux破解wifi密码-超详细过程

    前期准备 VMware Workstation虚拟机 在虚拟机安装好kail linunx系统 无线网卡 芯片为3070或者1887L都支持Linux 或者直接某宝上查kali无线网卡 一 打开终端 用airmon ng命令查看 如果出现无
  • Matplotlib学习---用matplotlib画散点图,气泡图(scatter plot, bubble chart)

    Matplotlib里有两种画散点图的方法 一种是用ax plot画 一种是用ax scatter画 一 用ax plot画 ax plot x y marker o color black 二 用ax scatter画 ax scatte
  • jav中spark迁移hive到mongo(更新数据)

    业务中的数据库使用的mongo 离线使用spark计算的每天统计指标需要累加到历史指标中 然后将结果写到mongo库中 如果mongo库中已经有这条记录则覆盖 mongo库中没有此记录则为新增 我们如果根据 MongoSpark save
  • StringUtils.isAnyBlank() StringUtils.isNoneBlank()

    StringUtils isAnyBlank 是否包含任何真空值 包含空格或空值 StringUtils isAnyBlank null true StringUtils isAnyBlank null foo true StringUti
  • Dapp开发教程一 Asch Dapp Hello World

    1 基本流程 Asch有三种net localnet testnet mainnet 后两种是发布到线上的 可通过公网访问 第一种localnet是运行在本地的 只有一个节点的私链 主要是为了方便本地测试和开发 Dapp的开发同样要涉及到这
  • HDFS的副本数量配置

    众所周知 hdfs的默认副本数量是3个 配置在 etc hadoop conf hdfs site xml中
  • uni-app多端开发注意事项

    关于vue 1 注意 如果使用老版的非自定义组件模式 即manifest中 usingComponents false 部分模版语法不支持 但此模式已于2019年11月起下线 2 data 必须声明为返回一个初始数据对象的函数 否则页面关闭
  • iOS进阶—Runtime基础

    iOS进阶 目录 GitHub参考 RunTime 基础 一个程序的执行过程 大概就是代码 gt 编译链接 gt 执行 C语言 import
  • Acwing-4645. 选数异或

    暴力解法 TLE了 呜呜呜呜 include
  • Linux系统下安装Redis

    文章目录 下载Redis 上传至Linux服务器 安装Redis 基本环境安装 运行Redis redis benchmark性能测试 下载Redis 下载地址 https redis io 上传至Linux服务器 可借助任何一款ftp软件
  • IT人员必学最基础知识(一)——总括

    作为一个真正的IT人员 我们不仅要懂得高级语言的编程使用 更要懂得电脑最基础的知识 这是我们成为杰出的IT人员的基石 只要踏上这些基础知识我们才能走的更高 首先我们要懂得电脑是如何工作的 大千世界无奇不有 繁彩纷呈 而一台小小的电脑就可以处
  • 算法入门:双指针法

    一 双指针法 例子1 求一个有序数组中和 8的下标 设置两个不同的指针 或者头 或者尾 在一个递增的序列中 根据结果分类 说明指针的下一步应该怎么移动 结果分类 a i b j 8则i j 都相互靠近 a i b j lt 8 需要移动指针
  • 使用react-grid-layout和echarts-for-react实现一个支持拖拽的自定义响应式dashboard页面

    文章目录 使用react grid layout和echarts for react实现一个支持拖拽的自定义响应式dashboard页面 需求概要 技术栈 简单实现 参考 使用react grid layout和echarts for re
  • python画聚类树状图_聚类分析python画树状图--Plotly(dendrogram)用法解析

    1 前言 聚类分析是机器学习和数据分析中非常常见的分类方法 当我们用到层次聚类 系统聚类 时 最常用的分析方法就是绘制树状图 比较常见的统计软件像SPSS SAS R等都可以直接绘制树状图 比较简单 今天主要介绍下python怎么绘制 2
  • 校园欺凌——四位学生的乱伦之战!!!

    校园欺凌 Impossible 学生之战 Non existent 乱伦 Take leave ok 兄弟姊妹们 今天我们来学习循环结构第一章 gt gt gt While与Do Whlie 循环 重复得做某一件事情 Such as 打印5
  • QVariant的用法

    前言 QVariant这个类很神奇 或者说方便 很多时候 需要几种不同的数据类型需要传递 如果用结构体 又不大方便 容器保存的也只是一种数据类型 而QVariant则可以统统搞定 介绍 帮助文档上说 The QVariant class a
  • 云化背景下的接口测试覆盖率自动化检查

    一 问题来源 在云化场景下 API的测试覆盖是一项重要评估与考察指标 除了开发者自测试外 UT 还可以利用云化测试平台 流水线等方法进行相关指标的检查与考核 利用这种方法既可以减轻开发者测试工作量 不必在本地做大量的 降低人为指标灰度空间
  • Android10.0 Binder通信原理(八)-Framework层分析

    Android取经之路 的源码都基于Android Q 10 0 进行分析 Android取经之路 系列文章 系统启动篇 Android系统架构Android是怎么启动的Android 10 0系统启动之init进程Android10 0系
  • 虚拟机Ubuntu操作系统最基本终端命令(安装包+详细解释+详细演示)

    虚拟机及乌班图 Ubuntu操作系统 提示 大家需要软件的可以直接在此链接中提取 链接 https pan baidu com s 1 4VHGTlXjIuVhBINeOuBCA 提取码 nd0c 文章目录 虚拟机及乌班图 Ubuntu操作
  • 数据质量测试:测试数据有效性和准确性的方法

    以下为作者观点 来看看你认同吗 如果西西弗斯 编者注 希腊神话中的人物 是一个数据分析师或数据科学家 他在山上滚动的巨石将是他的数据质量保障 即使所有获取 处理和建模的工程流程都无懈可击 但在数据管道的任何阶段测试数据质量的能力 以及面对