lab8

0

Описание

Лабораторная работа 8: Тестирование ETL пайплайна

Языки

  • Python100%
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
README.md

Лабораторная работа 8: Тестирование ETL пайплайна

Описание проекта

Этот проект демонстрирует тестирование ETL (Extract, Transform, Load) пайплайна для обработки данных о сотрудниках.

Структура проекта

lab8/ ├── data/ │ └── raw_data.csv # Исходные данные ├── tests/ │ └── test_etl.py # Базовые тесты ETL пайплайна ├── etl_pipeline.py # Основной ETL пайплайн ├── test_data_quality.py # Тесты качества данных (Great Expectations) ├── test_performance.py # Тесты производительности ├── run_all_tests.py # Скрипт для запуска всех тестов ├── requirements.txt # Зависимости проекта └── employees.db # База данных SQLite (создается автоматически)

Установка

  1. Установите зависимости:

Или установите пакеты напрямую:

Запуск проекта

1. Запуск ETL пайплайна

Это создаст базу данных

employees.db
с обработанными данными.

2. Запуск всех тестов

Или запустите тесты по отдельности:

Описание тестов

Базовые тесты (tests/test_etl.py)

  • test_extract()
    - проверяет корректность извлечения данных из CSV
  • test_transform()
    - проверяет преобразование данных (добавление новых полей, категоризация)
  • test_load()
    - проверяет загрузку данных в базу данных
  • test_data_quality()
    - проверяет базовое качество данных (отсутствие пустых значений, валидность диапазонов)

Тесты качества данных (test_data_quality.py)

Проверяет качество данных с помощью pandas и стандартных проверок:

  • Наличия всех необходимых колонок
  • Уникальности идентификаторов
  • Отсутствия пустых значений
  • Валидности диапазонов значений (возраст, зарплата)
  • Допустимых значений департаментов

Примечание: Изначально планировалось использовать Great Expectations, но из-за изменений в API новой версии (1.9.2) тесты были упрощены для использования стандартных методов pandas, что делает их более надежными и простыми в поддержке.

Тесты производительности (test_performance.py)

  • test_performance()
    - проверяет время выполнения ETL процесса
  • test_memory_usage()
    - проверяет использование памяти

Проблемы и решения

Проблема 1: Совместимость pandas с Python 3.13

Проблема: Изначально использовалась версия pandas 2.0.3, которая не компилируется с Python 3.13 из-за проблем с компиляцией C-расширений.

Решение: Обновлены версии пакетов до более новых, которые поддерживают Python 3.13:

  • pandas 2.3.3 (вместо 2.0.3)
  • pytest 9.0.1 (вместо 7.4.0)
  • great-expectations 1.9.2 (вместо 0.17.0)

Проблема 2: Изменение API Great Expectations

Проблема: В новых версиях Great Expectations (1.9.2) изменился API. Метод

ge.from_pandas()
больше не доступен, а модуль
great_expectations.dataset
был удален.

Решение: Упрощены тесты качества данных, используя прямые проверки pandas DataFrame вместо устаревшего API Great Expectations. Все проверки качества данных выполняются через стандартные методы pandas.

Проблема 3: Использование python vs python3

Проблема: На macOS команда

python
может быть недоступна, нужно использовать
python3
.

Решение: В README указано использовать

python3
для запуска скриптов. Все команды в проекте используют
python3
.

Проблема 4: Импорт модулей

Проблема: При запуске тестов возникали ошибки импорта модулей.

Решение: Убедились, что все файлы находятся в правильной структуре директорий и используются относительные импорты. Добавлен файл

tests/__init__.py
для правильной работы pytest.

Результаты тестирования

После успешного запуска всех тестов вы должны увидеть:

  • ✅ Все тесты пройдены
  • ✅ База данных
    employees.db
    создана
  • ✅ Все проверки качества данных выполнены успешно

Технологии

  • Python - основной язык программирования
  • Pandas - для работы с табличными данными
  • SQLite - база данных для хранения результатов
  • pytest - фреймворк для тестирования
  • Great Expectations - библиотека для проверки качества данных