Как подходите к проверке качества данных перед анализом?

Проверка качества данных перед анализом — критически важный этап, который напрямую влияет на достоверность аналитических выводов и эффективность последующих решений. Подход к валидации и обеспечению качества данных (Data Quality Assurance) должен быть системным, повторяемым и по возможности автоматизированным. Мой подход к проверке качества данных включает несколько уровней: структурный, содержательный, логический и бизнес-контекстный контроль. Ниже я детально распишу каждый этап и инструменты, которые использую на практике.

1. Первичная структурная проверка (Schema Validation)

На этом этапе я проверяю соответствие данных ожидаемой структуре: количество колонок, типы данных, наличие всех обязательных полей.

Методы:

  • Сравнение схемы таблиц с ожидаемой спецификацией (например, JSON Schema или YAML)

  • Использование библиотек:

    • Great Expectations: автоматическая проверка типов, наличия колонок, уникальности, допустимых значений

    • pandera (Python): проверка типов, диапазонов и условий на уровне DataFrame

    • SQL-валидации через information_schema (в PostgreSQL, MySQL)

Примеры проверок:

  • Колонка user_id должна быть целым числом, не NULL

  • Поле created_at должно быть типом timestamp

  • В таблице должны присутствовать все обязательные поля

2. Проверка наличия и пропусков (Missing Data / NULL)

Отслеживание пропущенных значений (null / NaN) — один из важнейших индикаторов качества.

Методы:

Использование SQL-запросов:

```python
SELECT COUNT(*) FROM table WHERE important_column IS NULL;

В Python:  
<br/>```python  
df.isnull().sum()  

Проверка completeness (полноты) в Great Expectations:

```python
expect_column_values_to_not_be_null

**Подход:**

- Классификация пропусков: допустимые (например, для необязательных полей) и критические (например, для ключей или дат)  

- Визуализация null-матриц через seaborn или missingno (Python)  


### **3\. Уникальность и первичные ключи**

Проверка на наличие дубликатов и соответствие правилу уникальности.

**Методы:**

SQL:  
<br/>```python  
SELECT user_id, COUNT(\*) FROM users GROUP BY user_id HAVING COUNT(\*) > 1;  
  • expect_column_values_to_be_unique в Great Expectations

Особенности:

  • Контроль за уникальностью комбинации полей (composite keys)

  • Проверка surrogate keys (искусственные) и natural keys (естественные)

4. Проверка допустимых значений (Domain Validation)

Это проверка на принадлежность значений к заданному множеству.

Примеры:

  • Пол gender может принимать только 'male', 'female', 'other'

  • Статусы заказа должны быть: 'pending', 'completed', 'cancelled'

Методы:

SQL с NOT IN:

```python
SELECT * FROM orders WHERE status NOT IN ('pending', 'completed', 'cancelled');

Python с isin():  
<br/>```python  
df\[~df\['status'\].isin(valid_statuses)\]  

5. Проверка диапазонов и границ (Range & Thresholds)

Часто используются для числовых и временных значений.

Примеры:

  • Значение age должно быть в диапазоне от 0 до 120

  • Дата created_at не должна быть в будущем

Методы:

SQL:

```python
SELECT * FROM users WHERE age < 0 OR age > 120;

- expect_column_values_to_be_between в Great Expectations  


### **6\. Проверка согласованности и связности (Referential Integrity)**

Важно убедиться, что внешние ключи корректно ссылаются на существующие записи.

**Методы:**

LEFT JOIN на внешний ключ и поиск NULL:  
<br/>```python  
SELECT o.\* FROM orders o
LEFT JOIN users u ON o.user_id = u.id
WHERE u.id IS NULL;  
  • Проверка каскадных связей: если есть order_id, то должен быть customer_id

7. Проверка дублирования и аномалий

Анализ на повторяющиеся записи, копии, нерелевантные данные.

Инструменты:

  • SQL-группировка по всем полям

  • Сравнение хешей строк (md5 на весь ряд)

В Python:

df.duplicated()

8. Логическая и бизнес-валидация

На этом этапе проверяется соответствие данных бизнес-логике.

Примеры:

  • В заказе дата оплаты не может быть раньше даты оформления

  • Выручка должна быть равна количеству × цене

Реализация:

  • Написание unit-тестов на уровне ETL

  • Визуальный анализ на дашбордах

  • Использование правил Data Quality Framework (DQF)

9. Проверка распределений и выбросов

Выявление неожиданных отклонений: резких скачков, outliers, резких падений.

Методы:

  • Построение гистограмм, boxplot

  • Z-score и IQR

  • Анализ временных рядов — сезонность, тренды, аномалии

10. Автоматизация и мониторинг качества

Инструменты:

  • Great Expectations + Airflow: проверки в DAG-ах

  • Deequ от Amazon — проверка на Spark

  • Soda SQL — фреймворк для мониторинга качества данных

  • Метрики в Prometheus + Grafana: количество NULL, количество строк, размер таблицы

Интеграция:

  • Отчёты об ошибках в Slack/email

  • Логирование нарушений в отдельную таблицу или журнал

  • Создание алертов при отклонениях

Проверка качества данных должна быть встроена в каждый этап пайплайна: начиная от ingestion (загрузки) до финального хранения в витринах или дэшбордах. Это позволяет избежать ошибочных выводов и повысить доверие к аналитическим системам в компании.