knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
library(dplyr)
##
## Присоединяю пакет: 'dplyr'
## Следующие объекты скрыты от 'package:stats':
##
## filter, lag
## Следующие объекты скрыты от 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
data <- read.csv("var04.csv")
cat("Первые 6 строк данных:\n")
## Первые 6 строк данных:
head(data)
## stid discid semnum stmark
## 1 1839 50 4 65
## 2 1349 26 4 37
## 3 1355 245 4 98
## 4 1839 221 4 70
## 5 1355 50 4 77
## 6 1355 221 4 64
cat("\nСтруктура данных:\n")
##
## Структура данных:
str(data)
## 'data.frame': 181 obs. of 4 variables:
## $ stid : int 1839 1349 1355 1839 1355 1355 1839 1387 1347 1353 ...
## $ discid: int 50 26 245 221 50 221 245 26 246 247 ...
## $ semnum: int 4 4 4 4 4 4 4 4 4 4 ...
## $ stmark: int 65 37 98 70 77 64 86 22 90 95 ...
cat("\nОбщая статистика по оценкам:\n")
##
## Общая статистика по оценкам:
summary(data$stmark)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 28.00 70.00 60.18 85.00 100.00
# Средние оценки по дисциплинам
discipline_stats <- data %>%
group_by(discid) %>%
summarise(
mean_mark = round(mean(stmark), 1),
count = n()
) %>%
arrange(desc(mean_mark))
cat("\nТоп-5 дисциплин по среднему баллу:\n")
##
## Топ-5 дисциплин по среднему баллу:
head(discipline_stats, 5)
## # A tibble: 5 × 3
## discid mean_mark count
## <int> <dbl> <int>
## 1 245 66.4 24
## 2 3 64.3 23
## 3 26 63.1 24
## 4 246 62 19
## 5 2 61 22
# Распределение оценок
ggplot(data, aes(x = stmark)) +
geom_histogram(binwidth = 5, fill = "steelblue", color = "white") +
labs(title = "Распределение оценок студентов", x = "Оценка", y = "Количество") +
theme_minimal()

# Подготовка данных
cluster_data <- data %>%
group_by(stid) %>%
summarise(
mean_mark = mean(stmark),
courses_count = n()
)
# Кластеризация
set.seed(123)
kmeans_result <- kmeans(scale(cluster_data[, -1]), centers = 3)
cluster_data$cluster <- as.factor(kmeans_result$cluster)
# Визуализация кластеров
ggplot(cluster_data, aes(x = mean_mark, y = courses_count, color = cluster)) +
geom_point(size = 3) +
labs(title = "Кластеризация студентов по успеваемости",
x = "Средняя оценка", y = "Количество курсов") +
theme_minimal()
