This commit is contained in:
Louis Lacoste 2024-04-29 16:48:50 +02:00
commit 94b4e8f836
4 changed files with 290 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
data/

4
.lintr Normal file
View file

@ -0,0 +1,4 @@
linters: linters_with_tags(tags = c("readability", "best_practices",
"common_mistakes"),
indentation_linter(indent = 4L)) # see vignette("lintr")
encoding: "UTF-8"

151
APT_PARCOURS.R Normal file
View file

@ -0,0 +1,151 @@
library(dplyr)
# Charger les données avec deux colonnes
df_APT<- read.csv("Downloads/Suppl.csv",
sep= ";",
encoding = "UTF-8",
# header = TRUE,
na.strings = T,
dec=","
)
## Enlever les lignes et colonnes vides
fun_enlever_lignes_vides <- function(df) {
df <-filter(df,!(df$parcelle_id==""))
}
df_APT <- df_APT[!apply(is.na(df_APT) | df_APT == "", 1, all), ]
df_APT <- df_APT[, 1:2]
df_APT <- df_APT[!grepl("\\d", df_APT[,2]), ]
## Enlever les accents
df_APT_sans_accents <- df_APT
df_APT_sans_accents[,1] <- iconv(df_APT[,1], "UTF-8", "ASCII", sub = "")
df_APT_sans_accents[,2] <- iconv(df_APT[,2], "UTF-8", "ASCII", sub = "")
df_APT <- df_APT_sans_accents
## Copier les noms dans la colonne 2 jusqu'à un nouveau nom
df_APT <- df_APT
for (i in 2:nrow(df_APT)) {
if (df_APT[i, 2] == "") {
df_APT[i, 2] <- df_APT[i - 1, 2]
}
}
## Identifier les apprentis et créer 2 df apprentis et initaux car différents
df_APT$apprenti <- NA
df_APT$apprenti[df_APT$X == "Accompagnement des apprentis"] <- "apprenti"
df_APT$apprenti[df_APT$X == "Priodes d'apprentissage en entreprise, semestre 1"] <- "apprenti" # cas des 2A faux apprentis
df_APT <- df_APT %>%
group_by(X.1) %>%
mutate(apprenti = ifelse("apprenti" %in% apprenti, "apprenti", apprenti))
df_APT$apprenti <- ifelse(is.na(df_APT$apprenti), "non-apprenti", df_APT$apprenti)
df_APT_apprenti <- df_APT[df_APT$apprenti == "apprenti", ]
df_APT_initiaux <- df_APT[df_APT$apprenti != "apprenti", ]
# Liste des termes à exclure
termes_a_exclure <- c("Ing - 1A", "Intitul du cours", "Approche professionnelle et sectorielle", "Approches des domaines", "Enjeux et dfis des sciences et technologies du vivant et de l'environnement", "Communication", "La recherche d'informations en sciences du vivant")
# Filtrer les lignes qui ne contiennent pas les termes spécifiés dans la colonne "X"
df_final <- df_APT_initiaux %>%
filter(!X %in% termes_a_exclure)
# Afficher le résultat final
print(df_final)
## Les approches domaines de 1A
index_approches_domaines <- which(df_APT_initiaux[, 1] == "Approches des domaines")
lignes_a_garder <- list()
for (i in index_approches_domaines) {
lignes_a_garder[[i]] <- c((i - 4):(i - 1))
}
df_APT_final <- df_APT_initiaux[-unlist(lignes_a_garder), ]
## Les MODULE INTEGRATIF de 1A
index_approches_domaines <- which(df_APT_final[, 1] == "MODULE INTEGRATIF")
lignes_a_garder <- list()
for (i in index_approches_domaines) {
lignes_a_garder[[i]] <- c((i - 12):(i - 1))
}
df_APT_final <- df_APT_final[-unlist(lignes_a_garder), ]
## DOMINANTE
index_approches_domaines <- which(df_APT_final[, 1] == "Ing - 2A")
lignes_a_garder <- list()
for (i in index_approches_domaines) {
lignes_a_garder[[i]] <- c((i - 44):(i - 1))
}
df_APT_final <- df_APT_final[-unlist(lignes_a_garder), ]
## LES UC à choix 2 A
index_approches_domaines <- which(df_APT_final[, 1] == "UE choix Semestre 1")
lignes_a_garder <- list()
for (i in index_approches_domaines) {
lignes_a_garder[[i]] <- c((i - 34):(i - 1))
}
df_APT_final <- df_APT_final[-unlist(lignes_a_garder), ]
## LA SPE 3 A
index_approches_domaines <- which(df_APT_final[, 1] == "Ing - 3A")
lignes_a_garder <- list()
for (i in index_approches_domaines) {
lignes_a_garder[[i]] <- c((i - 3):(i - 1))
}
test <- df_APT_final[-unlist(lignes_a_garder), ]

134
extract_data.R Normal file
View file

