team-work-ai-Teyu
Powered by: Teyu Slava1111 discocat
(Была Student 2 у Slava1111)
Описание выполненной работы
В этом репозитории реализован небольшой аналитический сервис для обработки статического снимка метаданных GitHub‑репозиториев и предоставления статистики через Django REST API. Работа выполнена в несколько этапов:
- Анализ спецификации (
): были зафиксированы жёсткие ограничения (без ML, только агрегации и простая интерполяция, строгая схема входных данных, ISO 8601 даты, кэширование детерминированных результатов, обязательные поляcodex.md/dataиmetaв ответах).data_freshness - Проектирование структуры модуля: основная логика была вынесена в отдельный модуль
, чтобы один и тот же код можно было использовать и как обычную Python‑библиотеку (в аналитических пайплайнах), и как часть Django/DRF‑приложения.solution.py - Реализация аналитики: с помощью
реализованы функции для:pandas- расчёта трендов по звёздам за период (месяц/квартал),
- агрегирования статистики по языкам программирования,
- оценки «здоровья» отдельного репозитория по активности, свежести и популярности.
- Интеграция с Django REST API: поверх аналитических функций добавлены классы‑представления DRF, реализующие эндпоинты
,/trending,/languagesс обработкой ошибок и граничных случаев./health/{repo_name} - Демонстрация и артефакты (
): создана минимальная, но показательная конфигурация данных и скрипт, подтверждающие работоспособность и соответствие спецификации.demo/
Структура репозитория
-
codex.md
Оригинальная спецификация системы: описание входных данных, ограничений, формата ответов и бизнес‑логики для эндпоинтов,/trendingи/languages./health/{repo_name} -
solution.py
Основной модуль проекта, включающий:- Загрузка и валидация данных:
,load_repositories_from_csv— функции чтения CSV/JSON со строгой проверкой схемы (обязательные поля, числовые типы, ISO 8601‑даты).load_repositories_from_json— регистрация набора данных и установка метки актуальности (register_dataset), а также сброс кэша.data_freshness
- Аналитические функции:
— логикаcompute_trending_repositories(time_period, language=None, limit=10): относительный прирост звёзд за указанный период (месяц/квартал) с аппроксимацией через линейную интерполяцию по времени существования репозитория./trending— логикаcompute_language_stats(): группировка по/languages, средние значения звёзд и медианный рост, формирование спискаlanguage.trending_languages— логикаcompute_repo_health(repo_name): вычисление показателей активности, свежести, популярности, итогового/health/{repo_name}и статуса.health_score
- Кэширование:
- внутренний словарь
, где ключ зависит от версии данных (_CACHE) и параметров запроса, а значения — готовые JSON‑совместимые структуры; это позволяет не пересчитывать детерминированные запросы.data_freshness
- внутренний словарь
- Django REST API:
,TrendingView,LanguagesView— классыHealthView, которые вызывают соответствующие аналитические функции, формируют ответы строго в форматеAPIViewи корректно обрабатывают ошибки (неверные параметры, отсутствие датасета, отсутствующий репозиторий).{ "data": ..., "meta": ... }
- Визуализация:
— вспомогательная функция для построения bar‑чарта по среднему количеству звёзд на язык (используетplot_top_languages_by_stars, если он установлен).matplotlib
- Загрузка и валидация данных:
-
demo/
Папка с артефактами, демонстрирующими, как использовать модуль:— небольшой статический снимок репозиториев по требуемой схеме (одна строка на репозиторий, все даты в ISO 8601, UTC).sample_data.csv— примерные JSON‑ответы для основных запросов, иллюстрирующие структуруexample_responses.jsonиdata, а также наличиеmetaво всех случаях.data_freshness
Как использовать написанный код
-
Внутри Python‑скриптов / ноутбуков:
- импортировать функции из
,solution.py - загрузить и зарегистрировать датасет,
- вызывать аналитические функции напрямую (они не зависят от Django).
- импортировать функции из
-
В составе Django‑приложения:
- добавить
,TrendingView,LanguagesViewвHealthView,urls.py - позаботиться о том, чтобы
был вызван при старте приложения (или периодически, при обновлении данных),register_dataset - использовать стандартный стек Django REST Framework для аутентификации/логирования/ограничения доступа при необходимости.
- добавить
Таким образом, репозиторий содержит не только реализацию бизнес‑логики строго по спецификации, но и наглядные артефакты, демонстрирующие, как этот код применять на практике как в скриптовом режиме, так и через HTTP‑API.