Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Качество данных (Data Quality)
Качество данных — это совокупность характеристик и свойств данных, которые определяют, насколько хорошо эти данные подходят для использования в бизнес-процессах, аналитике и принятии решений. Высокое качество данных обеспечивает надежность, точность и полезность анализа.
Основные измерения качества данных
1. Точность (Accuracy)
Данные соответствуют действительности. Например, город клиента в системе совпадает с его фактическим местом проживания.
-- Проверка точности: сопоставление с источником истины
SELECT COUNT(*) as mismatches
FROM customers_staging s
LEFT JOIN customers_source r ON s.customer_id = r.customer_id
WHERE s.city != r.city;
2. Полнота (Completeness)
Присутствуют все необходимые данные, отсутствуют пропуски (NULL).
-- Проверка полноты
SELECT
COUNT(CASE WHEN email IS NULL THEN 1 END) as missing_emails,
COUNT(CASE WHEN phone IS NULL THEN 1 END) as missing_phones,
COUNT(*) as total_records
FROM customers;
-- Результат должен показать процент пропусков
-- Если пропусков > 5%, это проблема качества
3. Непротиворечивость (Consistency)
Данные согласованы в разных системах и таблицах.
-- Проверка консистентности между системами
SELECT COUNT(*) as inconsistent
FROM orders o
LEFT JOIN customers c ON o.customer_id = c.customer_id
WHERE o.customer_city != c.city;
-- Если суммы в разных таблицах расходятся
SELECT SUM(amount) FROM fact_sales;
SELECT SUM(amount) FROM fact_sales_backup;
4. Уникальность (Uniqueness)
Нет дублирующихся записей одной сущности.
-- Проверка дублей
SELECT customer_id, COUNT(*) as count
FROM customers
GROUP BY customer_id
HAVING COUNT(*) > 1;
-- Или проверка на дубли по всей таблице
SELECT COUNT(*) as total,
COUNT(DISTINCT customer_id, email) as unique_records
FROM customers;
5. Своевременность (Timeliness)
Данные доступны вовремя для использования. Свежесть данных.
# Проверка задержки обновления данных
import pandas as pd
from datetime import datetime, timedelta
def check_data_freshness(last_update_time):
lag = datetime.now() - last_update_time
if lag > timedelta(hours=1):
alert("Data is stale! Last update: " + str(last_update_time))
6. Валидность (Validity)
Данные соответствуют определённым форматам и диапазонам.
-- Проверка валидности: email формат
SELECT COUNT(*) as invalid_emails
FROM customers
WHERE email NOT REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$';
-- Проверка диапазона: возраст должен быть 0-120
SELECT COUNT(*) as invalid_ages
FROM customers
WHERE age < 0 OR age > 120;
Метрики качества данных
class DataQualityMetrics:
def __init__(self, df):
self.df = df
self.total_records = len(df)
def completeness(self):
"""Процент заполненных полей"""
total_cells = self.df.shape[0] * self.df.shape[1]
non_null_cells = self.df.count().sum()
return (non_null_cells / total_cells) * 100
def uniqueness(self):
"""Проверка дублей"""
duplicates = self.df.duplicated().sum()
return ((self.total_records - duplicates) / self.total_records) * 100
def validity(self):
"""Проверка форматов данных"""
# Проверка типов, диапазонов и т.д.
pass
def get_quality_score(self):
"""Итоговый балл качества"""
return (
self.completeness() * 0.4 +
self.uniqueness() * 0.3 +
self.validity() * 0.3
)
# Использование
metrics = DataQualityMetrics(df)
print(f"Quality Score: {metrics.get_quality_score()}%")
Мониторинг качества в Data Warehouse
-- Создать таблицу для отслеживания метрик качества
CREATE TABLE data_quality_metrics (
check_date TIMESTAMP,
table_name VARCHAR(100),
metric_name VARCHAR(100),
metric_value FLOAT,
threshold FLOAT,
status VARCHAR(20) -- PASS, WARN, FAIL
);
-- Процедура проверки качества
CREATE PROCEDURE check_data_quality()
BEGIN
-- Проверка полноты
INSERT INTO data_quality_metrics
SELECT
NOW(),
'customers',
'completeness',
(COUNT(email) / COUNT(*)) * 100,
95.0,
CASE WHEN (COUNT(email) / COUNT(*)) * 100 >= 95 THEN 'PASS' ELSE 'FAIL' END
FROM customers;
-- Проверка дублей
INSERT INTO data_quality_metrics
SELECT
NOW(),
'customers',
'uniqueness',
(1 - COUNT(DISTINCT customer_id) / COUNT(*)) * 100,
0.5,
CASE WHEN COUNT(DISTINCT customer_id) = COUNT(*) THEN 'PASS' ELSE 'FAIL' END
FROM customers;
END;
Инструменты проверки качества
Great Expectations — фреймворк для валидации данных:
import great_expectations as ge
df = ge.read_csv("customers.csv")
# Основные проверки
df.expect_column_values_to_not_be_null("email")
df.expect_column_values_to_match_regex("email", r"^[^@]+@[^@]+\.[^@]+$")
df.expect_column_values_to_be_in_set("status", ["active", "inactive"])
df.expect_column_values_to_be_between("age", 0, 120)
# Запуск валидации
results = df.validate()
print(results)
dbt (data build tool) — тестирование трансформаций:
# schema.yml
version: 2
models:
- name: customers
columns:
- name: customer_id
tests:
- not_null
- unique
- name: email
tests:
- not_null
- unique
- name: age
tests:
- dbt_utils.accepted_values:
values: [0, 120]
Процесс улучшения качества
def data_quality_pipeline():
# 1. Оценить текущее качество
baseline_score = evaluate_quality(data)
# 2. Выявить проблемные области
issues = identify_issues(data)
# 3. Реализовать исправления
for issue in issues:
apply_fix(issue)
# 4. Переоценить качество
new_score = evaluate_quality(data)
# 5. Установить мониторинг
setup_monitoring(data, threshold=new_score * 0.95)
return new_score > baseline_score
SLA по качеству данных
Availability: 99.5% (должны быть доступны)
Completeness: > 95% (не более 5% пропусков)
Accuracy: > 98% (макс 2% ошибок)
Timeliness: < 1 часа (свежесть данных)
Uniqueness: 100% (нет дублей)
Ключевые выводы
- Качество данных = основа аналитики. Плохие данные = плохие выводы
- Мониторинг постоянный. Недостаточно одноразовой проверки
- Автоматизировать проверки. Использовать Great Expectations, dbt, custom scripts
- SLA по качеству. Согласовать с бизнесом минимальные требования
- Корневой анализ. Если качество упало, нужно найти источник проблемы
Качество данных — это инвестиция в надежность и доверие к аналитике.