goodtables是一个检查表格数据的框架。

goodtables的Python项目详细描述


好表py

特拉维斯工作服pypi吉特

goodtables是一个验证表格数据的框架。它可以检查结构 数据(例如,所有行的列数相同)及其内容 (例如,所有日期均有效)。

功能

  • 结构检查:确保没有空行、空头等。
  • 内容检查:确保值具有正确的类型("string"、"number"、"date"等),格式有效("string必须是电子邮件"),并尊重约束("age必须是大于18的数字")。
  • 支持多种表格格式:csv、excel文件、libreoffice、数据包等。
  • 多表数据集的并行验证
  • 命令行界面

目录

开始

安装

< Buff行情>

如果您在MacOS上有构建错误,请尝试使用此解决方案-https://github.com/google/jsonnet/issues/573;issuecomment-433201074

pip install goodtables
pip install goodtables[ods]  # If you need LibreOffice's ODS file support

在cli上运行

goodtables data.csv

使用goodtables--help查看不同的选项。

< H3>运行在python上ning
fromgoodtablesimportvalidatereport=validate('invalid.csv')report['valid']# falsereport['table-count']# 1report['error-count']# 3report['tables'][0]['valid']# falsereport['tables'][0]['source']# 'invalid.csv'report['tables'][0]['errors'][0]['code']# 'blank-header'

您可以阅读关于在python上使用goodtables的更深入的解释 开发人员文档部分。也检查 有关其他示例,请参见"示例"文件夹。

验证

基本检查

不能禁用基本检查,因为它们处理的是goodtables能够读取文件。

<表><广告>检查 说明 < /广告><正文>IO错误由于IO错误导致数据读取错误。http错误由于http错误而导致数据读取错误。源错误由于不支持或内容不一致而导致数据读取错误。方案错误由于方案不正确导致数据读取错误。格式错误格式不正确导致数据读取错误。编码错误由于编码问题导致数据读取错误。

结构检查

这些检查验证文件的结构是否有效。

<表><广告>检查 说明 < /广告><正文>空白标题标题名为空。标题行中的所有单元格都必须有一个值。重复标题有多个同名列。所有列名必须唯一。空行行必须至少有一个非空单元格。重复行无法复制行。附加值一行的列数多于标题。缺少值行的列数少于标题。

内容检查

这些检查验证文件的内容。要使用它们,需要传递表模式。如果没有模式,goodtables可以通过使用推断模式选项来推断它。

如果您的模式只覆盖部分数据,则可以使用推断字段推断其余字段。

最后,如果数据中字段的顺序与模式中的顺序不同,请启用顺序字段选项。

<表><广告>检查 说明 < /广告><正文>架构错误架构无效。不匹配的标题架构中的头名称与数据中的头名称不同。额外页眉数据包含架构中未定义的头。缺少标题数据不包含架构中定义的头。类型或格式错误无法基于此字段的架构类型和格式强制转换该值。必需的约束此字段是必需字段,但不包含任何值。模式约束此字段值应符合定义的模式。唯一约束此字段是唯一的字段,但它包含已在另一行中使用的值。可枚举约束此字段值应等于枚举约束中的一个值。最小约束此字段值应大于或等于约束值。最大限制此字段值应小于或等于约束值。最小长度约束此字段值的长度应大于或等于架构约束值。最大长度约束此字段值的长度应小于或等于架构约束值。

高级CHECKS

<表><广告>检查 说明 < /广告><正文>黑名单值确保没有具有黑名单值的单元格。偏离值确保数字与平均值的标准偏差在一定范围内。连续值 确保数字是连续的。截断值检测可能被截断的值。自定义约束基于其他列的值定义约束(例如value*quantity==total)。

黑名单值

有时我们必须检查一些我们不想在数据集中包含的值。它接受以下选项:

<表><广告>选项 键入说明 < /广告><正文>列内部/结构列号或名称黑名单str列表黑名单值列表

考虑以下csv文件:

id,name
1,John
2,bug
3,bad
5,Alex

让我们检查一下名称列不包含有错误错误的行:

fromgoodtablesimportvalidatereport=validate('data.csv',checks=[{'blacklisted-value':{'column':'name','blacklist':['bug','bad']}},])# error on row 3 with code "blacklisted-value"# error on row 4 with code "blacklisted-value"

