Веб-приложение для анализа табличных данных с помощью различных LLM (OpenAI, YandexGPT, GigaChat).
- Загрузка файлов: CSV, Excel, PDF
- Пагинация: Обработка больших файлов с постраничным отображением
- Базовый статистический анализ: Автоматический анализ числовых и категориальных колонок
- Визуализация данных: Интерактивные графики с выбором осей
- Автоматическое построение диаграмм: Распознавание типов данных и создание графиков
- Гибкий выбор LLM: Поддержка OpenAI, YandexGPT, GigaChat с выбором конкретных моделей
OpenAI: (слева направо — по убыванию мощности)
GPT-4.1— мощная модель для сложного анализаGPT-4.1 Mini— эффективная для большинства задачGPT-4.1 Nano— экономичная для базового анализа
YandexGPT: (слева направо — по убыванию мощности)
yandexgpt— полная модельyandexgpt-lite— быстрая модель
GigaChat: (слева направо — по убыванию мощности)
GigaChat:latest— последняя версияGigaChat:latest-9b— облегчённая версия
- Обработка пропусков: Интерактивный выбор действий при обнаружении null/NaN/пустых значений:
- Отбросить строки с пропусками
- Заполнить средним (только для числовых колонок)
- Ручное заполнение — выбрать значения для каждой колонки с пропусками из выпадающего списка уникальных значений или ввести вручную
- Заполнить с помощью ИИ — получить подсказки для каждого пропуска на основе анализа похожих строк, принять все или отредактировать значения
- Автоматическая валидация: Проверка структуры данных и кодировки
- Обработка ошибок: Попытка чтения CSV в разных кодировках (UTF-8, CP1251)
- Ограничения файлов: Максимальный размер 100 МБ
- Обработка больших CSV: Файлы >10 МБ ограничиваются первыми 1000 строками
- Поддержка форматов: CSV, Excel (.xlsx, .xls), PDF
- Тестовый режим: Возможность работы без API-ключей для демонстрации
- Статистика по колонкам: Минимум, максимум, среднее, количество уникальных значений
- Интерактивные графики: Выбор осей X и Y для построения графиков
- Автоматические диаграммы: Bar chart для категориальных+числовых, Line chart для дат+значений
- Пагинация таблицы: Навигация по большим наборам данных
- Логирование: Подробные логи для отладки (DEBUG уровень)
- Экспорт PDF: Скачивание отчёта с данными, графиками и анализом
- Над таблицей доступна панель фильтров:
- Для категориальных колонок — выпадающие списки уникальных значений.
- Для числовых — поля для ввода min/max.
- Для дат — два поля выбора диапазона дат.
- Кнопка «Сбросить фильтры» для очистки всех фильтров.
- Фильтрация применяется мгновенно, интерфейс адаптивный и современный.
- Блок ручной визуализации всегда расположен под автоматическим анализом, занимает всю ширину.
- По умолчанию строится график по совету ИИ, пользователь может менять оси X и Y.
- После заполнения пропусков (особенно с помощью ИИ) всегда запускается повторный анализ и обновление графиков.
- Кнопка экспорта позволяет скачать отчёт с анализом, графиками и первыми строками данных.
- Выбор типа отчёта: можно выбрать, что включать в PDF — только аналитику, только данные или оба блока.
- Визуализация графиков: в PDF-отчёт автоматически добавляются изображения пользовательского и автоматического графика (если они построены).
- Имя файла: если в отчёте есть аналитика, в имени PDF-файла указывается название выбранной LLM-модели (например,
analytics-report-GPT-4_1-2025-07-14.pdf).
- Для больших файлов реализована кнопка «Показать ещё», позволяющая подгружать данные порциями.
- Интерфейс устойчив к ошибкам (undefined/null), все действия сопровождаются пояснениями.
- В диалоге ИИ-заполнения только одна кнопка «Применить» с пояснением для пользователя.
- Загрузка файла
- Проверка на пропуски
- Если есть пропуски, появляется модальное окно с вариантами:
- "Отбросить строки с пропусками"
- "Заполнить пропуски средним (только для числовых колонок)"
- "Ручное заполнение" — для каждой колонки с пропусками можно выбрать значение из выпадающего списка уникальных значений или ввести вручную. Все пропуски в колонке заполняются выбранным значением.
- "Заполнить с помощью ИИ" — для каждой колонки с пропусками запускается анализ похожих строк, предлагаются значения с уровнем уверенности. Можно принять все подсказки одной кнопкой или отредактировать отдельные значения (выпадающий список, ручной ввод). Строки с низкой уверенностью подсвечиваются.
- Если есть пропуски, появляется модальное окно с вариантами:
- Обработка данных
- После выбора и заполнения данные преобразуются
- Только после этого запускается анализ и визуализация
- Для каждой колонки с пропусками открывается диалог:
- Таблица строк с пропусками, для каждой — подсказка от ИИ, уровень уверенности, выпадающий список уникальных значений, поле для ручного ввода
- Кнопки "Применить все подсказки" и "Применить выбранные"
- Возможность отменить и вернуться к другому способу
- Строки с низкой уверенностью подсвечиваются
- Распознавание типов данных:
- Числовые колонки (year, condition, odometer, mmr, sellingprice)
- Категориальные колонки (make, model, color, etc.)
- Дата колонки (распознаются по паттернам дат)
- Автоматическое создание графиков:
- Bar chart: категориальные + числовые (например, make vs sellingprice)
- Line chart: даты + числовые (например, saledate vs sellingprice)
# Бэкенд
pip install -r backend/requirements.txt
# Фронтенд
cd frontend && npm install# Бэкенд (порт 5000)
cd backend && python pdf_server.py
# Фронтенд (порт 3000)
cd frontend && npm startПерейдите на http://localhost:3000
# OpenAI
OPENAI_API_KEY=your_openai_key_here
# YandexGPT
YANDEX_FOLDER_ID=your_folder_id
YANDEX_API_KEY=your_yandex_key_here
# GigaChat
GIGACHAT_CREDENTIALS=your_gigachat_credentials
GIGACHAT_CERT_PATH=russian_trusted_root_ca.cer
# Тестовый режим (без API-ключей)
TEST_MODE=trueДля демонстрации без API-ключей установите TEST_MODE=true в .env. В этом режиме:
- LLM возвращают шаблонные ответы
- Все функции работают, но без реального анализа
- Полезно для тестирования интерфейса
- Максимальный размер: 100 МБ
- Большие CSV: Файлы >10 МБ ограничиваются первыми 1000 строками
- Ошибка 413: Автоматическая обработка при превышении лимита
- CSV: Поддержка UTF-8 и CP1251 кодировок
- Excel: Чтение всех листов (.xlsx, .xls)
- PDF: Извлечение первой таблицы с первой страницы
- Ошибки кодировки: Автоматическая попытка альтернативной кодировки
- Frontend: Строгая проверка структуры ответа от backend
- Backend: Логирование всех операций (DEBUG уровень)
- Обработка NaN: Автоматическая замена на null в JSON
В данных обнаружены пропуски:
- Колонка "body": 5 строк
- Колонка "sellingprice": 2 строки
Что сделать с пропусками?
[ ] Отбросить строки с пропусками
[ ] Заполнить пропуски средним (только для числовых колонок)
[ ] Ручное заполнение
[ ] Заполнить с помощью ИИ
[Продолжить]
- pdf_server.py: Основной сервер с API endpoints
- llm/: Модули для работы с LLM провайдерами
main_processor.py— центральная точка вызова LLMopenai_helper.py— работа с OpenAIyandex_gpt_helper.py— работа с YandexGPTgigachat_helper.py— работа с GigaChat
- App.tsx: Основной компонент с логикой обработки пропусков
- components/: UI компоненты
FileUpload.tsx— загрузка файловModelSelector.tsx— выбор модели LLMAnalysisResult.tsx— отображение результатов с автоматическими диаграммамиManualFillDialog.tsx— ручное заполнение пропусковAIFillDialog.tsx— ИИ-заполнение пропусков с подсказками
- api/: HTTP клиент с валидацией ответов
- types/: TypeScript типы
POST /api/upload— загрузка файла (CSV, Excel, PDF)POST /api/analyze— анализ данных LLMPOST /api/report— генерация PDF отчётаPOST /api/fill-missing-ai— ИИ-подсказки для заполнения пропусковGET /api/test— проверка работоспособности
- Заполнение пропусков с помощью ИИ (LLM) для сложных случаев
- Расширенное построчное ручное заполнение
- Расширенная статистика и визуализация
- Настраиваемый размер страницы в интерфейсе
- Кэширование результатов анализа
- Улучшенная обработка больших файлов
Проект развивается!
Автор: Георгий Белянин (Georgy Belyanin) — georgy.belyanin@gmail.com
Репозиторий: https://github.com/ergon73/multi-llm-data-analyzer