数据库的质量保证和质量控制(QA / QC)准则


18

背景

我正在监督从原始文献到数据库的数据输入。数据输入过程容易出错,尤其是因为用户必须解释实验设计,从图形和表格中提取数据并将结果转换为标准化单位。

数据通过Web界面输入到MySQL数据库中。到目前为止,已包含来自> 20个变量,> 100个物种和> 500个引用的超过10,000个数据点。我不仅要检查变量数据的质量,还要检查查询表中包含的数据的质量,例如与每个数据点相关的种类,研究位置等。

数据输入正在进行中,因此QA / QC将需要间歇运行。数据尚未公开发布,但我们计划在未来几个月内发布。

目前,我的质量检查/质量控制涉及三个步骤:

  1. 第二个用户检查每个数据点。
  2. 直观检查直方图每个变量的异常值。
  3. 用户获得虚假结果后报告可疑数据。

问题

  1. 是否有可用于为该数据库开发健壮的QA / QC程序的指南?
  2. 第一步是最耗时的;有什么我可以做的以提高效率吗?

1
这里的读者也将对以下主题感兴趣:基本数据检查测试
gung-恢复莫妮卡

Answers:


25

该答复的重点是第二个问题,但在此过程中,将出现对第一个问题的部分答案(QA / QC程序指南)。

到目前为止,您最好的办法就是在尝试输入时检查数据质量。用户检查和报告是劳动密集型的,因此应在实际可行的情况下,保留给过程的后期使用。

这里有一些原则,准则和建议,它们是从丰富的经验中得出的(与您相比,许多数据库的设计和创建都比您的数据库大得多)。它们不是规则。您不必跟随他们就可以成功和高效;但它们都是出于极好的原因而存在的,因此您应该认真考虑如何偏离它们。

  1. 将数据输入与所有智力要求较高的活动分开。不要让数据输入操作员同时检查,计数等。将他们的工作限制在创建计算机可读的数据传真上,仅此而已。特别是,该原理意味着数据输入表单应反映您最初获取数据的格式,而不是您计划存储数据的格式。在以后将一种格式转换为另一种格式相对容易,但是在输入数据时立即尝试进行转换是一个容易出错的过程。

  2. 创建数据审核跟踪:从数据输入阶段开始,对数据进行任何处理时,都要记录下来并记录过程,以便轻松返回并检查出了什么问题(因为事情会出错)。考虑填写以下字段:时间戳,数据输入操作符的标识符,原始数据的源的标识符(例如报告及其页码)等。存储很便宜,但是查找错误的时间却很昂贵。

  3. 自动化一切。 假设必须重做任何步骤(根据墨菲定律,在最坏的时间),并做出相应的计划。现在不要尝试通过手动执行一些“简单步骤”来节省时间。

  4. 特别是,要创建对数据输入的支持:为每个表(甚至一个电子表格都可以做得很好)做一个前端,以提供一种清晰,简单,统一的方式来获取数据。同时,前端应强制执行“业务”规则:”也就是说,它应该执行尽可能多的简单有效性检查。(例如,pH必须在0到14之间;计数必须为正。)理想情况下,请使用DBMS强制进行关系完整性检查(例如,与测量相关的每种物质确实存在于数据库中)。

  5. 不断地计算事物并检查计数是否完全一致。例如,如果一项研究应该测量10个物种的属性,请确保(一旦数据输入完成)确实报告了10个物种。尽管检查计数很简单并且没有信息,但是它非常适合检测重复和省略的数据。

  6. 如果数据有价值且重要,请考虑独立地两次输入整个数据集。这意味着每个项目将由两个不同的非交互人员在不同的时间输入。这是捕获打字错误,数据丢失等的好方法。交叉检查可以完全自动化。与100%手动重复检查相比,它更快,更容易捕获错误,并且效率更高。(数据输入“人员”可以包括带有OCR的扫描仪之类的设备。)

  7. 使用DBMS来存储和管理数据。电子表格非常适合支持数据输入,但是请尽快将数据从电子表格或文本文件中取出,并进入真实数据库。这可以防止各种隐患,同时增加了对自动数据完整性检查的支持。如果有必要,请使用统计软件进行数据存储和管理,但请认真考虑使用专用的DBMS:它将做得更好。

  8. 输入所有数据并自动检查之后,绘制图片:创建排序的表格,直方图,散点图等,然后全部查看。借助任何完善的统计软件包,这些都可以轻松实现自动化。

  9. 不要要求人们执行计算机可以执行的重复性任务。在这些方面,计算机更快,更可靠。养成编写(和记录)小脚本和小程序的习惯,以执行无法立即完成的任何任务。这些将成为您的审计跟踪的一部分,并使您可以轻松地重做工作。使用适合您任务的平台。(多年来,根据可用的平台,我使用了各种各样的平台,并且都发挥了有效的作用,从C和Fortran程序到AWK和SED脚本,从Excel和Word的VBA脚本到自定义为关系数据库系统,GIS和R和Stata等统计分析平台编写的程序。)

如果遵循这些指南中的大多数指南,则将数据导入数据库的工作中大约有50%-80%是数据库设计和编写支持脚本。通过这样的项目获得90%的资源,并完成不到50%的资源,却仍能按时完成,这很平常:一旦完成所有设置并进行了测试,数据输入和检查就会非常高效。


4
好吧,我非常喜欢这个答案。我要强调的是,在第4点中,您应该使检查保持简单-实际数据中经常会有一些不一致之处,您的入门人员应该可以输入这些信息,但是您将无法预见它们。例如,我确保将日期输入为日期。但我已经不再对日期范围设置硬性规定,而是使用报告进行检查,并与进行数据输入的任何人跟踪越界值。
马特·帕克

5
阻止某人输入他们认为正确的价值观会带来比发现和调查错误更多的错误。
马特·帕克

+1,好答案。我同意马特的
观点

1
@Matt好点,他们两个。我完全同意。关于第一个,一个好的方法是在一个小的代表性数据子集上测试数据输入过程,并彻底解决所有出现的问题。这无法解决所有可能出现的问题,但是可以尽早识别出大多数主要问题并让您有效地处理它们。
whuber

2
添加此信息在一个地方很有用。1.创建一个包含元数据的业务规则文档。包括用于产生衍生变量(例如年龄)的规则。2.如果特别是一个管理数据库,则假定变量会随着时间而变化,例如,添加了新代码。在元数据中,说明更改何时发生,以及这如何影响任何时间序列的工作。3.如果数据库将随着时间的推移添加到数据库中,则日期和时间戳会更改为该数据库。
米歇尔(Michelle)

3

DataOne提供了一组有用的数据管理最佳实践,可以按标签进行过滤。可在http://www.dataone.org/best-practices/quality找到的带有“质量”标记的最佳实践,重申并扩展了@whuber提出的许多观点。以下是其中涵盖的主题列表(按字母顺序):

  • 传达数据质量
  • 确认数据及其元数据中的描述之间的匹配
  • 考虑您要集成的数据的兼容性
  • 制定质量保证和质量控制计划
  • 仔细检查您输入的数据
  • 确保基本的质量控制
  • 备份数据时确保完整性和可访问性
  • 识别异常值
  • 确定估计的值
  • 提供版本信息以供使用和发现
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.