Skip to content

伟大的期望

Great Expectations 是一个基于Python的开源库,用于验证、记录和剖析您的数据。它帮助您维护数据质量,并改善团队之间关于数据的沟通。通过Great Expectations,您可以断言您对加载和转换的数据的期望,并快速发现数据问题——期望基本上是您数据的单元测试

关于Great Expectations

期望是对您数据的断言。在Great Expectations中,这些断言以声明性语言的形式表达,采用简单、人类可读的Python方法。例如,为了断言您希望数据集中列passenger_count的值为1到6之间的整数,您可以说:

expect_column_values_to_be_between(column="passenger_count", min_value=1, max_value=6)

然后,Great Expectations使用此语句来验证给定表中的列passenger_count是否确实在1到6之间,并返回成功或失败的结果。该库目前提供了数十种高度表达的内置期望,并允许您编写自定义期望

Great Expectations将期望渲染为干净、人类可读的文档,称为数据文档。这些HTML文档包含您的期望套件以及每次验证运行时的数据验证结果——可以将其视为持续更新的数据质量报告。

使用Great Expectations验证您的合成数据

!!! note 已过时 从ydata-synthetic vx版本开始,此示例将不再有效。请查看ydata-sdk合成数据生成示例

1. 安装所需的库:

我们建议您创建一个虚拟环境,并通过在终端中运行以下命令来安装ydata-synthetic和great-expectations。

pip install ydata-synthetic great-expectations

2. 生成您的合成数据:

在此示例中,我们将使用CTGAN从成人普查收入数据集中合成样本:

from pmlb import fetch_data

from ydata_synthetic.synthesizers.regular import RegularSynthesizer
from ydata_synthetic.synthesizers import ModelParameters, TrainParameters

# 加载数据并定义数据处理器参数
data = fetch_data('adult')
num_cols = ['age', 'fnlwgt', 'capital-gain', 'capital-loss', 'hours-per-week']
cat_cols = ['workclass','education', 'education-num', 'marital-status', 'occupation', 'relationship', 'race', 'sex',
            'native-country', 'target']

# 定义训练参数
batch_size = 500
epochs = 500+1
learning_rate = 2e-4
beta_1 = 0.5
beta_2 = 0.9

ctgan_args = ModelParameters(batch_size=batch_size,
                             lr=learning_rate,
                             betas=(beta_1, beta_2))

train_args = TrainParameters(epochs=epochs)
synth = RegularSynthesizer(modelname='ctgan', model_parameters=ctgan_args)
synth.fit(data=data, train_arguments=train_args, num_cols=num_cols, cat_cols=cat_cols)

# 为训练好的合成器采样并保存合成数据
synth_data = synth.sample(1000)
synth_data.to_csv('data/adult_synthetic.csv', index=False)

3. 创建数据上下文并连接到数据:

导入great_expectations模块,创建数据上下文,并连接到您的合成数据:

import great_expectations as gx

# 初始化数据上下文
context = gx.get_context()

# 连接到合成数据
validator = context.sources.pandas_default.read_csv(
    "data/adult_synthetic.csv"
)

4. 创建期望:

您可以通过编写单独的语句(如下所示)来创建期望套件,使用分析器和数据助手,甚至自定义分析器

# 创建期望
validator.expect_column_values_to_not_be_null("age")
validator.expect_column_values_to_be_between("workclass", auto=True)
validator.save_expectation_suite()

5. 验证数据

要验证您的数据,请定义一个检查点并检查数据以确定其是否符合定义的期望:

# 验证合成数据
checkpoint = context.add_or_update_checkpoint(
    name="synthetic_data_checkpoint",
    validator=validator,
)
您可以运行验证结果:

checkpoint_result = checkpoint.run()

并使用以下代码查看验证结果的HTML表示:

context.view_validation_result(checkpoint_result)