diff --git a/cah-analyse.html b/cah-analyse.html new file mode 100644 index 0000000..5f1a740 --- /dev/null +++ b/cah-analyse.html @@ -0,0 +1,5655 @@ + + + + + + + + + + +Analyse des résultats de CAH + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Analyse des résultats de CAH

+
+ + + +
+ +
+
Author
+
+

Louis Lacoste

+
+
+ + + +
+ + + +
+ + +
+

Description des données

+
+
+
+

CAH pour toutes les dominantes

+

Voici un extrait des données obtenues après tout le traitement :

+
+ +
+
+
+
+ +
+
+Caution +
+
+
+

A cause du format peu pratique pour l’extraction, nous avons un grand nombre de NAs mais malgré tout nous avons pu réaliser une CAH sur les données et obtenir 6 clusters différents.

+

Nous avons nous même fixé ce nombre dans le fichier 03_CAH_clust.R.

+
+
+
+

Les dominantes de 3A sont nombreuses, nous allons donc rassembler celles dont l’effectif est de moins de 10 étudiants dans une catégorie “Autre”.

+
+

Graphiques

+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+
+
+

 CAH par dominante

+

Nous avons ensuité réalisé des CAH par dominante pour analyser les profils d’étudiants. Pour cela il a fallu définir un seuil, celui ci est de 20 étudiants au moins dans la dominante.

+

Voici la liste de fichiers obtenue : 04_Conception et développement de produits_cah_results.csv, 04_Développement agricole_cah_results.csv, 04_Économie et gestion d'entreprise_cah_results.csv, 04_Gestion des milieux naturels_cah_results.csv, 04_Production et innovation dans les systèmes techniques végétaux_cah_results.csv

+

Et ci-dessous des onglets par dominante considérée.

+
+ +
+
+
+

Graphiques

+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+
+
+
+

Graphiques

+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+
+
+
+

Graphiques

+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+
+
+
+

Graphiques

+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+
+
+
+

Graphiques

