knitr::opts_chunk$set(echo = FALSE) #knitr::opts_chunk$set(render = "cairo_pdf") library(tidyverse) #library(kpiESR) library(ggcpesrthemes) theme_set(theme_cpesr()) rentrée.ref = 2020 source("R/fr-esr-principaux-etablissements-enseignement-superieur.R")
etabs.all <- bind_rows( kpiesr_read.etab() %>% mutate(dataset = "etab.24"), kpiesr_read.etab.2022("dataESR/fr-esr-principaux-etablissements-enseignement-superieur.2023.csv") %>% mutate(dataset = "etab.23"), kpiesr_read.etab.2022("dataESR/fr-esr-principaux-etablissements-enseignement-superieur.2022.csv") %>% mutate(dataset = "etab.22"), kpiesr_read.etab.2022("dataESR/fr-esr-principaux-etablissements-enseignement-superieur.2021.csv") %>% mutate(dataset = "etab.21.2"), kpiesr_read.etab.2021v1() %>% mutate(dataset = "etab.21.1"), kpiesr_read.etab.2020v1()%>% mutate(dataset = "etab.20"), kpiesr_read.etab.2019v1() %>% mutate(dataset = "etab.19") ) etabs <- etabs.all %>% group_by(UAI) %>% slice_head(n=1)
etabs.all %>% select(siren,siret,Etablissement, Secteur,dataset) %>% group_by(siren,siret) %>% slice_head(n=1) %>% arrange(desc(dataset)) %>% write.csv2("dataESR/fr-cpesr-siren.csv", row.names = FALSE, quote = TRUE)
etabs %>% group_by(dataset) %>% summarise(nb_etabs = n()) %>% kableExtra::kable()
etabs <- etabs %>% mutate(Typologie = ifelse(Etablissement == "Université de Lorraine","Université pluridisciplinaire avec santé",Typologie))
enstit <- read.csv2("dataESR/fr-esr-enseignants-titulaires-esr-public.csv") %>% transmute( pid = etablissement_id_paysage_actuel, UAI = etablissement_id_uai, etab = Etablissement.actuel, ) %>% unique() ensnp <- read.csv2("dataESR/fr-esr-enseignants-nonpermanents-esr-public.csv") %>% transmute( pid = etablissement_id_paysage_actuel, UAI = etablissement_id_uai, etab = Établissement.actuel, ) %>% unique() bia <- read.csv2("dataESR/fr-esr-personnels-biatss-etablissements-publics.csv") %>% transmute( pid = etablissement_id_paysage_actuel, UAI = etablissement_id_uai, etab = etablissement_actuel_lib, ) %>% unique() etu <- read.csv2("dataESR/fr-esr-statistiques-sur-les-effectifs-d-etudiants-inscrits-par-etablissement-hcp.csv") %>% filter(Attention != "* Attention : doubles comptes, établissement-composante") %>% transmute( pid = etablissement_id_paysage_actuel, UAI = Identifiant.s..UAI, etab = Établissement, ) %>% unique() fin <- read.csv2("dataESR/fr-esr-operateurs-indicateurs-financiers.csv") %>% transmute( pid = id...paysage, UAI = uai...identifiant, etab = Etablissement, ) %>% unique() imo <- read.csv2("dataESR/fr-esr-patrimoine-immobilier-des-operateurs-de-l-enseignement-superieur.csv") %>% transmute( pid = Paysage_id, etab = Etablissement, ) %>% unique() etab.data <- enstit %>% rename(enstit = etab) %>% full_join(ensnp %>% rename(ensnp = etab)) %>% full_join(bia %>% rename(bia = etab)) %>% full_join(etu %>% rename(etu = etab)) %>% full_join(fin %>% rename(fin = etab)) %>% full_join(imo %>% rename(imo = etab)) etab.data.long <- bind_rows( enstit %>% mutate(dataset = "enstit"), ensnp %>% mutate(dataset = "ensnp"), bia %>% mutate(dataset = "bia"), etu %>% mutate(dataset = "etu"), fin %>% mutate(dataset = "fin"), imo %>% mutate(dataset = "imo") ) %>% separate_rows(UAI,sep='[;,]') %>% group_by(pid,dataset) etab.data.milong <- etab.data.long %>% summarise( UAI = paste0(unique(UAI), collapse = ';'), etab = paste0(unique(etab), collapse = ';'))
etab.data %>% filter(is.na(pid)|pid=="") %>% spoiler_table()
etab.data %>% filter(str_detect(pid,"[;,]")) %>% spoiler_table()
etab.data %>% filter(str_detect(UAI,";")) %>% spoiler_table()
etab.data.long %>% select(-etab) %>% unique() %>% group_by(dataset, UAI) %>% filter(n_distinct(pid) > 1) %>% arrange(UAI) %>% left_join(etab.data %>% group_by(pid) %>% summarise(across(enstit:fin, ~ paste0(unique(.x),collapse=';'))), by="pid") %>% spoiler_table()
autofix.fin <- etab.data %>% filter(is.na(fin)) %>% select(UAI,pid) %>% separate_rows(UAI) %>% unique() %>% left_join(fin %>% rename(pid.fin=pid), by="UAI") %>% filter(!is.na(pid.fin), pid.fin != pid) autofix.fin %>% spoiler_table()
autofix.fin %>% group_by(pid.fin) %>% filter(n_distinct(pid) > 1) %>% spoiler_table("Check")
fix.fin <- autofix.fin %>% rename(pid.dst=pid, pid.src=pid.fin) %>% filter(pid.src != "") %>% filter(!str_detect(pid.dst,";")) %>% add_row(UAI = "Manuel", pid.dst = "z3hdL", pid.src = "z3hdL;hy4EW") %>% add_row(UAI = "Manuel", pid.dst = "z3hdL", pid.src = "XDl91") %>% add_row(UAI = "Manuel", pid.dst = "Z2FY5", pid.src = "Z2FY5;zepT6") %>% add_row(UAI = "Manuel", pid.dst = "HAU8L", pid.src = "a5ZAn") fix.fin %>% spoiler_table()
autofix.imo.full <- imo %>% filter(str_detect(pid,",")) %>% mutate(pid.imo = pid) %>% rename("etab.imo" = "etab") %>% separate_rows(pid, sep=",") %>% group_by(pid, pid.imo) %>% slice_head(n=1) %>% ungroup() %>% left_join( bind_rows(enstit, ensnp, etu, bia) %>% filter(!str_detect(pid,";")) %>% group_by(pid) %>% slice_head(n=1) ) autofix.imo <- autofix.imo.full %>% filter(!is.na(etab)) %>% transmute( pid.src = pid.imo, pid.dst = pid, etab = etab ) %>% na.omit() %>% unique() %>% group_by(pid.src) %>% filter(n_distinct(pid.dst) == 1)
autofix.imo.check <- autofix.imo.full %>% group_by(pid.imo) %>% mutate(n_match = n_distinct(pid)) %>% ungroup() %>% arrange(n_match, pid.imo) %>% filter(! pid.imo %in% autofix.imo$pid.src) autofix.imo.check %>% spoiler_table("Check sans correspondance")
Les bâtiments entre plusieurs établissements sont exclus du jeu de données.
read.csv2("dataESR/fr-esr-patrimoine-immobilier-des-operateurs-de-l-enseignement-superieur.csv") %>% group_by(Année) %>% summarise( n_batiments = n(), n_exclus = sum(Paysage_id %in% autofix.imo.check$pid.imo) ) %>% mutate(part = scales::percent(n_exclus / n_batiments, accuracy = 0.01)) %>% spoiler_table("Nombre d'exclusion")
fix <- bind_rows(fix.fin, autofix.imo) pidfix <- fix$pid.dst names(pidfix) <- fix$pid.src etab.data.long.fixed <- etab.data.long %>% mutate(pid = recode(pid, !!!pidfix))
incomplete.univ <- etab.data.long.fixed %>% group_by(pid) %>% filter(n_distinct(dataset) != 6) %>% filter(str_detect(etab,"niversité")) %>% arrange(pid, etab) %>% select(pid, dataset, etab, UAI) %>% unique() %>% group_by(pid) %>% summarise( etab = paste(etab, collapse = ";"), datasets = paste(dataset, collapse = " ")) %>% filter(!pid %in% autofix.imo.check$pid.imo) incomplete.univ %>% kableExtra::kable()
etab.cpesr <- read.csv("dataESR/fr-cpesr-etablissements.csv")
etab.cpesr %>% summarise(nb_etabs = n()) %>% kableExtra::kable()
etab.cpesr %>% group_by(UAI) %>% filter(n() > 1) %>% kableExtra::kable()
cpesr <- etab.cpesr %>% left_join(etab.data.long.fixed %>% ungroup() %>% select(UAI,pid) %>% unique() ) %>% select(pid, everything())
cpesr %>% filter(!is.na(pid)) %>% group_by(pid) %>% filter(n()>1) %>% spoiler_table()
cpesr %>% filter(Groupe == "Universités et assimilés", is.na(pid)) %>% spoiler_table()
pid.horscpesr <- etab.data.long.fixed %>% group_by(pid) %>% select(-dataset) %>% slice_head(n=1) %>% filter(!pid %in% cpesr$pid) pid.horscpesr %>% left_join(etabs) %>% write.csv2("dataESR/fr-cpesrtmp-etablissements-hors-cpesr.csv") pid.horscpesr %>% spoiler_table()
pid.horscpesr %>% left_join(etabs) %>% filter(!is.na(Etablissement)) %>% spoiler_table()
pid.horscpesr %>% left_join(etabs) %>% filter(is.na(Etablissement)) %>% spoiler_table()
etab <- left_join(cpesr, etabs %>% select(-Etablissement,-Type)) %>% filter(!is.na(pid)) %>% rename(Groupe.détaillé = Groupe) %>% mutate(Groupe = recode(Groupe.détaillé, "Universités et assimilés" = "Universités et assimilés", "Ecoles d'ingénieurs" = "Ecoles d'ingénieurs", "Ecoles de commerce" = "Autres établissements", "Instituts ou écoles nationaux spécialisés et grands établissements (hors écoles d'ingénieurs)" = "Autres établissements", "Ecoles d'art et de design" = "Autres établissements", "Ecoles d'architecture" = "Autres établissements", "Autres écoles écoles spécialisées" = "Autres établissements", "Instituts catholiques" = "Autres établissements", "Ecoles des arts du spectacle" = "Autres établissements", "Instituts d'études politiques" = "Autres établissements", "Ecoles françaises à l'étranger" = "Autres établissements", "Ecoles normales supérieures" = "Autres établissements", "Ecoles vétérinaires" = "Autres établissements", "Autres" = "Autres établissements", "Regroupements" = "Regroupements" ) ) %>% mutate(Groupe = factor(Groupe, levels = c( "Universités et assimilés","Regroupements","Ecoles d'ingénieurs","Autres établissements"))) %>% left_join( etab.data.long %>% group_by(pid) %>% summarise(nb_datasets = n_distinct(dataset)) ) %>% select(pid,Etablissement,Groupe,Groupe.détaillé,Type,nb_datasets,everything()) %>% ungroup() %>% arrange(Groupe,Groupe.détaillé,Etablissement) etab %>% arrange(nb_datasets) %>% group_by(Groupe,nb_datasets) %>% summarise(nb = n()) %>% pivot_wider(names_from = nb_datasets, values_from = nb, names_prefix = "nb_ds_", values_fill = 0) %>% spoiler_table() etab <- etab %>% mutate( Plotable = ( nb_datasets > 3 ) | ( Groupe == "Regroupements" & Etablissement != "Université Bretagne Loire" ) )
etab %>% group_by(Etablissement) %>% filter(n() > 1) %>% spoiler_table() etab %>% group_by(UAI) %>% filter(n() > 1) %>% spoiler_table()
etab %>% filter(is.na(url.wikidata)) %>% arrange(desc(Groupe)) %>% select(Groupe, pid, Etablissement, url.wikidata) %>% spoiler_table()
fix_etab <- function(etab, fixdf) { fixdf <- fixdf %>% arrange(pid) etab <- etab %>% arrange(pid) etab %>% mutate(across(names(fixdf %>% select(-pid)), ~ replace(.x, pid %in% fixdf$pid, fixdf[[cur_column()]]))) }
fix.wikidata <- tribble( ~ "pid", ~ "url.wikidata", #"qUCQp", "https://www.wikidata.org/entity/Q259388", #"EW53M", "https://www.wikidata.org/entity/Q1548539", #"evv7S", "https://www.wikidata.org/entity/Q776223", #"K4lR3", "https://www.wikidata.org/entity/Q1319786", #"U8a0v", "https://www.wikidata.org/entity/Q3551621", #"6kk6n", "https://www.wikidata.org/entity/Q273604", "VfvdY", "https://www.wikidata.org/entity/Q630461", "J8X6q", "https://www.wikidata.org/entity/Q2826570" ) etab <- fix_etab(etab, fix.wikidata) fix.wikidata %>% spoiler_table()
wikidataESR::wdesr_get_cache() #wikidataESR::wdesr_clear_cache() fix.alias.wikidata <- etab %>% #filter(UAI %in% esr.uais$dans.tdb) %>% filter(is.na(Sigle), !is.na(url.wikidata)) %>% arrange(Groupe) %>% mutate(wikidata.alias = wikidataESR::wdesr_get_data(str_replace(url.wikidata,"https://www.wikidata.org/entity/",""))$alias) %>% select(pid,Etablissement,Sigle=wikidata.alias) wikidataESR::wdesr_save_cache()
etab <- fix_etab(etab, fix.alias.wikidata) fix.alias.wikidata %>% spoiler_table()
etab %>% #filter(UAI %in% esr.uais$dans.tdb) %>% filter(is.na(Sigle)) %>% arrange(Type) %>% select(UAI,pid, Etablissement,Sigle, url.wikidata) %>% spoiler_table()
etab <- etab %>% mutate(Sigle = ifelse(is.na(Sigle),Etablissement,Sigle))
etab <- etab %>% mutate(Sigle = str_replace(Sigle, "Université", "U."))
etab <- etab %>% ungroup() %>% arrange(Groupe,Groupe.détaillé,Etablissement) etab %>% spoiler_table()
write.csv2(etab, "dataESR/fr-cpesrtmp-etablissements.csv", row.names = FALSE) write.csv2(fix,"dataESR/fr-cpesrtmp-pidfix.csv", row.names = FALSE)
check_dispo <- function(file, vars) { read.csv2(file, na.strings = "") %>% select(vars) %>% rename(Année = 1) %>% mutate(Année = as.character(Année)) %>% pivot_longer(-Année) %>% group_by(Année,name) %>% summarise( nb_na = sum(is.na(value)), dispo = round(sum(!is.na(value)) / n(), digits = 2) ) %>% arrange(name,Année) %>% ggplot(aes(x=Année,y=name,color=dispo)) + geom_point(size=10) + geom_text(aes(label=scales::percent(dispo)),color="black", size=3) + scale_color_distiller(palette="RdBu", direction = 0) + theme(legend.position = "None") }
check_dispo("dataESR/fr-esr-operateurs-indicateurs-financiers.csv",c( "exercice", "Produits.de.fonctionnement.encaissables", "Charges.de.personnel", "Ressources.propres.encaissables", "Droits.d.inscription", "Formation.continue..diplômes.propres.et.VAE", "Taxe.d.apprentissage", "Valorisation", "ANR.hors.investissements.d.avenir", "ANR.investissements.d.avenir", "Contrats.et.prestations.de.recherche.hors.ANR", "Acquisitions.d.immobilisations"))
check_dispo("dataESR/fr-esr-operateurs-indicateurs-financiers.2021v1.csv",c( "exercice", "Produits.de.fonctionnement.encaissables", "Dépenses.de.personnel", "Ressources.propres.encaissables", "Droits.d.inscription", "Formation.continue..diplômes.propres.et.VAE", "Taxe.d.apprentissage", "Valorisation", "ANR.hors.investissements.d.avenir", "ANR.investissements.d.avenir", "Contrats.et.prestations.de.recherche.hors.ANR", "Acquisitions.d.immobilisations"))
read.csv2("dataESR/fr-esr-personnels-biatss-etablissements-publics.csv") %>% select(Année,etablissement_id_paysage_actuel,Etablissement,Catégorie, Corps, Effectif,effectif_femmes,effectif_hommes) %>% filter(Effectif != effectif_femmes + effectif_hommes) %>% kableExtra::kable()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.