A production-ready ETL and analysis pipeline for financial transaction data. Built with clean architecture and type safety.
- ETL Pipeline: Extract from Excel/JSON, clean, validate, and load into SQLite
- Data Cleaning: Automatic validation and cleaning of:
- Transaction IDs, dates, amounts
- Client data (age, net worth, gender)
- Handling of missing/invalid values
- Analysis Suite:
- Top 5 services by order count
- Revenue analysis by city, service, payment method
- Client segmentation by net worth
- Monthly trends and forecasting
- Visualization:
- Static plots (Matplotlib/Seaborn)
- Interactive HTML reports (Plotly)
- Auto-generated Markdown summaries
- Visualization example REPORT.md
- Reporting:
- Timestamped folders with complete report packages
- Production Ready:
- Full type hints with mypy --strict
- Comprehensive logging with structlog
- Docker support
- Python 3.11+
- Poetry
- Your data files (place them in data/):
transactions_data.xlsxclients_data.json
# Clone the repository
git clone https://github.com/script-logic/etl-and-analysis-financial-data.git
cd etl-and-analysis-financial-data
# Create .env file from example
cp .env.example .env
# Install with poetry
poetry install
# Basic run
poetry run python run_pipeline.py
# With options
poetry run python run_pipeline.py --no-plots --forecast-months 3
# Using Docker
docker-compose up
# Using Makefile
make run├── app/ # Main application package
│ ├── application/ # Use cases (business logic)
│ │ └── use_cases/
│ │ ├── analysis.py # Analysis orchestration
│ │ └── warehouse.py # ETL orchestration
│ ├── config/ # Configuration
│ │ └── config.py # Pydantic settings
│ ├── domain/ # Domain models
│ │ ├── entities/ # Business entities
│ │ └── value_objects/ # Value objects
│ ├── infrastructure/ # External concerns
│ │ ├── analysis/ # Analysis & viz
│ │ ├── data_cleaning/ # Validation rules
│ │ ├── data_loading/ # Excel/JSON loaders
│ │ ├── database/ # SQLAlchemy models
│ │ └── logger/ # Structured logging
│ └── utils/ # Helpers
├── reports/ # Generated reports
├── data/ # Data dir to place Excel/Json files
├── .env.example # Example environment
├── docker-compose.yml # Docker setup
├── pyproject.toml # Project metadata
└── run_pipeline.py # Entry point
Configure via .env file (copy from .env.example):
# Data paths
DATA_PATHS__TRANSACTIONS_FILE=data/transactions_data.xlsx
DATA_PATHS__CLIENTS_FILE=data/clients_data.json
DATA_PATHS__DATABASE_FILE=db/warehouse.db
DATA_PATHS__REPORTS_DIR=reports
# Analysis parameters
ANALYSIS__TOP_SERVICES_LIMIT=5
ANALYSIS__FORECAST_MONTHS=1
ANALYSIS__MIN_MONTHS_FOR_FORECAST=3
# Logging
LOGGER__DEBUG=true
LOGGER__LOG_LEVEL=INFOpython run_pipeline.py [OPTIONS]
Options:
--no-plots Skip generating visualizations
--no-clear Do not clear database (keep existing data)
--clear-db Clear database before loading
--transactions PATH Path to transactions Excel file
--clients PATH Path to clients JSON file
--db PATH Path to SQLite database
--forecast-months N Number of months to forecast (1-12)
--min-months-forecast N Minimum months required for forecast
--help Show this message# Full analysis with default settings
python run_pipeline.py
# Quick analysis without plots
python run_pipeline.py --no-plots
# Forecast for 3 months
python run_pipeline.py --forecast-months 3
# Force reload data
python run_pipeline.py --clear-db
# Custom file locations
python run_pipeline.py \
--transactions ./my_data/transactions.xlsx \
--clients ./my_data/clients.json \
--db ./my_data/warehouse.dbEach run creates a timestamped report folder:
reports/
├── report_20260223_010453/
│ ├── REPORT.md # Self-contained markdown report
│ └── report_metadata/
│ ├── analysis_results_20260223_010453.json # Raw data
│ ├── analysis_report.html # Interactive Plotly report
│ ├── monthly_trend.png
│ ├── revenue_by_age.png
│ ├── revenue_by_service.png
│ └── transaction_distribution.png
└── report_20260223_020115/ # Next run
└── ...
- REPORT.md: Complete analysis with embedded plots
- JSON: Raw numerical results for further processing
- PNG: Static visualizations
- HTML: Interactive dashboard
# Install dev dependencies
poetry install --with dev
# Install pre-commit hooks
pre-commit install
# Run linting
make lint- Ruff: Fast Python linter
- mypy: Strict type checking
- pre-commit: Automated checks
# Build and run
docker-compose up
# Rebuild
docker-compose build --no-cacheMIT License - feel free to use and modify.
ETL и аналитический конвейер для данных финансовых транзакций. Разработан с применением принципов чистой архитектуры.
- Возможности
- Быстрый старт
- Структура проекта
- Конфигурация
- Использование
- Структура отчётов
- Разработка
- Лицензия
- ETL конвейер: Загрузка из Excel/JSON, очистка, валидация и сохранение в SQLite
- Очистка данных: Автоматическая валидация:
- ID транзакций, даты, суммы
- Данные клиентов (возраст, капитал, пол)
- Обработка пропусков и ошибок
- Аналитика:
- Топ-5 услуг по количеству заказов
- Анализ выручки по городам, услугам, способам оплаты
- Сегментация клиентов по уровню капитала
- Месячные тренды и прогнозирование
- Визуализация:
- Статические графики (Matplotlib/Seaborn)
- Интерактивные HTML-отчёты (Plotly)
- Авто-генерируемые Markdown сводки
- Пример визуализации REPORT.md
- Отчётность:
- Папки с временными метками и полным комплектом отчётов
- Готов к продакшену:
- Полная типизация (mypy --strict)
- Структурированное логирование (structlog)
- Поддержка Docker
- Python 3.11+
- Poetry
- Ваши файлы с данными (поместите в папку data/):
transactions_data.xlsxclients_data.json
# Клонировать репозиторий
git clone https://github.com/script-logic/etl-and-analysis-financial-data.git
cd etl-and-analysis-financial-data
# Создайте .env файл из .env.example
cp .env.example .env
# Установка с poetry
poetry install# Базовый запуск
poetry run python run_pipeline.py
# С опциями
poetry run python run_pipeline.py --no-plots --forecast-months 3
# Через Docker
docker-compose up
# Через Makefile
make run├── app/ # Основной пакет приложения
│ ├── application/ # Use cases (бизнес-логика)
│ │ └── use_cases/
│ │ ├── analysis.py # Оркестрация анализа
│ │ └── warehouse.py # Оркестрация ETL
│ ├── config/ # Конфигурация
│ │ └── config.py # Pydantic настройки
│ ├── domain/ # Доменные модели
│ │ ├── entities/ # Бизнес-сущности
│ │ └── value_objects/ # Value objects
│ ├── infrastructure/ # Внешние зависимости
│ │ ├── analysis/ # Анализ и визуализация
│ │ ├── data_cleaning/ # Правила валидации
│ │ ├── data_loading/ # Загрузчики Excel/JSON
│ │ ├── database/ # SQLAlchemy модели
│ │ └── logger/ # Структурированное логирование
│ └── utils/ # Вспомогательные утилиты
├── reports/ # Сгенерированные отчёты
├── data/ # Папка для размещения Excel/Json файлов
├── .env.example # Пример .env файла
├── docker-compose.yml # Docker настройки
├── pyproject.toml # Метаданные проекта
└── run_pipeline.py # Точка входа
Настройка через .env файл (скопируйте из .env.example):
# Пути к данным
DATA_PATHS__TRANSACTIONS_FILE=data/transactions_data.xlsx
DATA_PATHS__CLIENTS_FILE=data/clients_data.json
DATA_PATHS__DATABASE_FILE=db/warehouse.db
DATA_PATHS__REPORTS_DIR=reports
# Параметры анализа
ANALYSIS__TOP_SERVICES_LIMIT=5
ANALYSIS__FORECAST_MONTHS=1
ANALYSIS__MIN_MONTHS_FOR_FORECAST=3
# Логирование
LOGGER__DEBUG=true
LOGGER__LOG_LEVEL=INFOpython run_pipeline.py [ОПЦИИ]
Опции:
--no-plots Не генерировать визуализации
--no-clear Не очищать БД (сохранить существующие данные)
--clear-db Очистить БД перед загрузкой
--transactions PATH Путь к Excel файлу с транзакциями
--clients PATH Путь к JSON файлу с клиентами
--db PATH Путь к SQLite базе данных
--forecast-months N Количество месяцев для прогноза (1-12)
--min-months-forecast N Минимум месяцев данных для прогноза
--help Показать справку# Полный анализ с настройками по умолчанию
python run_pipeline.py
# Быстрый анализ без графиков
python run_pipeline.py --no-plots
# Прогноз на 3 месяца
python run_pipeline.py --forecast-months 3
# Принудительная перезагрузка данных
python run_pipeline.py --clear-db
# Свои пути к файлам
python run_pipeline.py \
--transactions ./my_data/transactions.xlsx \
--clients ./my_data/clients.json \
--db ./my_data/warehouse.dbКаждый запуск создаёт папку с временной меткой:
reports/
├── report_20260223_010453/
│ ├── REPORT.md # Самодостаточный Markdown отчёт
│ └── report_metadata/
│ ├── analysis_results_20260223_010453.json # Сырые данные
│ ├── analysis_report.html # Интерактивный Plotly отчёт
│ ├── monthly_trend.png
│ ├── revenue_by_age.png
│ ├── revenue_by_service.png
│ └── transaction_distribution.png
└── report_20260223_020115/ # Следующий запуск
└── ...
- REPORT.md: Полный анализ со встроенными графиками
- JSON: Числовые результаты для дальнейшей обработки
- PNG: Статические визуализации
- HTML: Интерактивная панель управления
# Установка dev зависимостей
poetry install --with dev
# Установка pre-commit хуков
pre-commit install
# Запуск линтинга
make lint- Ruff: Быстрый линтер Python
- mypy: Строгая проверка типов
- pre-commit: Автоматические проверки
# Сборка и запуск
docker-compose up
# Пересборка
docker-compose build --no-cacheMIT License - свободно используйте и модифицируйте.