@ -0,0 +1,134 @@
library(readxl)
library(dplyr)
library(tidyr)
# Supplement_diplome-1.xls ligne 4
ligne_prenom <- 5
colonne_prenom <- 50
folder_path <- file.path("data", "Bulletins promotion 2023")
df <- do.call("rbind", lapply(list.files(folder_path), function(filename) {
current_data <- as.data.frame(read_excel(file.path(folder_path, filename), sheet = 1L, col_names = FALSE))
if (ncol(current_data) == 63L) {
return(current_data)
}
}))
indices_numero_ine <- which(df == "Numéro INE", arr.ind = TRUE)
decalage_ine <- c(1, 6)
#  Indices Total ECTS validés
which(df == "Total Ects validés", arr.ind = TRUE)
#  Indices Ing - 1A
indices_cours_Ing_1A <- which(df == "Ing - 1A", arr.ind = TRUE)
indices_cours_Ing_2A <- which(df == "Ing - 2A", arr.ind = TRUE)
indices_cours_Ing_3A <- which(df == "Ing - 3A", arr.ind = TRUE)
indices_stage_fin_etude <- which((df == "Stage de fin d'études") | (df == "Stage de fin d'études de 3ème année"), arr.ind = TRUE)
col_ECTS <- 63
# Décalages
dec_col_cours_ine <- -23
dec_row_cours_ine <- 35
dec_col_annee <- -13
dec_row_parcours_ing1A <- -4
dec_col_parcours_ing1A <- 2
dec_ECTS <- 42
get_row_to_remove_cours <- function(cours) {
vec_cours <- cours
which((is.na(vec_cours) | (vec_cours == "Intitulé du cours") |
(vec_cours == "Ing - 1A") | (vec_cours == "Ing - 2A") |
(vec_cours == "Ing - 3A")))
}
full <- do.call("rbind", lapply(seq_len(nrow(indices_numero_ine)), function(idx) {
# Trouver l'INE
current_row <- indices_numero_ine[idx, 1]
current_col <- indices_numero_ine[idx, 2]
#  Ici si on est au dernier indice on va au bout du tableau et on nettoiera
# après
next_row <- ifelse(idx != nrow(indices_numero_ine),
indices_numero_ine[idx + 1, 1],
nrow(df)
)
# La colonne ne bouge pas
next_col <- current_col
ine <- df[[
current_row + decalage_ine[[1]],
current_col + decalage_ine[[2]]
]]
#  Cours
cours <- df[seq(
current_row + dec_row_cours_ine,
next_row + dec_row_cours_ine - 1
), current_col + dec_col_cours_ine]
ects <- df[seq(
current_row + dec_row_cours_ine,
next_row + dec_row_cours_ine - 1
), col_ECTS]
longdata <- data.frame(ine = ine, cours = cours, ects = ects)
longdata <- longdata[which(!(is.na(longdata[["cours"]]) & is.na(longdata[["ects"]]))), ]
row_remove_intit_cours <- which((longdata[["cours"]] == "Intitulé du cours" &
longdata[["ects"]] == "Ects"))
if (!identical(row_remove_intit_cours, integer(0))) {
longdata <- longdata[-row_remove_intit_cours, ]
}
row_remove_ing <- which((longdata[["cours"]] == "Ing"))
if (!identical(row_remove_ing, integer(0))) {
longdata <- longdata[-row_remove_ing, ]
}
id_cycle_ing <- which(grepl("Ing - [1-3]A", longdata[["cours"]]))
id_cycle_ing <- c(id_cycle_ing, nrow(longdata))
annee_cycle_ing <- grep("20[0-9][0-9]-[0-9][0-9]", df[seq(
current_row + dec_row_cours_ine,
next_row + dec_row_cours_ine - 1
), 8], value = TRUE)
type_annee <- rep("Unknown", nrow(longdata))
annee <- rep("", nrow(longdata))
for (idx in seq_len(length(id_cycle_ing) - 1L)) {
type_annee[seq(id_cycle_ing[idx], id_cycle_ing[idx + 1])] <- longdata[["cours"]][id_cycle_ing[idx]]
annee[seq(id_cycle_ing[idx], id_cycle_ing[idx + 1])] <- annee_cycle_ing[idx]
}
longdata[["annee"]] <- annee
longdata[["type_annee"]] <- type_annee
row_remove_annee_cycle_ing <- which(grepl("Ing - [0-9]{1}A", longdata[["cours"]]))
if (!identical(row_remove_annee_cycle_ing, integer(0))) {
longdata <- longdata[-row_remove_annee_cycle_ing, ]
}
#  Trouver les blocs et les mettre en bloc
# Identifier les indices des lignes où les valeurs ECTS ne sont pas NA
indices_blocs <- which(!is.na(longdata[["ects"]]))
noms_blocs <- longdata[indices_blocs, "cours"]
# Créer une nouvelle colonne "bloc" en remplissant les valeurs manquantes
longdata$bloc <- NA
longdata$bloc[indices_blocs] <- noms_blocs
# Remplir les valeurs manquantes dans la colonne "bloc" en utilisant une boucle
for (i in 2:nrow(longdata)) {
if (is.na(longdata[["bloc"]][i])) {
longdata[["bloc"]][i] <- longdata[["bloc"]][i - 1]
}
}
longdata
}))
df_ue_choix <- full[grepl("UE à choix *", full[["bloc"]]),]