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()