+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+
+
+
+
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/cah-analyse.qmd b/cah-analyse.qmd index 1fdbe97..973c9f7 100644 --- a/cah-analyse.qmd +++ b/cah-analyse.qmd @@ -12,7 +12,6 @@ format: --- ## Description des données - ```{r} knitr::opts_chunk$set(echo = FALSE) library(ggplot2) @@ -24,6 +23,7 @@ library(patchwork) library(here) library(knitr) +library(kableExtra) library(dplyr) library(tidyr) @@ -31,18 +31,19 @@ library(stringr) library(DT) -data <- read.csv(file.path(here(), "data", "03_cah_results.csv")) -colnames(data)[6:ncol(data) - 1] <- c( +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 <- data %>% - mutate_if(sapply(data, is.character), as.factor) -``` +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")) @@ -62,10 +63,14 @@ for (code_bloc in colnames(data)[6:ncol(data) - 1]) { Voici un extrait des données obtenues après tout le traitement : + ```{r} #| width: 50% -kable(head(data[, -1], 3)) -effectif_cluster <- table(data[["cluster"]]) +#| output: asis +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-caution} @@ -78,10 +83,10 @@ Nous avons nous même fixé ce nombre dans le fichier `03_CAH_clust.R`. ```{r} -nb_3A_min <- 0 +nb_3A_min <- 10 data <- data %>% group_by(dominante3A) %>% - mutate(dominante3A = ifelse(n() < nb_3A_min, "Autre", dominante3A)) + mutate(dominante3A = ifelse(n() < nb_3A_min, as.character("Autre"), as.character(dominante3A))) %>% mutate(dominante3A = as.factor(dominante3A)) ``` Les dominantes de 3A sont nombreuses, nous allons donc rassembler celles dont @@ -115,8 +120,6 @@ plot_prop_cluster <- function(orig_data, eff, ...) { } ``` -:::{.panel-tabset} - ### Graphiques ```{r} @@ -137,9 +140,6 @@ htmltools::tagList(lapply(vec_sequences, function(sequence) { ``` -::: - - #  CAH par dominante ```{r} diff --git a/slides.pdf b/slides.pdf new file mode 100644 index 0000000..b4aac56 Binary files /dev/null and b/slides.pdf differ diff --git a/slides.qmd b/slides.qmd new file mode 100644 index 0000000..6f6a0f3 --- /dev/null +++ b/slides.qmd @@ -0,0 +1,153 @@ +--- +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. \ No newline at end of file diff --git a/slides_files/figure-beamer/domaine_uc1-1.pdf b/slides_files/figure-beamer/domaine_uc1-1.pdf new file mode 100644 index 0000000..f6552fb Binary files /dev/null and b/slides_files/figure-beamer/domaine_uc1-1.pdf differ diff --git a/slides_files/figure-beamer/domaine_uc1-2.pdf b/slides_files/figure-beamer/domaine_uc1-2.pdf new file mode 100644 index 0000000..b5e0c95 Binary files /dev/null and b/slides_files/figure-beamer/domaine_uc1-2.pdf differ diff --git a/slides_files/figure-beamer/parcours_domaine-1.pdf b/slides_files/figure-beamer/parcours_domaine-1.pdf new file mode 100644 index 0000000..accae3f Binary files /dev/null and b/slides_files/figure-beamer/parcours_domaine-1.pdf differ diff --git a/slides_files/figure-beamer/parcours_domaine-2.pdf b/slides_files/figure-beamer/parcours_domaine-2.pdf new file mode 100644 index 0000000..c842f42 Binary files /dev/null and b/slides_files/figure-beamer/parcours_domaine-2.pdf differ diff --git a/slides_files/figure-beamer/parcours_domaine_uc1-1.pdf b/slides_files/figure-beamer/parcours_domaine_uc1-1.pdf new file mode 100644 index 0000000..2241cc3 Binary files /dev/null and b/slides_files/figure-beamer/parcours_domaine_uc1-1.pdf differ diff --git a/slides_files/figure-beamer/parcours_domaine_uc1-2.pdf b/slides_files/figure-beamer/parcours_domaine_uc1-2.pdf new file mode 100644 index 0000000..1cb0c91 Binary files /dev/null and b/slides_files/figure-beamer/parcours_domaine_uc1-2.pdf differ diff --git a/slides_files/figure-beamer/parcours_uc1-1.pdf b/slides_files/figure-beamer/parcours_uc1-1.pdf new file mode 100644 index 0000000..917528a Binary files /dev/null and b/slides_files/figure-beamer/parcours_uc1-1.pdf differ diff --git a/slides_files/figure-beamer/parcours_uc1-2.pdf b/slides_files/figure-beamer/parcours_uc1-2.pdf new file mode 100644 index 0000000..a446a55 Binary files /dev/null and b/slides_files/figure-beamer/parcours_uc1-2.pdf differ diff --git a/tmp-pdfcrop-72848.tex b/tmp-pdfcrop-72848.tex new file mode 100644 index 0000000..bf621a7 --- /dev/null +++ b/tmp-pdfcrop-72848.tex @@ -0,0 +1,134 @@ +\catcode37 14 % percent +\catcode33 12 % exclam +\catcode34 12 % quote +\catcode35 6 % hash +\catcode39 12 % apostrophe +\catcode40 12 % left parenthesis +\catcode41 12 % right parenthesis +\catcode45 12 % minus +\catcode46 12 % period +\catcode60 12 % less +\catcode61 12 % equals +\catcode62 12 % greater +\catcode64 12 % at +\catcode91 12 % left square +\catcode93 12 % right square +\catcode96 12 % back tick +\catcode123 1 % left curly brace +\catcode125 2 % right curly brace +\catcode126 12 % tilde +\catcode`\#=6 % +\escapechar=92 % +\def\IfUndefined#1#2#3{% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname#1\endcsname\relax + #2% + \else + #3% + \fi +} +\def\pdffilehex{736C696465735F66696C65732F6669677572652D6265616D65722F646F6D61696E655F7563312D312E706466} +\IfUndefined{pdfunescapehex}{% + \begingroup + \gdef\pdffile{}% + \def\do#1#2{% + \ifx\relax#2\relax + \ifx\relax#1\relax + \else + \errmessage{Invalid hex string, should not happen!}% + \fi + \else + \lccode`0="#1#2\relax + \lowercase{% + \xdef\pdffile{\pdffile0}% + }% + \expandafter\do + \fi + }% + \expandafter\do\pdffilehex\relax\relax + \endgroup +}{% + \edef\pdffile{\pdfunescapehex{\pdffilehex}}% +} +\immediate\write-1{Input file: \pdffile} +\pdfcompresslevel=9 \pdfoutput=1 % +\csname pdfmapfile\endcsname{} +\def\setpdfversion#1#2{% + \IfUndefined{pdfobjcompresslevel}{% + }{% + \ifnum#1=1 % + \ifnum#2<5 + \pdfobjcompresslevel=0 % + \else + \pdfobjcompresslevel=2 % + \fi + \fi + }% + \IfUndefined{pdfminorversion}{% + \IfUndefined{pdfoptionpdfminorversion}{% + }{% + \pdfoptionpdfminorversion=#2\relax + }% + }{% + \pdfminorversion=#2\relax + \IfUndefined{pdfmajorversion}{% + \ifnum#2=0 \pdfminorversion=5\fi} + {\pdfmajorversion=#1\relax}% + }% +} +\def\page #1 [#2 #3 #4 #5]{% + \count0=#1\relax + \setbox0=\hbox{% + \pdfximage page #1 mediabox{\pdffile}% + \pdfrefximage\pdflastximage + }% + \pdfhorigin=-#2bp\relax + \pdfvorigin=#3bp\relax + \pdfpagewidth=#4bp\relax + \advance\pdfpagewidth by -#2bp\relax + \pdfpageheight=#5bp\relax + \advance\pdfpageheight by -#3bp\relax + \ht0=\pdfpageheight + \shipout\box0\relax +} +\def\pageclip #1 [#2 #3 #4 #5][#6 #7 #8 #9]{% + \count0=#1\relax + \dimen0=#4bp\relax \advance\dimen0 by -#2bp\relax + \edef\imagewidth{\the\dimen0}% + \dimen0=#5bp\relax \advance\dimen0 by -#3bp\relax + \edef\imageheight{\the\dimen0}% + \pdfximage page #1 mediabox{\pdffile}% + \setbox0=\hbox{% + \kern -#2bp\relax + \lower #3bp\hbox{\pdfrefximage\pdflastximage}% + }% + \wd0=\imagewidth\relax + \ht0=\imageheight\relax + \dp0=0pt\relax + \pdfhorigin=#6pt\relax + \pdfvorigin=#7bp\relax + \pdfpagewidth=\imagewidth + \advance\pdfpagewidth by #6bp\relax + \advance\pdfpagewidth by #8bp\relax + \pdfpageheight=\imageheight\relax + \advance\pdfpageheight by #7bp\relax + \advance\pdfpageheight by #9bp\relax + \pdfxform0\relax + \shipout\hbox{\pdfrefxform\pdflastxform}% +}% +\def\pageinclude#1{% + \pdfhorigin=0pt\relax + \pdfvorigin=0pt\relax + \pdfximage page #1 mediabox{\pdffile}% + \setbox0=\hbox{\pdfrefximage\pdflastximage}% + \pdfpagewidth=\wd0\relax + \pdfpageheight=\ht0\relax + \advance\pdfpageheight by \dp0\relax + \shipout\hbox{% + \raise\dp0\box0\relax + }% +} +\setpdfversion{1}{4} +\page 1 [43 9 684 715] +\csname @@end\endcsname +\end