帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:数据  Tabular  validate  tabular-data  tab  
Validate a data table against a validation pipleine

  • 源代码名称:goodtables-py
  • 源代码网址:http://www.github.com/frictionlessdata/goodtables-py
  • goodtables-py源代码文档
  • goodtables-py源代码下载
  • Git URL:
    git://www.github.com/frictionlessdata/goodtables-py.git
  • Git Clone代码到本地:
    git clone http://www.github.com/frictionlessdata/goodtables-py
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/frictionlessdata/goodtables-py
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • goodtables-py

    TravisCoverallsPyPiGitter

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

    特性

    • 的结构检查: 确保没有空行,没有空头,等等。
    • 按以下方式列出:确保值的类型正确,类型为("字符串","号","日期",等等 ),它的格式为有效字符串,它的格式必须大于 18") 。
    • 对多种表格格式支持 : CSV 。Excel文件。gif 。数据包等。
    • 多表数据集的并行并行检验
    • 命令行 接口

    目录

    正在启动

    安装

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

    在CLI上运行

    goodtables data.csv

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

    在 python 上运行

    from goodtables import validate
    report = 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'

    你可以在开发人员文档部分中阅读关于使用goodtables与 python的详细解释。 另外,请检查示例文件夹以获取其他示例。

    验证

    基本检查

    基本检查不能被禁用,因为它们处理goodtables可以读取文件。

    检查说明
    io错误由于IO错误而导致的数据读取错误。
    http错误由于HTTP错误而导致的数据读取错误。
    源错误由于不支持或者不一致的内容而导致的数据读取错误。
    方案错误由于格式错误而导致的数据读取错误。
    格式错误由于格式错误而导致的数据读取错误。
    编码错误由于编码问题而导致的数据读取错误。

    结构检查

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

    检查说明
    空白标题空标题名称。 标题行中的所有单元格都必须有一个值。
    重复标题有多个具有相同名称的列。 所有列名称必须唯一。
    空行行必须至少有一个非空白单元格。
    重复行行不能重复。
    附加值行的列多于标题的列。
    缺少值行的列比标题少。

    内容检查

    这些检查将验证文件的内容。 要使用它们,你需要传递一个表模式。 如果没有模式,goodtables可以在使用 infer_schema 选项时推断它。

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

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

    检查说明
    架构错误架构无效。
    non-matching-header架构中的标头名称与数据中的名称不同。
    附加标题数据包含在架构中没有定义的标题。
    缺少标题数据中不包含在架构中定义的标题。
    type-or-format-error无法基于这里字段的架构类型和格式强制转换值。
    所需约束这里字段是必需字段,但它不包含任何值。
    模式约束这里字段的值应符合定义的Pattern 。
    唯一约束这里字段是唯一字段,但它包含另一行中已经使用的值。
    可以枚举约束这里字段值应等于枚举约束中的值之一。
    最小限制这里字段值应大于或者等于约束值。
    最大限制这里字段值应小于或者等于约束值。
    minimum-length-constraint这里字段值的长度应大于或者等于架构约束值。
    maximum-length-constraint这里字段值的长度应小于或者等于架构约束值。

    高级检查

    检查说明
    黑名单值确保没有已经列入黑名单的单元格。
    偏移值确保数字与平均值有一定的标准偏差。
    序列值确保数字是连续的。
    截断值检测可能被截断的值。
    自定义约束基于其他列的值定义约束( 比如 。 value * quantity == total ) 。
    已经列入黑名单的值

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

    选项类型说明
    int/str列号或者名称
    黑名单结构列表黑名单值列表

    考虑下面的CSV file:

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

    让我们检查 name 列是否不包含带有 bug 或者 bad的行:

    from goodtables import validate
    report = validate('data.csv', checks=[
     {'blacklisted-value': {'column': 'id', 'blacklist': ['bug', 'bad']}},
    ])# error on row 3 with code"blacklisted-value"# error on row 4 with code"blacklisted-value"
    偏移值

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

    选项类型说明
    int/str列号或者名称
    平均str平均类型,"均值","median"或者"模式""
    间隔int值必须在范围内 average ± standard deviation * interval

    考虑下面的CSV file:

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

    我们使用 median 来获取列值的平均值,并允许 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"
    序列值

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

    选项类型说明
    int/str列号或者名称

    考虑下面的CSV file:

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

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

    from goodtables import validate
    report = 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 file:

    id,amount,comment
    1,14000000,good
    2,2147483647,bad
    3,32767,bad
    4,234234234,bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbad

    要检测所有可能截断的值,我们可以使用 truncated-value 检查:

    report = validate('data.csv', checks=[
     'truncated-value',
    ])# error on row 3 with code"truncated-value"# error on row 4 with code"truncated-value"# error on row 5 with code"truncated-value"
    自定义约束

    对于表模式,我们可以为单个字段创建约束,但有时它还不够。 使用定制约束检查,可以以根据给定的python 表达式检查每一行,从而解析变量名。 请参见可用运算符列表。 它接受以下选项:

    约束( str ) 约束定义( 比如 。 col1 + col2 == col3 )

    考虑这样的csv文件:

    id,name,salary,bonus
    1,Alex,1000,200
    2,Sam,2500,500
    3,Ray,1350,500
    4,John,5000,1000

    让我们假定我们的业务规则是对奖金的害羞:

    report = validate('data.csv', checks=[
     {'custom-constraint': {'constraint': 'salary> bonus * 4'}},
    ])# error on row 4 with code"custom-constraint"

    开发人员文档

    基于的语义版本控制

    我们遵循语义版本规范来定义我们的版本号。 这意味着,当发生重大更改时,我们将增加主版本号。 因此,我们建议你在依赖项列表中显式指定goodtables版本( 比如 。 setup.py 或者 requirements.txt ) 。

    验证

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

    report = validate('invalid.csv')

    我们还可以传递一个远程的URI而不是本地的路径。 它支持 CSV 。XLS 。XLSX 。ODS 。JSON和所有其他格式的支持,这些格式支持由

    验证报告

    validate() 方法的输出是报表字典。 包括数据有效,错误计数,表报告列表,单个检查失败等信息。

    结果报告将如下所示:

    {
     "time": 0.009,
     "error-count": 1,
     "warnings": [
     "Table "data/invalid.csv" inspection has reached 1 error(s) limit" ],
     "preset": "table",
     "valid": false,
     "tables": [
     {
     "errors": [
     {
     "row-number": null,
     "message": "Header in column 3 is blank",
     "row": null,
     "column-number": 3,
     "code": "blank-header" }
     ],
     "error-count": 1,
     "headers": [
     "id",
     "name",
     "",
     "name" ],
     "scheme": "file",
     "row-count": 2,
     "valid": false,
     "encoding": "utf-8",
     "time": 0.007,
     "schema": null,
     "format": "csv",
     "source": "data/invalid" }
     ],
     "table-count": 1}

    Rase报告错误在数据质量规范中标准化和描述。 错误按以下类别之一进行划分:

    • source - 无法加载或者解析数据
    • structure - 常规表格错误,如重复标题
    • schema表架构的检查错误。
    • custom - 自定义检查错误
    检查

    Check是goodtables中的主要验证角色。 可以使用 checksskip_checks 参数更改已经启用检查的列表。 让我们浏览一个示例中的选项:

    report = validate('data.csv') # by default structure and schema (if available) checksreport = validate('data.csv', checks=['structure']) # only structure checksreport = validate('data.csv', checks=['schema']) # only schema (if available) checksreport = validate('data.csv', checks=['bad-headers']) # check only 'bad-headers'report = validate('data.csv', skip_checks=['bad-headers']) # exclude 'bad-headers'

    默认情况下,数据集将针对所有可用的数据质量规范错误进行验证。 某些检查不可用于验证。 例如如果未提供架构,则只执行 structure 检查。

    预设

    Goodtables支持不同格式的表格数据集。 它们称为预设。表格数据集是可以以在数据表列表中分割的一些数据,如:

    Dataset

    我们可以使用 preset 参数来更改预设。 默认情况下,从源中推断它,返回到 table 。 要验证数据包,可以执行以下操作:

    report = validate('datapackage.json') # implicit presetreport = validate('datapackage.json', preset='datapackage') # explicit preset

    这将验证DataPackage中的所有表资源。

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

    report = validate([{'source': 'data1.csv'}, {'source': 'data2.csv'}]) # implicit presetreport = validate([{'source': 'data1.csv'}, {'source': 'data2.csv'}], preset='nested') # explicit preset

    类似于:

    report_data1 = validate('data1.csv')
    report_data2 = validate('data2.csv')

    区别在于goodtables并行验证多个表,因此使用"嵌套"预设调用应该运行得更快。

    本项目遵循开放知识国际代码标准。

    我们建议你使用 virtualenv 将goodtables与你机器中的其他软件包隔离。

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

    $ make install

    要运行测试,请使用:

    $ make test

    常见问题解答

    如何添加自定义的自定义检查?

    创建自定义检查用户可以使用 check 修饰符。 这样,内置检查可以重写( 使用像 duplicate-row 这样的规范错误代码) 或者添加一个自定义错误( 使用 typecontextposition 参数) 检查:

    from goodtables import validate, check@check('custom-check', type='custom', context='body')defcustom_check(errors, cells, row_number):
     for cell in cells:
     errors.append({
     'code': 'custom-error',
     'message': 'Custom error',
     'row-number': row_number,
     'column-number': cell['number'],
     })
     cells.remove(cell)
    report = validate('data.csv', checks=['custom-check'])

    目前本文档部分不完整。 请查看内置检查以了解有关检查协议的更多信息。

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

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

    from tabulator import Streamfrom tableschema import Schemafrom goodtables import validate@preset('custom-preset')defcustom_preset(source, **options):
     warnings = []
     tables = []
     for table in source:
     try:
     tables.append({
     'source': str(source),
     'stream': Stream(...),
     'schema': Schema(...),
     'extra': {...},
     })
     exceptException:
     warnings.append('Warning message')
     return warnings, tables
    report = validate(source, preset='custom-preset')

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

    变更日志

    v1.5

    添加了新的API:

    • 验证 source 现在可能是一个 pathlib.Path

    v1.4

    改进的行为:

    • 基于数据质量规范 v1
    • 数据包规范v1上
    • 表模式规范中的基
    • 将主键视为必需/唯一字段

    v1.3

    添加了新的高级检查:

    • blacklisted-value
    • custom-constraint
    • deviated-value
    • sequential-value
    • truncated-value

    v1.2

    添加了新的API:

    • report.preset
    • report.tables[].schema

    v1.1

    添加了新的API:

    • report.tables[].scheme
    • report.tables[].format
    • report.tables[].encoding

    v1.0

    这里版本包含各种大更改。 迁移指南正在开发中,将在这里发布。

    v0.6

    goodtables的第一个版本。



    文章标签:数据  tab  validate  Tabular  tabular-data  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语