Найти в Дзене
SkyNet | Новости ИИ

Как создать конвейеры валидации данных производственного уровня с помощью Pandera, типизированных схем и компонуемых контрактов DataFrame

В этом руководстве мы покажем, как создать надёжные конвейеры валидации данных производственного уровня с помощью Pandera и типизированных моделей DataFrame. Мы начнём с моделирования реалистичных, несовершенных транзакционных данных и постепенно будем применять строгие ограничения схемы, правила на уровне столбцов и бизнес-логику между столбцами с помощью декларативных проверок. Установка среды выполнения Для начала установим Pandera и её зависимости, а также импортируем все необходимые библиотеки: ```python !pip -q install "pandera>=0.18" pandas numpy polars pyarrow hypothesis import json import numpy as np import pandas as pd import pandera as pa from pandera.errors import SchemaError, SchemaErrors from pandera.typing import Series, DataFrame print("pandera version:", pa.version) print("pandas version:", pd.version) ``` Генерация реалистичного набора данных Мы создаём реалистичный набор транзакционных данных, который намеренно включает распространённые проблемы с качеством д

Как создать конвейеры валидации данных производственного уровня с помощью Pandera, типизированных схем и компонуемых контрактов DataFrame

В этом руководстве мы покажем, как создать надёжные конвейеры валидации данных производственного уровня с помощью Pandera и типизированных моделей DataFrame. Мы начнём с моделирования реалистичных, несовершенных транзакционных данных и постепенно будем применять строгие ограничения схемы, правила на уровне столбцов и бизнес-логику между столбцами с помощью декларативных проверок.

Установка среды выполнения

Для начала установим Pandera и её зависимости, а также импортируем все необходимые библиотеки:

```python

!pip -q install "pandera>=0.18" pandas numpy polars pyarrow hypothesis

import json

import numpy as np

import pandas as pd

import pandera as pa

from pandera.errors import SchemaError, SchemaErrors

from pandera.typing import Series, DataFrame

print("pandera version:", pa.version)

print("pandas version:", pd.version)

```

Генерация реалистичного набора данных

Мы создаём реалистичный набор транзакционных данных, который намеренно включает распространённые проблемы с качеством данных. Мы моделируем недопустимые значения, несовместимые типы и неожиданные категории, чтобы отразить реальные сценарии ввода данных. Это позволяет нам осмысленно тестировать и демонстрировать эффективность валидации на основе схем.

```python

rng = np.random.default_rng(42)

def makeraworders(n=250):

# ... (код для генерации данных)

return raw

raworders = makeraw_orders(250)

display(raw_orders.head(10))

```

Определение строгой модели Pandera DataFrame

Мы определяем строгую модель Pandera DataFrame, которая учитывает как структурные, так и бизнес-ограничения. Мы применяем правила на уровне столбцов, проверку на основе регулярных выражений и проверки на уровне фрейма данных для декларативного кодирования логики предметной области.

```python

class Orders(pa.DataFrameModel):

# ... (определение модели)

```

Валидация набора данных

Мы проверяем исходный набор данных с помощью ленивой оценки, чтобы выявить несколько нарушений за один проход. Мы анализируем структурированные случаи сбоев, чтобы точно понять, где и почему данные нарушают правила схемы. Это помогает нам отлаживать проблемы с качеством данных, не прерывая весь конвейер.

```python

try:

validated = Orders.validate(raw_orders, lazy=True)

print(validated.dtypes)

except SchemaErrors as exc:

display(exc.failure_cases.head(25))

errjson = exc.failurecases.to_dict(orient="records")

print(json.dumps(err_json[:5], indent=2, default=str))

```

Разделение чистых и карантинных заказов

Мы разделяем действительные записи из недействительных, помещая строки, которые не прошли проверку схемы, в карантин. Затем мы применяем гарантии схемы на границах функций, чтобы гарантировать преобразование только доверенных данных. Этот шаблон обеспечивает безопасное обогащение данных, предотвращая тихую коррупцию.

```python

def splitcleanquarantine(df: pd.DataFrame):

# ... (код для разделения данных)

return cleanorders, quarantineorders

```

Добавление вычисляемых столбцов

Мы расширяем базо...

Читать далее