library(dplyr) library(tidyr) library(stringr) # library(data.table) library(here) full <- read.csv(file.path( here(), "data", "01_aggregated_dataframe_suppdiplome.csv" )) # full[["ine"]] <- as.factor(full[["ine"]]) # full[["cours"]] <- as.factor(full[["cours"]]) # full[["ects"]] <- as.numeric(full[["ects"]]) # full[["annee"]] <- as.factor(full[["annee"]]) # full[["type_annee"]] <- as.factor(full[["type_annee"]]) # full[["bloc"]] <- as.factor(full[["bloc"]]) # full[["parcours"]] <- as.factor(full[["parcours"]]) full[["domaine2A"]] <- as.factor(full[["domaine2A"]]) # full[["dominante3A"]] <- as.factor(full[["dominante3A"]]) working_copy <- full #  Correction des typos ##  Parcours ###  Suppression des NAs ine_missing_parcours <- unique(working_copy[is.na(working_copy[["parcours"]]), "ine"]) message( "Il y a ", length(ine_missing_parcours), " étudiants qui n'ont pas de parcours renseignés et qui seront retirés." ) missing_parcours <- which(working_copy[["ine"]] %in% unique(working_copy[is.na(working_copy[["parcours"]]), "ine"])) working_copy <- working_copy[-missing_parcours, ] message( "Après suppressions il reste ", nrow(working_copy[is.na(working_copy[["parcours"]]), ]), " étudiants qui n'ont pas de parcours renseignés" ) ###  Renommage des parcours working_copy[grep( "Bio[-]?ingénierie moléculaire et cellulaire pour la santé", working_copy[["parcours"]] ), "parcours"] <- "Bioingénierie moléculaire et cellulaire pour la santé" working_copy[grep( "([[:alpha:]])*Construction libre dans l'offre proposée par AgroParisTech", working_copy[["parcours"]] ), "parcours"] <- "Construction libre dans l'offre proposée par AgroParisTech" working_copy[grep( "Bioraffineries - chimie verte", working_copy[["parcours"]], fixed = TRUE ), "parcours"] <- "Bioraffinerie, chimie verte" working_copy[grep( "ingénierie des aliments", working_copy[["parcours"]], fixed = TRUE ), "parcours"] <- "Ingénierie des aliments" working_copy[grep( "Gestion des milieux naturels*", working_copy[["parcours"]] ), "parcours"] <- "Gestion des milieux naturels ouverts et boisés" working_copy[grep( "*Santé, aliments et bioproduits", working_copy[["parcours"]] ), "parcours"] <- "Santé, aliments et bioproduits" working_copy[["parcours"]] <- as.factor(working_copy[["parcours"]]) ## Domaine if (length(unique(working_copy[["domaine2A"]])) == 6L) { message("Les domaines sont déjà propres.") } else { stop("Il faut nettoyer les domaines !") } ##  Dominante ###  Suppression des NAs ine_missing_dominante <- unique(working_copy[is.na(working_copy[["dominante3A"]]), "ine"]) message( "Il y a ", length(ine_missing_dominante), " étudiants qui n'ont pas de parcours renseignés et qui seront retirés." ) missing_dominante <- which(working_copy[["ine"]] %in% unique(working_copy[is.na(working_copy[["dominante3A"]]), "ine"])) working_copy <- working_copy[-missing_dominante, ] message( "Après suppressions il reste ", nrow(working_copy[is.na(working_copy[["dominante3A"]]), ]), " étudiants qui n'ont pas de dominantes renseignées" ) # grep(pattern = "M[1-2]{1}|Master", x = unique(working_copy[["dominante3A"]]), # value = TRUE, invert = TRUE) ## Correction mauvais noms de cours working_copy[grep( "Initiation au métier de la recherche", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Initiation aux métiers de la recherche" working_copy[grep( "Modélisation en biologie des populations: de la structure des génomes à l'extinction des populations", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Modélisation en biologie des populations : de la structure des génomes à l'extinction des populations" working_copy[grep( "Aspects Cellulaires et Moléculaires du Vieillissement", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Aspects cellulaires et moléculaires du vieillissement" working_copy[grep( "Bioénergies et lignocelluloses", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Bio-energy and ligno-celluloses (in English)" working_copy[grep( "Economie écologique", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Économie écologique" working_copy[grep( "Fermentation-distillation: des boissons aux biocarburants", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Fermentation-distillation : des boissons aux biocarburants" working_copy[grep( "Gènes et nature: les biotechnologies végétales pour une agriculture durable", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Gènes et nature: les biotechnologies végétales au centre de questions de société" working_copy[grep( "Marketing des Produits de Grande Consommation", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Marketing des Produits alimentaires et Responsabilité Sociale des Marques" working_copy[grep( "Evaluation des modèles d'affaires et transition vers l'économie circulaire", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Evaluation des Modèles d'affaires et transition vers l'économie circulaire" working_copy[grep( "Initiation à l'entrepreunariat dans le vivant|Initiation à l'entrepreneuriat dans le vivant", working_copy[["cours"]] ), "cours"] <- "Initiation à l'entreprenariat dans le vivant" working_copy[grep( "Biodiversité et Evolution", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Biodiversité et évolution" working_copy[grep( "Programmer en C, application à des données de télédétection", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Programmer en C" working_copy[grep( "Management stratégique, concurrence & marchés", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Management stratégique, concurrence et marchés" working_copy[grep( "Produits alimentaires et cosmétiques: structure et caractérisation physique", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Produits alimentaires et cosmétiques : structure et caractérisation physique" working_copy[grep( "Introduction à l'hématologie et à l'immunologie", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Introduction à l'immunologie sur le thème de la vaccination" working_copy[grep( "Les bois : qualités, exploitation -- Interactions ongulés sauvages et forêt", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Les bois : qualités, exploitation --Interactions ongulés sauvages et forêt" working_copy[grep( "Usages et propriétés du bois -- Milieux humides", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Usages et propriétés du bois --Milieux humides" working_copy[grep( "Sociologie des systèmes agroalimentaires alternatifs", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Sociologie des systèmes agroalimentaires alternatifs et innovations" working_copy[grep( "Milieux humides : connaissance écologique fonctionnelle et floristique", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Milieux humides : définitions, règlementation et gestion" working_copy[grep( "Management & Ressources Humaines", working_copy[["cours"]], fixed = TRUE ), "cours"] <- "Les relations de travail : Cadre légal et gestion des ressources humaines" #  Importation détails séquences data_sequence <- read.csv(file.path( here(), "data", "details-sequence-nettoyes.csv" )) joined_data <- full_join(working_copy, data_sequence, by = "cours") non_matches <- unique(joined_data[is.na(joined_data[["code_cours"]]) & grepl("(MODULE INTEGRATIF|UE à choix*)", joined_data[["bloc"]]), ][c("cours", "bloc")]) write.csv(non_matches, file = file.path(here(), "data", "non-matche.csv") ) filtrage <- function(x) { if (length(x) == 0L) { return("Unknown") } if (length(x) >= 1L) { return(x[[1L]]) } } out_data <- joined_data[!is.na(joined_data[["code_cours"]]), ] %>% select(c(ine, parcours, domaine2A, dominante3A, code_cours, code_bloc)) %>% pivot_wider(names_from = code_bloc, values_from = code_cours, values_fn = filtrage) %>% filter(!is.na(ine)) out_data <- out_data %>% relocate(any_of(c( "ine", "dominante3A", "parcours", "domaine2A", "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" ))) write.csv(out_data, file.path(here(), "data", "02_preprocessed_data.csv"), row.names = FALSE )