Как провести сравнительный анализ поведения на поле цифровой дидактики (R)
Материал из Поле цифровой дидактики
| Описание | Мы собрали датасет о действиях участников на площадке digiga и хотим провести анализ этого датасета с демонстрацией возможностей среды R
|
|---|---|
| Область знаний | Информатика, Большие данные |
| Область использования (ISTE) | |
| Возрастная категория | 21
|
| Поясняющее видео | |
| Близкие рецепту понятия | |
| Среды и средства для приготовления рецепта: | R, Digida2026 |
Датасет Digida2026 - собран и размещен на GitHub
getwd()
library(tidyverse)
library(ggplot2)
students <- read_csv("https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/users7_activity_with_categories.csv",
show_col_types = FALSE)
# rm(students)
students
# --- Pipe
students |> head()
###-- Select
students %>%
select(username, n_total_edits, days_active, edits_articles,
n_files_uploaded, discipline)
###-- Select + Filter
students %>%
select(username, n_total_edits, days_active, edits_articles,
n_files_uploaded, discipline) %>%
filter(n_total_edits > 10) %>%
filter(days_active < 2)
### --- Select + Mutate
## - edit_per_day -активность в день
# pct_articles - активность на страницах (0), а не в пространстве обсуждений
students %>%
select(username, n_total_edits, days_active, edits_articles,
n_files_uploaded, discipline) %>%
mutate(
edit_per_day = round(n_total_edits / days_active, 2),
pct_articles = round(edits_articles / n_total_edits * 100, 1)
)
### + Groupby
students %>%
select(username, n_total_edits, days_active, edits_articles,
n_files_uploaded, discipline) %>%
mutate(
edit_per_day = round(n_total_edits / days_active, 2),
pct_articles = round(edits_articles / n_total_edits * 100, 1)
) %>%
group_by(discipline)
#--- Groupby + Summarize
students %>%
select(username, n_total_edits, days_active, edits_articles,
n_files_uploaded, discipline) %>%
mutate(
edit_per_day = round(n_total_edits / days_active, 2),
pct_articles = round(edits_articles / n_total_edits * 100, 1)
) %>%
filter(days_active > 0) %>%
group_by(discipline) %>%
summarise(
n_students = n(),
mean_edits = round(mean(n_total_edits), 1),
mean_edit_per_day = round(mean(edit_per_day), 2),
total_files = sum(n_files_uploaded),
mean_pct_articles = round(mean(pct_articles), 1),
.groups = "drop"
) %>%
arrange(desc(n_students))
#--------------------
students_analysis <- students %>%
select(username, n_total_edits, days_active, edits_articles,
n_files_uploaded, discipline) %>%
filter(days_active > 0) %>%
mutate(
edit_per_day = round(n_total_edits / days_active, 2),
pct_articles = round(edits_articles / n_total_edits * 100, 1)
)
##
glimpse(students_analysis)
unique(students_analysis$discipline)
summary(students_analysis$edit_per_day)
p <- ggplot(students_analysis, aes(x = discipline, y = edit_per_day)) +
geom_boxplot()
print(p)
p <- ggplot(students_analysis, aes(x = discipline, y = edit_per_day)) +
geom_boxplot()
print(p)
students_analysis <- students %>%
select(discipline, n_total_edits, days_active) %>%
filter(days_active > 0) %>%
mutate(
edit_per_day = n_total_edits / days_active
)
ggplot(students_analysis, aes(x = discipline, y = edit_per_day)) +
geom_boxplot()
## ggplot
students_analysis %>%
ggplot(aes(x = discipline, y = edit_per_day, fill = discipline)) +
geom_boxplot() +
labs(
title = "Edit frequency per day by discipline",
x = "Discipline",
y = "Edits per day"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Основные глаголы преобразования данных
| Функция | Что делает | С чем работает | Простой пример (R) |
|---|---|---|---|
select()
|
Выбирает (оставляет) нужные столбцы датафрейма; остальные отбрасывает. | Столбцы (переменные) | students |>
select(username, n_total_edits, discipline)
|
filter()
|
Оставляет строки, которые удовлетворяют логическому условию (фильтрация наблюдений). | Строки (наблюдения) | students |>
filter(n_total_edits > 50, discipline == "Филология")
|
mutate()
|
Добавляет новые столбцы или изменяет существующие, вычисляя их из других переменных. | Столбцы (новые или изменённые переменные) | students |>
mutate(
edit_per_day = n_total_edits / days_active,
pct_articles = edits_articles / n_total_edits * 100
)
|
group_by()
|
Задаёт группировку по одной или нескольким переменным; изменяет "структуру вычислений", но не сами данные. | Группы строк (по категориям) | students |>
group_by(discipline)
|
summarise()
|
Строит сводку по группам: сворачивает много строк в одну строку на группу (средние, суммы и т.п.). | Группы (после group_by())
|
students |>
group_by(discipline) |>
summarise(
mean_edits = mean(n_total_edits, na.rm = TRUE),
n_students = n()
)
|
