Веб-приложение для анализа табличных датасетов: от технического паспорта данных до подготовки обучающей выборки и сравнения ML-моделей — всё в одном рабочем пространстве.
Идея проекта простая: сначала обычный детерминированный Python-код извлекает проверяемые факты из данных, а интерфейс превращает их в понятный рабочий процесс аналитика. AI-слой (объяснение фактов и рекомендаций человеческим языком) — следующий запланированный этап поверх этого фундамента.
| Слой | Технологии |
|---|---|
| Backend | Python 3.11+, FastAPI, Polars, scikit-learn, pandas |
| Frontend | React 19, TypeScript, Vite |
| Тесты | pytest |
Frontend хранит только настройки и предпросмотры, а все тяжёлые преобразования (профилирование, ETL, обучение) выполняет backend — браузер не блокируется вычислениями.
Приложение разбито на четыре последовательных раздела.
Загрузка файлов (drag-and-drop или выбор), после чего backend строит технический профиль:
- количество строк, колонок и полных дублей;
- профиль каждой колонки: тип, пропуски, уникальность, доля уникальности;
- автоматическое определение вероятных ID-колонок и константных колонок;
- базовые числовые статистики (min/max/среднее/медиана/std/квартили/асимметрия);
- выбросы по правилу межквартильного размаха (IQR);
- определение дисбаланса категорий;
- сводный Quality Score от 0 до 100 с явными весами по каждому сигналу качества.
Поддерживаемые форматы: .csv, .parquet, .json, .jsonl/.ndjson, .xlsx.
CSV читается с автоопределением разделителя (, ; \t |) и кодировки (UTF-8/UTF-16, а также Windows-1251/1252 с эвристикой по доле кириллицы — для русскоязычных корпоративных выгрузок).
Полный постраничный просмотр данных с фильтрами отображения и SQL:
- вся таблица постранично (25/50/100 строк) — по сети передаётся только видимая страница, а не весь файл;
- поиск подстроки по всем колонкам сразу (фильтр по всему датасету на backend);
- скрытие/показ отдельных колонок в отображении;
- окно SQL-запросов к датасету (таблица называется
dataset) — фильтрация, агрегации, сортировка.
SQL выполняется движком Polars и работает только с загруженным датасетом: запрос не имеет доступа к файловой системе, поэтому не может прочитать посторонние данные.
Конструктор рецептов очистки и объединения данных:
- объединение нескольких источников: один файл, добавление строк (concat) или join по ключу;
- удаление полных дублей;
- поколоночные правила: включение/исключение, приведение типа, обработка пропусков (среднее/медиана/мода/ноль/удаление), обработка выбросов (обрезка по IQR или удаление), one-hot кодирование, переименование;
- вычисляемые колонки через безопасный SQL-парсер выражений Polars (без
eval, поэтому формула не может читать файлы или выполнять системные команды); - предпросмотр результата с профилем качества «до → после»;
- экспорт в CSV или передача датасета прямо в слой Models.
Режим «Собрать автоматически» формирует rule-based рекомендации (исключить ID и константы, заполнить пропуски по типу колонки, обрезать выбросы, предложить осмысленные бизнес-признаки) — но ничего не применяет скрытно: пользователь видит каждое предложение и может изменить любое правило перед сборкой.
Один воспроизводимый ML-эксперимент на выбранном датасете:
- выбор целевой колонки, типа задачи (авто / классификация / регрессия) и признаков;
- обучение нескольких кандидатов на одном и том же train/test-разбиении: honest-baseline (Dummy), линейная модель (Logistic Regression / Ridge) и Random Forest;
- сравнимые метрики: balanced accuracy, F1, accuracy для классификации; RMSE, MAE, R² для регрессии;
- важность признаков лучшей модели и текстовые рекомендации.
Категориальные признаки кодируются внутри sklearn-пайплайна, target всегда исключается из признаков — защита от утечки ответа в модель. Baseline нужен, чтобы честно показать, действительно ли модель бьёт тривиальное предсказание.
Раздел для проверки экспериментов и сравнения результатов (в разработке).
Требуется Python 3.11+ и Node.js 18+.
pip install -e ".[dev]"
python -m uvicorn backend.api:app --host 127.0.0.1 --port 8505cd frontend
npm install
npm run devИнтерфейс: http://127.0.0.1:5173/. Vite проксирует /api на backend, поэтому дополнительная настройка не нужна.
В папке examples/ лежат демонстрационные датасеты оттока клиентов (~460 строк с пропусками, дублями и выбросами) — их можно сразу загрузить, пройти путь Overview → ETL → Models и получить рабочее сравнение моделей.
Профилировщик доступен и как командная утилита без запуска веб-приложения:
python -m backend.dataset_analyzer.cli .\examples\sample_customers.csv --output .\reports\sample_profile.jsonpytestТесты покрывают все три слоя: профилировщик (форматы, кодировки, метрики качества), ETL (объединение, поколоночные правила, рекомендации) и обучение (классификация, регрессия, валидация конфигурации).
backend/
api.py # FastAPI-эндпоинты (analyze, data/view, etl, models)
dataset_analyzer/
profiler.py # чтение файлов и построение профиля
data_view.py # постраничный просмотр, поиск и SQL
etl.py # рецепты ETL и рекомендации
training.py # обучение и сравнение моделей
models.py # структуры данных профиля
cli.py # CLI-обёртка профилировщика
frontend/
src/
App.tsx # Dataset Overview и общая оболочка
DataViewerWorkspace.tsx # раздел Data Viewer
EtlWorkspace.tsx # раздел ETL
ModelsWorkspace.tsx # раздел Models
examples/ # демонстрационные датасеты
tests/ # pytest
- AI-слой: объяснение профиля, качества данных и результатов моделей естественным языком поверх уже собранных фактов.
- Наполнение раздела Test Drive.
- Сохранение обученной модели и предсказание на новых данных.