偏离值

此检查有助于在包含正数的列中查找轮廓。它接受以下选项:

<表><广告>选项 键入说明 < /广告><正文>列内部/结构列号或名称平均值 STR 平均值类型,"平均值"、"中值"或"模式"间隔 INT/TDT>值必须在范围内平均值±标准偏差*间隔

考虑以下csv文件:

temperature
1
-2
7
0
1
2
5
-4
100
8
3

我们使用中值得到列值的平均值,并允许3个标准差的间隔。对于我们的情况,中值是2.0标准差是29.73所以所有有效值必须在[-87.19,91.19]区间内。

report=validate('data.csv',checks=[{'deviated-value':{'column':'temperature','average':'median','interval':3}},])# error on row 10 with code "deviated-value"

顺序值

当一个列应该有连续递增的整数时,这种检查非常常见。它接受以下选项:

<表><广告>选项 键入说明 < /广告><正文>列内部/结构列号或名称

考虑以下csv文件:

id,name
1,one
2,two
3,three
5,five

让我们检查一下id列是否包含顺序整数:

fromgoodtablesimportvalidatereport=validate('data.csv',checks=[{'sequential-value':{'column':'id'}},])# error on row 5 with code "sequential-value"

截断值

一些数据库或电子表格软件(如mysql或excel)可能会在保存时截断值。有一些著名的启发式方法可以发现这个错误的值。有关详细信息,请参见https://github.com/propublica/guides/blob/master/data bulletproofing.md

考虑以下csv文件:

pip install goodtables
pip install goodtables[ods]  # If you need LibreOffice's ODS file support
0

为了检测所有可能被截断的值,我们可以使用截断的值检查:

pip install goodtables
pip install goodtables[ods]  # If you need LibreOffice's ODS file support
1

自定义约束

使用表模式,我们可以为单个字段创建约束,但有时这还不够。使用自定义约束检查,可以根据给定的有限python表达式检查每一行,在该表达式中,变量名解析为列值。请参阅可用运算符的列表。它接受以下选项:

