Как посчитать метрики командности (GitLab): различия между версиями
Материал из Поле цифровой дидактики
Patarakin (обсуждение | вклад) Нет описания правки |
Patarakin (обсуждение | вклад) Нет описания правки |
||
| Строка 8: | Строка 8: | ||
{{Шаблон:Team metrics}} | {{Шаблон:Team metrics}} | ||
== 1. Сюжет урока и данные == | |||
В этом занятии мы изучаем, как по следам коммитов в GitLab можно оценивать командность и совместность работы в проектах. Источник данных — анонимизированный датасет df_rich_team, где каждая строка описывает один коммит: кто (анонимный ID), когда, в какой проект и с каким объёмом изменений. | |||
Датасет доступен в формате CSV на GitHub (анонимные идентификаторы авторов и проектов, без имён и e-mail) | |||
== 2. Подготовка среды и загрузка данных == | |||
Задача этого шага — подключить нужные пакеты, загрузить датасет и привести время к удобному формату. | |||
<syntaxhighlight lang="R" line> | |||
library(tidyverse) | |||
library(lubridate) | |||
library(ineq) | |||
library(scales) | |||
library(knitr) | |||
URL <- paste0( | |||
"https://raw.githubusercontent.com/patarakin/stat-data/", | |||
"1118a56e7544839d7df91a60df2a25ba577c4dd4/datasets/csv/df_rich_team.csv" | |||
) | |||
df <- read_csv(URL, show_col_types = FALSE) |> | |||
mutate( | |||
commit_time = ymd_hms(commit_time, tz = "UTC"), | |||
commit_date = as.Date(commit_time) | |||
) | |||
glimpse(df) | |||
</syntaxhighlight> | |||
---- | ---- | ||
[[Категория:Lesson]] | [[Категория:Lesson]] | ||
Версия от 17:38, 16 марта 2026
| Описание | |
|---|---|
| Область знаний | |
| Область использования (ISTE) | |
| Возрастная категория | 21
|
| Поясняющее видео | |
| Близкие рецепту понятия | Стигмергия |
| Среды и средства для приготовления рецепта: | R, GitLab |
Метрики
| Имя переменной | Тип | Единицы / диапазон | Краткое описание | Интерпретация в контексте командности |
|---|---|---|---|---|
| project_id | строка | произвольный ID | Анонимизированный идентификатор проекта (репозитория GitLab). | Узел уровня проекта; используется для агрегации коммитов и связи с другими таблицами. |
| n_authors | целое | ≥ 1 | Количество уникальных авторов (author_anon), сделавших хотя бы один коммит в проект. | Размер команды; большее значение означает более многолюдный проект. |
| n_commits | целое | ≥ 1 | Общее число коммитов во всём проекте. | Интенсивность работы; грубый показатель общего объёма действий. |
| total_changes | целое | ≥ 0 (строки) | Сумма total_changes по всем коммитам (добавления + удаления). | Общий объём изменённого кода; прокси для усилий команды. |
| duration_days | число | ≥ 0 (дни) | Разница между последним и первым коммитом (в днях). | Продолжительность активной жизни проекта; длина временного окна совместной работы. |
| succession_ratio | число | [0; 1] | Доля «смен авторов» в последовательности коммитов: в скольких шагах подряд следующий автор отличается от предыдущего. | Индикатор стигмергического обмена: чем выше, тем чаще участники реагируют на следы друг друга. |
| burstiness | число | примерно [-1; 1] | Коэффициент вспышкообразности по интервалам между коммитами (на основе средней и стандартного отклонения). | Характер ритма работы: отрицательные значения ≈ регулярная активность, положительные ≈ чередование пауз и «вспышек». |
| commit_rate_per_day | число | ≥ 0 (комм./день) | Среднее число коммитов в день за период проекта. | Нормированная интенсивность работы; позволяет сравнивать проекты разной длительности. |
| shared_activity_index | число | [0; 1] | Доля пар авторов, у которых есть хотя бы один общий день активности в проекте. | Индикатор синхронности: 0 — авторы работают разрозненно, 1 — все пары хотя бы иногда активны в одни и те же дни. |
| refactoring_ratio | число | [0; 1] | Отношение общего числа удалённых строк (deletions) к total_changes. | Грубый показатель доли переработки/рефакторинга по сравнению с чистым добавлением кода. |
| mean_response_min | число | ≥ 0 (минуты) или NA | Среднее время (в минутах) между коммитами разных авторов, идущими друг за другом. | Скорость отклика на действия коллег; меньшие значения соответствуют более быстрой реакционной командной работе. |
| gini_contribution | число | [0; 1] | Коэффициент Джини по распределению вкладов (total_changes) между авторами. | Баланс участия: 0 — все авторы вносят примерно одинаковый вклад; 1 — весь вклад сосредоточен у одного участника. |
| balance_score | число | [0; 1] | Нормированное преобразование (min–max) величины 1 − gini_contribution. | Компонента индекса командности: 1 соответствует максимально равномерному распределению вклада. |
| stigmergy_score | число | [0; 1] | Нормированное значение succession_ratio (min–max по выборке проектов). | Компонента индекса командности: интенсивность стигмергического обмена следами. |
| sync_score | число | [0; 1] | Нормированное значение shared_activity_index (min–max по выборке). | Компонента индекса командности: уровень синхронности активности авторов. |
| teamwork_index | число | [0; 1] | Среднее трёх компонент: balance_score, stigmergy_score, sync_score. | Интегральный индекс командности IMOI–Stigmergy: чем ближе к 1, тем более сбалансированная и согласованная работа команды. |
| teamwork_tier | фактор | уровни: Q1_low, Q2, Q3, Q4_high | Квартильная группа по значению teamwork_index (4 равные группы по числу проектов). | Категориальная оценка уровня командности; Q1_low — нижний квартиль, Q4_high — верхний. |
1. Сюжет урока и данные
В этом занятии мы изучаем, как по следам коммитов в GitLab можно оценивать командность и совместность работы в проектах. Источник данных — анонимизированный датасет df_rich_team, где каждая строка описывает один коммит: кто (анонимный ID), когда, в какой проект и с каким объёмом изменений.
Датасет доступен в формате CSV на GitHub (анонимные идентификаторы авторов и проектов, без имён и e-mail)
2. Подготовка среды и загрузка данных
Задача этого шага — подключить нужные пакеты, загрузить датасет и привести время к удобному формату.
library(tidyverse)
library(lubridate)
library(ineq)
library(scales)
library(knitr)
URL <- paste0(
"https://raw.githubusercontent.com/patarakin/stat-data/",
"1118a56e7544839d7df91a60df2a25ba577c4dd4/datasets/csv/df_rich_team.csv"
)
df <- read_csv(URL, show_col_types = FALSE) |>
mutate(
commit_time = ymd_hms(commit_time, tz = "UTC"),
commit_date = as.Date(commit_time)
)
glimpse(df)
