В этом руководстве мы покажем, как создать надёжные конвейеры валидации данных производственного уровня с помощью 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
«`
Добавление вычисляемых столбцов
Мы расширяем базовую схему с помощью производного столбца и проверяем согласованность между столбцами с помощью компонуемых схем. Мы проверяем, что вычисленные значения соответствуют строгим числовым инвариантам после преобразования. Это демонстрирует, как Pandera поддерживает безопасное создание функций с гарантируемыми результатами.
«`python
class EnrichedOrders(Orders):
# … (определение модели)
@pa.check_types
def add_totals(df: DataFrame[Orders]) -> DataFrame[EnrichedOrders]:
# … (код для добавления столбца)
return EnrichedOrders.validate(out, lazy=False)
«`
В заключение мы установили дисциплинированный подход к проверке данных, рассматривая схемы как первоклассные контракты, а не как необязательные меры безопасности. Мы продемонстрировали, как композиция схем позволяет нам безопасно расширять наборы данных с помощью производных функций, сохраняя при этом инварианты, и как Pandera легко интегрируется в реальные аналитические рабочие процессы и рабочие процессы обработки данных.
1. Какие инструменты и библиотеки используются для создания конвейеров валидации данных в статье?
В статье используется библиотека Pandera, а также pandas, numpy, polars, pyarrow и hypothesis.
2. Какие типы проблем с качеством данных моделируются для тестирования валидации?
В статье моделируются недопустимые значения, несовместимые типы и неожиданные категории.
3. Как в статье предлагается разделять действительные и недействительные записи данных?
В статье предлагается разделять действительные записи из недействительных, помещая строки, которые не прошли проверку схемы, в карантин. Затем применяется гарантия схемы на границах функций, чтобы гарантировать преобразование только доверенных данных.
4. Какие преимущества даёт использование Pandera для валидации данных по сравнению с другими подходами?
Pandera позволяет создавать надёжные конвейеры валидации данных производственного уровня. Она поддерживает безопасное создание функций с гарантируемыми результатами и легко интегрируется в реальные аналитические рабочие процессы и рабочие процессы обработки данных.
5. Какие шаги включает в себя процесс валидации данных с помощью Pandera, описанный в статье?
Процесс включает в себя: установку среды выполнения, генерацию реалистичного набора данных, определение строгой модели Pandera DataFrame, валидацию набора данных, разделение чистых и карантинных заказов и добавление вычисляемых столбцов.