条件化期望

使用 Great Expectations 的数据质量入门

Davina Moossazadeh

Data Scientist

什么是条件化期望?

条件化期望 —— 针对数据子集的期望

原因:有些变量取决于其他变量的取值

例如:

  • review_count0 时,列 star_rating 的值必须为 0 的期望
1 https://docs.greatexpectations.io/docs/core/customize_expectations/expectation_conditions/
使用 Great Expectations 的数据质量入门

条件化期望的语法

通过增加两个参数可将数据集期望转换为条件化期望:

  1. row_condition
    • 定义应用条件化期望的数据子集的布尔表达式字符串
  2. condition_parser
    • 定义 row_condition 语法的字符串
使用 Great Expectations 的数据质量入门

条件解析器(condition parser)

在 pandas 中实现条件化期望时,该参数必须设为 "pandas"

expectation = gx.Expect...(
    **kwargs,
    condition_parser="pandas",
    row_condition=...
)
使用 Great Expectations 的数据质量入门

行条件(row condition)

pandas 语法
df["foo"] == 'Two Two'
df["foo"].notNull()
df["foo"] <= datetime.date(2023, 3, 13)
(df["foo"] < 5) & (df["foo"] >= 3.14)

df["foo"].str.startswith("bar")
Great Expectations 的 row_condition
'foo == "Two Two"'
'foo.notNull()'
'foo <= datetime.date(2023, 3, 13)'
'(foo > 5) & (foo <= 3.14)'
'foo > 5 and foo <= 3.14'
'foo.str.startswith("bar")'
使用 Great Expectations 的数据质量入门

行条件(row condition)

规则
  1. 在{{1}}内不要用单引号

    • row_condition="foo=='Two Two'"
    • row_condition='foo=="Two Two"' 勾号,表示第二个项目中 `row_condition` 的语法正确。
  2. 不要在{{3}}内换行

    • row_condition="""
      foo=="Two Two"
      """  
      
    • row_condition='foo=="Two Two"' 勾号,表示第二个项目中 `row_condition` 的语法正确。
使用 Great Expectations 的数据质量入门

示例期望:星级评分

无条件
expectation = gx.expectations.\
ExpectColumnValuesToBeBetween(
    column="price_usd",
    max_value=10,
)
validation_results = batch.validate(
    expect=expectation
)
print(validation_results.success)
False
有条件
expectation = gx.expectations.\
ExpectColumnValuesToBeBetween(
    column="price_usd",
    max_value=10,
    condition_parser='pandas',
    row_condition='mark_price_usd < 10',
)
validation_results = batch.validate(
    expect=expectation
)
print(validation_results.success)
True
使用 Great Expectations 的数据质量入门

Vamos praticar!

使用 Great Expectations 的数据质量入门

Preparing Video For Download...