Это приложение на базе Streamlit, предназначенное для автоматизированного сбора, анализа и формирования единого рейтинга студентов. Система принимает на вход разрозненные Excel и CSV таблицы (ведомости посещаемости, списки оценок, данные об участии в мероприятиях), автоматически распознает их структуру и рассчитывает итоговые баллы.
Система пытается автоматически определить, что вы загрузили:
- Посещаемость (колонки-датчики/даты, маркеры
+ / Н / Уили1/0,да/нет) - Успеваемость (оценки 2–5, "зачёт/незачёт", баллы 0–100 и т.п.)
- Активности (длинный текст, ключевые слова: конференция/публикация/CTF/хакатон/олимпиада и т.д.)
При необходимости тип и колонки можно поправить вручную в блоке “Контроль распознавания”.
Если в одной ячейке указано несколько мероприятий, система разделит их на отдельные события и начислит баллы каждому отдельно:
- разделители: переносы строк,
;, маркеры списков - для каждого события определяется тип, роль, доказательство (URL)
- Режим формы (строгий): если нет URL-доказательства — баллы не начисляются, а в отчёте качества появляются ошибки.
- Доверенная таблица организаторов: можно загружать списки от преподавателей/организаторов (без ссылок и без строгого формата).
В интерфейсе для каждого листа можно включить галочку:
“Доверенная таблица организаторов (можно без ссылок и строгого формата)”
Система строит:
- Quality report (ошибки/предупреждения по активностям): отсутствие доказательств, неправильный формат, нераспознанный тип и т.п.
- Duplicates report: найденные дубли активностей (начисление пропущено/удалено второй раз)
Формируются:
- Рейтинг
- Свод начислений
- Детализация начислений
- Свод по группам
- (опционально) вкладки Quality и Duplicates
- Python 3.10+
- Библиотеки из
requirements.txt
Поместите все файлы в одну директорию (или настройте структуру пакетов, если используете папку core/) и выполните команду:
streamlit run app.pyПриложение откроется в браузере по адресу http://localhost:8501.
- Загрузите файлы (можно сразу несколько):
.xlsxи/или.csv - В разделе “Контроль распознавания” проверьте:
- правильность типа таблицы (посещаемость/оценки/активности)
- выбор колонок ФИО / Группа / Номер студенческого билета
- список колонок активности/оценок/посещаемости
- Для таблиц активностей:
- включите “Доверенная таблица организаторов” для таблиц преподавателей/организаторов
- для Google Forms-таблиц оставляйте режим по умолчанию (строгий)
- Нажмите “Сформировать итоговый отчёт (рейтинг + начисления)”
- Скачайте Excel-отчёт
- Из таблицы извлекаются оценки (2–5) или баллы (0–100 → переводятся в 2–5 порогами).
- Считается средняя оценка по всем найденным дисциплинам.
- Перевод в коэффициент 0..1:
(avg_grade - 2) / 3 - Баллы:
coef * acad_max(настраивается в UI)
- Считается:
present / (present + absent) - Если ниже порога
threshold— баллы 0. - Иначе:
rate * att_max
Суммируются баллы событий по таблице баллов в интерфейсе:
activity_points[kind][role]
Выгрузка может содержать поля:
- ФИО
- Учебная группа
- Номер студенческого билета
- Длинный текст “Укажите мероприятия…” / “Укажите научную деятельность…”
Рекомендуемый формат событий (строгий режим формы):
Мероприятие - Статус - Доказательство(URL)Активность - Статус - Доказательство(URL)
Можно указывать несколько строк (каждое событие с новой строки).
Могут быть форматы:
- списки участников
- таблицы докладов/секций/тем
Для таких таблиц включайте:
“Доверенная таблица организаторов”
Тогда доказательства/строгий формат не обязательны.
Система может сохранять профиль для структуры таблицы (по сигнатуре колонок), чтобы при повторной загрузке не настраивать заново.
Если таблица внезапно распознаётся неправильно:
- откройте лист в “Контроль распознавания”
- исправьте тип/колонки
- нажмите “Сохранить профиль распознавания”
Если нужно полностью сбросить распознавание, удалите profiles.json (путь определяется в core/utils.py).
В интерфейсе есть блок “Ручные достижения / доп. начисления”. Можно добавить:
- активность (пойдёт в активность)
- доп. баллы (сразу в итог)
app.py— Streamlit UI и orchestrationcore/ingest.py— чтение Excel/CSVcore/header_detect.py— поиск блока заголовковcore/infer.py— распознавание схемы таблицы (тип, колонки)core/extract.py— извлечение evidence (оценки/посещения/активности)core/dedupe.py— дедупликация активностейcore/scoring.py— расчёт итоговcore/export.py— экспорт Excelcore/manual.py— ручные начисленияcore/utils.py— утилиты/пути/нормализация