伟大的期望
Great Expectations 是一个基于Python的开源库,用于验证、记录和剖析您的数据。它帮助您维护数据质量,并改善团队之间关于数据的沟通。通过Great Expectations,您可以断言您对加载和转换的数据的期望,并快速发现数据问题——期望基本上是您数据的单元测试。
关于Great Expectations
期望是对您数据的断言。在Great Expectations中,这些断言以声明性语言的形式表达,采用简单、人类可读的Python方法。例如,为了断言您希望数据集中列passenger_count
的值为1到6之间的整数,您可以说:
然后,Great Expectations使用此语句来验证给定表中的列passenger_count
是否确实在1到6之间,并返回成功或失败的结果。该库目前提供了数十种高度表达的内置期望,并允许您编写自定义期望。
Great Expectations将期望渲染为干净、人类可读的文档,称为数据文档。这些HTML文档包含您的期望套件以及每次验证运行时的数据验证结果——可以将其视为持续更新的数据质量报告。
使用Great Expectations验证您的合成数据
!!! note 已过时
从ydata-synthetic vx版本开始,此示例将不再有效。请查看ydata-sdk
和合成数据生成示例。
1. 安装所需的库:
我们建议您创建一个虚拟环境,并通过在终端中运行以下命令来安装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,
)
并使用以下代码查看验证结果的HTML表示: