使用 Python 构建简单的数据质量 DSL

构建轻量级 Python DSL,以清晰、富有表现力的方式定义和检查数据质量规则。将复杂的验证逻辑转变为数据团队中任何人都可以理解的简单、可重用的配置。

来源:KDnuggets
作者图片

# 简介

#

Python 中的数据验证代码通常很难维护。业务规则被隐藏在嵌套的 if 语句中,验证逻辑与错误处理混合在一起,并且添加新的检查通常意味着筛选过程函数以找到插入代码的正确位置。是的,您可以使用一些数据验证框架,但我们将专注于使用 Python 构建超级简单但有用的东西。

如果

让我们通过创建专门用于数据验证的词汇表来编写一种简单的领域特定语言 (DSL)。您无需编写通用的 Python 代码,而是构建专门的函数和类,以符合您对问题的看法的方式表达验证规则。

词汇

对于数据验证,这意味着读起来像业务要求的规则:“客户年龄必须在 18 到 120 之间”或“电子邮件地址必须包含 @ 符号并且应该具有有效的域”。您希望 DSL 能够处理检查数据和报告违规行为的机制,而您则专注于表达有效数据的样子。结果是验证逻辑可读、易于维护和测试并且易于扩展。那么,让我们开始编码吧!

什么

🔗 GitHub 上代码的链接

GitHub 上代码的链接

# 为什么要构建 DSL?

考虑使用 Python 验证客户数据:

def validate_customers(df):
    错误=[]
    如果 df['customer_id'].duplicate().any():
        error.append("ID 重复")
    if (df['age'] < 0).any():
        error.append("负年龄")
    如果不是 df['email'].str.contains('@').all():
        error.append("无效电子邮件")
    返回错误

这种方法对验证逻辑进行硬编码,将业务规则与错误处理混合在一起,并且随着规则的增加而变得难以维护。相反,我们希望编写一个 DSL 来分离关注点并创建可重用的验证组件。

DSL 可以让您表达读起来像业务需求的规则,而不是编写过程验证函数:

# 创建示例数据集

// 规则 ~