153 lines
No EOL
4.8 KiB
Text
153 lines
No EOL
4.8 KiB
Text
---
|
|
execute:
|
|
echo: false
|
|
warning: false
|
|
fig-width: 10
|
|
fig-height: 10
|
|
format:
|
|
beamer:
|
|
theme: Boadilla
|
|
---
|
|
|
|
```{r}
|
|
knitr::opts_chunk$set(echo = FALSE)
|
|
library(ggplot2)
|
|
library(plotly)
|
|
library(ggokabeito)
|
|
library(RColorBrewer)
|
|
library(patchwork)
|
|
|
|
library(here)
|
|
|
|
library(knitr)
|
|
library(kableExtra)
|
|
|
|
library(dplyr)
|
|
library(tidyr)
|
|
library(stringr)
|
|
library(DT)
|
|
|
|
|
|
imp_data <- read.csv(file.path(here(), "data", "03_cah_results.csv"))
|
|
colnames(imp_data)[6:ncol(imp_data) - 1] <- c(
|
|
"1AC-OUVERTURE", "1AC-MI",
|
|
"2A-UEchoix-S1-UC1", "2A-UEchoix-S1-UC2", "2A-UEchoix-S2-UC3",
|
|
"2A-UEchoix-S2-UC4",
|
|
"2A-UEchoix-S2-UC5", "2A-UEchoix-S2-UC6",
|
|
"2A-Projet-S2"
|
|
)
|
|
data <- imp_data %>%
|
|
mutate_if(sapply(imp_data, is.character), as.factor)
|
|
|
|
effectif_cluster <- table(data[["cluster"]])
|
|
```
|
|
```{r}
|
|
|
|
data_details_sequence <- read.csv(file.path(here(), "data", "details-sequence-nettoyes.csv"))
|
|
|
|
for (code_bloc in colnames(data)[6:ncol(data) - 1]) {
|
|
# code_bloc <- "1AC-OUVERTURE"
|
|
matching_code_cours <- data_details_sequence[which(data_details_sequence[["code_bloc"]] == code_bloc), c("code_cours", "cours")]
|
|
row_id_in_matching <- which(matching_code_cours[["code_cours"]] %in% levels(data[[code_bloc]]))
|
|
levels(data[[code_bloc]]) <- matching_code_cours[row_id_in_matching, "cours"]
|
|
}
|
|
```
|
|
|
|
# Présentation des données
|
|
|
|
```{r}
|
|
#| width: 50%
|
|
#| tab-cap: Extrait des données traitement et nettoyage ($N = 370$ étudiants)
|
|
example_data <- head(data[, -c(1,6:9)], 3)
|
|
kable(example_data, format = "latex", booktabs = TRUE) %>%
|
|
kable_styling(latex_options="scale_down") %>%
|
|
column_spec(1:ncol(example_data),width = "3cm")
|
|
```
|
|
|
|
:::{.callout-warning appearance="minimal"}
|
|
\small
|
|
**Problème :** Il y a beaucoup de `NA` (des données manquantes), cela peut-être dûe à une
|
|
mauvaise extraction, à de mauvaises correspondances quand j'ai croisé les
|
|
sources.
|
|
:::
|
|
|
|
```{r}
|
|
getPalette <- colorRampPalette(colors = palette_okabe_ito())
|
|
plot_prop_cluster <- function(orig_data, eff, ...) {
|
|
data <- orig_data
|
|
|
|
colorCount <- length(unique(data[["uc"]]))
|
|
levels(data$cluster) <- paste0(levels(data$cluster), " (N=", eff, ")")
|
|
p <- ggplot(data, ...) +
|
|
aes(x = "", y = nb, fill = uc, label = nb) +
|
|
geom_bar(position = "fill", stat = "identity") +
|
|
theme_bw() +
|
|
xlab("Cluster") +
|
|
ylab("Proportion dans le cluster") +
|
|
labs(fill = "Choix") +
|
|
theme(axis.title.y = element_text(angle = 90, vjust = .5, hjust = 1), aspect.ratio = 1) +
|
|
theme(legend.position = "bottom", text=element_text(size=20)) +
|
|
guides(fill = guide_legend(ncol = 2, byrow = TRUE)) +
|
|
scale_fill_manual(values = getPalette(colorCount), ) +
|
|
# coord_flip() +
|
|
scale_x_discrete() +
|
|
# coord_polar("y", start=0) +
|
|
facet_wrap(vars(data[["cluster"]]))
|
|
|
|
return(p)
|
|
}
|
|
```
|
|
|
|
# Extraits de résultats
|
|
|
|
```{r parcours_domaine}
|
|
#| layout-ncol: 2
|
|
#| fig-cap: "Résultats pour les parcours et les domaines"
|
|
#| fig-subcap: ""
|
|
vec_sequences <- c("parcours", "domaine2A")#, "2A-UEchoix-S1-UC1")
|
|
ac <- NULL
|
|
for (sequence in vec_sequences){
|
|
ac <- as.data.frame(table(data[["cluster"]], data[[sequence]], useNA = "ifany"))
|
|
colnames(ac) <- c("cluster", "uc", "nb")
|
|
ac <- ac %>%
|
|
group_by(cluster) %>%
|
|
mutate(Prop = nb / sum(nb), uc = str_wrap(uc, 32))
|
|
p <- ac %>% plot_prop_cluster(eff = effectif_cluster) + ggtitle(str_wrap(paste("Proportion pour", sequence), 20))
|
|
print(p)
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
```{r domaine_uc1}
|
|
#| layout-ncol: 2
|
|
#| fig-cap: "Résultats pour les domaines et les UC1"
|
|
#| fig-subcap: ""
|
|
vec_sequences <- c("domaine2A", "2A-UEchoix-S1-UC1")#, "2A-UEchoix-S1-UC1")
|
|
ac <- NULL
|
|
for (sequence in vec_sequences){
|
|
ac <- as.data.frame(table(data[["cluster"]], data[[sequence]], useNA = "ifany"))
|
|
colnames(ac) <- c("cluster", "uc", "nb")
|
|
ac <- ac %>%
|
|
group_by(cluster) %>%
|
|
mutate(Prop = nb / sum(nb), uc = str_wrap(uc, 32))
|
|
p <- ac %>% plot_prop_cluster(eff = effectif_cluster) + ggtitle(str_wrap(paste("Proportion pour", sequence), 20))
|
|
print(p)
|
|
}
|
|
```
|
|
|
|
# En bref
|
|
## Disponible dès maintenant
|
|
|
|
- Accès au détails pour chaque UCs à choix.
|
|
- Toutes les données vous seront communiquées afin que vous puissiez vous en servir.
|
|
- Nous avons accès à ces données par dominante également[^1].
|
|
|
|
## A améliorer pour pérenniser
|
|
|
|
- Avec de **meilleures données** (moins de `NA`, des noms de matières à jour avec Synapses) c'est une analyse très simple et rapide.
|
|
- Avec **plus de données** (plusieurs années et promos) possible de dégager des tendances[^longnote].
|
|
- Donc facilement automatisable et *peut aider à comprendre les choix des étudiants*.
|
|
|
|
[^1]: Pour les dominantes avec au moins 20 étudiants.
|
|
[^longnote]: Ici l'analyse a été faite uniquement sur la promo diplomée cet avril 2024. |