Как подходите к проверке качества данных перед анализом?
Проверка качества данных перед анализом — критически важный этап, который напрямую влияет на достоверность аналитических выводов и эффективность последующих решений. Подход к валидации и обеспечению качества данных (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 (загрузки) до финального хранения в витринах или дэшбордах. Это позволяет избежать ошибочных выводов и повысить доверие к аналитическим системам в компании.