< DL>
约束(str)
约束定义(例如col1+col2==col3

考虑这样的csv文件:

pip install goodtables
pip install goodtables[ods]  # If you need LibreOffice's ODS file support
2

假设我们的B商业规则是在奖金上要害羞:

pip install goodtables
pip install goodtables[ods]  # If you need LibreOffice's ODS file support
3

验证报告格式

验证报告遵循在 goodtables/schemas/report.json。举个例子,这是 在文件上运行goodtables--row limit 5--json生成的报告 数据/datapackages/invalid/datapackage.json

pip install goodtables
pip install goodtables[ods]  # If you need LibreOffice's ODS file support
4

开发人员文档

语义版本控制

我们遵循语义版本控制规范来定义我们的版本。 数字。这意味着当有 打破改变。因此,我们建议您显式指定 依赖项列表中的goodtables版本(例如setup.pyrequirements.txt)。

验证

goodtables验证表格数据集以查找结构和内容 错误。假设您有一个名为invalid.csv的文件。让我们验证一下:

pip install goodtables
pip install goodtables[ods]  # If you need LibreOffice's ODS file support
5

我们还可以传递远程uri而不是本地路径。它支持csv,xls, xlsx、ods、json和制表器支持的所有其他格式 图书馆. < /P>

验证报告

validate()方法的输出是一个报表字典。它包括 信息(如果数据有效)、错误计数、表报表列表 个别检查失败等。

生成的报告将如下所示:

pip install goodtables
pip install goodtables[ods]  # If you need LibreOffice's ODS file support
6

RASE报告错误是标准化和描述的 在里面 数据质量规范。 错误分为以下类别之一:

  • -无法加载或分析数据
  • 结构-一般表格错误,如重复的标题
  • 模式-检查表模式时出错
  • 自定义-自定义检查错误

检查

check是goodtables中的主要验证参与者。启用的检查列表可以 使用checksskip_checks参数进行更改。让我们探讨一下选择 例如:

pip install goodtables
pip install goodtables[ods]  # If you need LibreOffice's ODS file support
7

默认情况下,数据集将根据所有可用的数据质量规范进行验证 错误。某些检查可能无法进行验证。例如,如果 未提供架构,将只进行结构的检查。

预设值

goodtables支持不同格式的表格数据集。他们被叫来了 预置。表格数据集是一些可以在数据列表中拆分的数据。 表格,如:

dataset

我们可以使用validate()预设参数更改预设。通过 默认情况下,它将从源代码推断,返回到。验证 a数据包,我们可以做到:

pip install goodtables
pip install goodtables[ods]  # If you need LibreOffice's ODS file support
8

这将验证数据包中的所有表格资源。

也可以使用"嵌套"预设验证文件列表。做 因此,validate()的第一个参数应该是字典列表,其中 字典中的每个键都以validate()上的参数命名。例如:

pip install goodtables
pip install goodtables[ods]  # If you need LibreOffice's ODS file support
9

类似于:

goodtables data.csv
0

区别在于goodtables并行地验证多个表,所以 使用"嵌套"预设进行呼叫应该会更快。

贡献

这个PR项目遵循开放知识国际编码标准。

我们建议您使用virtualenv将goodtables与 机器中的软件包。

要安装goodtables和开发依赖项,请运行:

goodtables data.csv
1

要运行测试,请使用:

goodtables data.csv
2

FAQ

如何添加新的自定义支票?

要创建自定义检查,用户可以使用checkdecorator。这样,可以覆盖内置检查(使用规范错误代码,如重复行),也可以添加自定义错误检查(使用类型上下文位置参数):

goodtables data.csv
3

目前,本文档部分不完整。有关检查协议的详细信息,请参见内置检查。

如何添加对新表格文件类型的支持?

要创建自定义预设,用户可以使用预设装饰器。这样就可以覆盖内置预设或添加自定义预设。

goodtables data.csv
4

目前,本文档部分不完整。请参阅内置预设以了解有关数据集提取协议的更多信息。

更改日志

这里只描述了打破和最重要的变化。所有发布版本的完整变更日志和文档都可以在格式良好的提交历史记录中找到。

2.2版

  • 改进了丢失/不匹配的报头检测(\298

2.1版

  • 错误中添加了一个新的键。to_dictreturn:消息数据

2.0版

中断更改:

  • checks方法签名现在只接收当前行的单元格列表
  • 检查通过返回error对象的数组引发错误
  • 单元格具有行号键中的行号
  • 具有zip扩展名的文件被假定为数据包,因此goodtables mydatapackage.zipworks
  • goodtables cli的改进(233
  • 新的goodtables init<;data paths>;命令,创建一个新的datapackage.json文件作为参数传递,以及它们的推断模式。

错误修复:

  • 截断的值修复错误检查日期字段(\250

1.5版

添加了新的API:

  • validationsource现在可以是路径lib.path

1.4版

改进的行为:

  • 基于数据质量规范v1
  • 基于数据包规范v1
  • 基于表模式规范v1
  • 按需处理主键/唯一字段

1.3版

新增高级支票:

  • 黑名单值
  • 自定义约束
  • 偏离值
  • 顺序值
  • 截断值

1.2版

添加了新的API:

  • 报表.预置
  • 报表.tables[].schema

1.1版

添加了新的API:

  • 报表.表[].方案
  • 报表.表格[].格式
  • 报表.表格[].编码

1.0版

这个版本包括各种大的变化。迁移指南正在开发中,将在此处发布。

v0.6

第一个版本的goodtables

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java中是否有数字的默认类型   java调用一个类的方法来使用另一个类的实例   java HtmlUnit不适用于javascript处理   java需要帮助才能连接MongoDB   java如何从Maven中的src/main/resources复制文件?   java保存Int值(共享首选项)   从另一个类调用方法时,java Autowired组件出现空指针异常   java Spring JPA:PropertyAccessException 1:。。。MethodInvocationException:。'driverClassName'。。。org/postgresql/Driver:不支持的专业。次要版本52.0   java使用增强的JDO模型类在Eclipse中运行Junit测试   java如何使用eclipse IDE为junit创建可运行的jar文件   java如何在安卓中检测应用程序的启动和退出   java在其他线程可以访问静态映射时从数据库更新静态映射   java@Entitty和@EntityScan不起作用。我正在使用SpringBoot和jpa存储库,发生了很多次   java如何与google日历集成?