R/tdbesr.R

Defines functions kpiesr_pivot_norm_label set_encoding_utf8

set_encoding_utf8 <- function(df) {
  Encoding(names(df)) <- "UTF-8"
  for (col in colnames(df)){
    if(typeof(df[[col]]) == "character") {
      Encoding(df[[col]]) <- "UTF-8"
    }
  }
  return(df)
}


# select_kpis <- function(pattern){
#   grep(pattern, levels(esr.pnl$kpi),value=TRUE)
# }

kpiesr_pivot_norm_label <- function(esr, rentrée.ref=2012) {

  df <- esr %>%
    mutate(across(starts_with("kpi.FIN.S"), list(norm = ~ ./kpi.FIN.P.ressources))) %>%
    mutate(across(starts_with("kpi.BIA.S"), list(norm = ~ ./kpi.BIA.P.effectif))) %>%
    mutate(across(starts_with("kpi.ENS.S"), list(norm = ~ ./kpi.ENS.P.effectif))) %>%
    mutate(across(starts_with("kpi.ETU.S"), list(norm = ~ ./kpi.ETU.P.effectif))) %>%
    mutate(across(starts_with("kpi.IMO.S"), list(norm = ~ ./kpi.IMO.P.batiments))) %>%

    mutate(across(matches("kpi.....P"), list(norm = ~ .))) %>%
    mutate(across(starts_with("kpi.K"), list(norm = ~ .))) %>%
    rename_with(~ paste0(.,"_valeur"), matches("^kpi.*$") & !matches("^.*norm$")) %>%
    pivot_longer(
      cols = starts_with("kpi"),
      names_to = c("kpi", ".value"),
      names_pattern = "(.*)_(valeur|norm)"
    ) %>% 
    #filter(!is.na(valeur)) %>%
    mutate(norm = replace(norm,is.nan(norm),NA)) %>%
    mutate(kpi = as.factor(kpi)) %>%
    group_by(kpi) %>%
    mutate(
      valeur_label = valeur_labels(kpi,valeur),
      norm_label = norm_labels(kpi,norm)
    ) %>%
    group_by(Groupe, Rentrée, kpi) %>%
    mutate(
      rang = dense_rank(desc(norm))
      ) %>%
    ungroup()
  
  # merge(df, df %>% filter(Rentrée==rentrée.ref) %>% transmute(UAI=UAI, kpi=kpi, norm.ref = norm)) %>%
  #   group_by(UAI, kpi) %>%
  #   mutate( evolution = norm / norm.ref - 1) %>% 
  #   select(-norm.ref)
  
  def.evol <- df %>% 
    filter(Rentrée >= rentrée.ref) %>%
    filter(!is.na(valeur)) %>%
    group_by(Groupe,pid,kpi) %>%
    arrange(Groupe,pid,kpi,Rentrée) %>%
    mutate( evolution = valeur / first(valeur) * 100 ) %>%
    mutate( evolution = replace(evolution,!is.finite(evolution),NA)) %>%
    ungroup()
  
  left_join(df, def.evol)
  
}

#test <- kpiesr_pivot_norm_label(esr)


kpiesr_get_stats <- function(esr.pnl, rentrée.ref = 2013) {
  
  p <- c(0,0.25,0.5,0.75,1)
  p_names <- purrr::map_chr(p, ~paste0(.x*100))
  p_funs <-  purrr::map(p, ~purrr::partial(quantile, probs = .x, na.rm = TRUE)) %>% 
    purrr::set_names(nm = p_names)
  
  df <- esr.pnl %>%
    filter(Groupe != "Ensemble", Groupe != "Groupe") %>%
    filter(Rentrée >= rentrée.ref) %>%
    group_by(Groupe, kpi) %>%
    mutate(rentrée.min = min(Rentrée)) %>%
    group_by(pid, kpi) %>% 
    filter(min(Rentrée) == rentrée.min)
    
  df %>%
    group_by(Groupe,kpi,Rentrée) %>%
    summarise(Nombre = n()) %>%
    kableExtra::kable(., format="simple") %>%
    paste0(collapse = '\n') %>%
    message()

  bind_rows(
    group_by(df, Rentrée,Groupe,kpi) %>%
    summarise(
      across(c(norm, evolution), p_funs),
      Nombre = n()),
    group_by(df, Rentrée,kpi) %>%
    summarise(
      across(c(norm, evolution), p_funs),
      Nombre = n()) %>%
    mutate(Groupe = "Ensemble")
    ) %>%
    ungroup() %>%
    arrange(Groupe,kpi,Rentrée) %>%
    select(Groupe,kpi,Rentrée, starts_with("norm"), starts_with("evolution"))
  
}

#esr.stats <- kpiesr_get_stats(kpiESR::esr.pnl)



kpiesr_add_kpis <- function (df) {
  mutate(df,
    kpi.K.dotPres = kpi.FIN.S.SCSP / kpi.FIN.P.ressources ,
    kpi.K.resPetu = kpi.FIN.P.ressources / (kpi.ETU.S.cycle1_L+kpi.ETU.S.cycle2_M),
    #kpi.K.resPetu = (kpi.FIN.S.SCSP + kpi.FIN.S.recettesFormation) / (kpi.ETU.S.cycle1_L + kpi.ETU.S.cycle2_M),
    kpi.K.forPetu = kpi.FIN.S.recettesFormation / kpi.ETU.P.effectif,
    kpi.K.recPect = kpi.FIN.S.recettesRecherche / kpi.ENS.S.EC,
    kpi.K.ensPetu = (kpi.ENS.S.titulaires) / (kpi.ETU.S.cycle1_L+kpi.ETU.S.cycle2_M) * 100,
    #kpi.K.titPens = kpi.ENS.S.titulaires / kpi.ENS.P.effectif,
    kpi.K.titPper = (kpi.ENS.S.titulaires + kpi.BIA.S.titulaires) / (kpi.ENS.P.effectif + kpi.BIA.P.effectif),
    kpi.K.biaPper = kpi.BIA.P.effectif / (kpi.BIA.P.effectif + kpi.ENS.P.effectif),
    kpi.K.dotPetu = kpi.FIN.S.SCSP / (kpi.ETU.S.cycle1_L+kpi.ETU.S.cycle2_M)

    #kpi.K.selPfor = kpi.ADM.S.sélective / kpi.ADM.P.formations,
    #kpi.K.2.resPens = kpi.FIN.P.ressources / kpi.ENS.P.effectif,
    #kpi.K.4.docPec  = kpi.ETU.S.cycle.3.D / kpi.ENS.S.2.ECtitulaires,
  ) %>%
    mutate(across(starts_with("kpi"), ~ replace(.x,!is.finite(.x),NA)))
}
# 
# kpiesr_get_uaisnamedlist <- function(esr) {
#   esr.uais <- list()
#   for(type in levels(esr$Type)) {
#     df <- subset(esr, Type == type, c(UAI,Libellé)) %>% unique
#     esr.uais[[type]] <- as.list(setNames(as.character(df$UAI),as.character(df$Libellé)))
#     Encoding(names(esr.uais[[type]])) <- "UTF-8"
#   }
#   Encoding(names(esr.uais)) <- "UTF-8"
#   return(esr.uais)
# }


kpiesr_add_ensembles <- function(esr, rentrée.ref=2013) {

  est <- esr %>%
    mutate(Rentrée = as.integer(Rentrée)) %>%
    arrange(Groupe,Groupe.détaillé,Etablissement,Rentrée)
  
  esr.ensemble <- esr %>% 
    group_by(Rentrée) %>%
    summarise(across(starts_with("kpi"), ~ sum(.x,na.rm = TRUE))) %>%
    mutate(across(starts_with("kpi"), ~ ifelse(.x==0,NA,.x))) %>% # vérifier
    mutate(Groupe = "Ensemble", pid="Ensemble", Etablissement="Ensemble")

  esr.groupe <- esr %>% 
    #filter(UAI %in% esr.uais$dans.evol) %>%
    group_by(Rentrée, Groupe) %>%
    summarise(across(starts_with("kpi"), ~ sum(.x,na.rm = TRUE))) %>%
    mutate(across(starts_with("kpi"), ~ ifelse(.x==0,NA,.x))) %>% # vérifier
    mutate(pid=Groupe, Etablissement=Groupe, Groupe="Groupe")
  
  esr <- bind_rows(esr,esr.groupe,esr.ensemble) %>%
    mutate(Groupe = factor(Groupe,levels = unique(Groupe)))
}

kpiesr_load <- function(...) {
  load("tdbesr.RData",...)
  esr <- esr
  esr.pnl <- esr.pnl
}

# kpiesr_fusion <- function(uais) {
#   df <- kpiESR::esr %>% filter(UAI %in% uais)
# 
#   info <- df %>%
#     group_by(Rentrée) %>%
#     summarise(
#       UAI = paste(uais,collapse=('_')),
#       Libellé = paste(unique(df$Libellé),collapse=('_')),
#       Sigle = paste(unique(df$Sigle),collapse=('_')),
#       Type = first(df$Type),
#       Type.détaillé = first(df$Type.détaillé),
#       Académie = first(df$Académie),
#       Rattachement = NA,
#       url.sitewe = NA,
#       url.wikidata = NA,
#       url.legifrance = NA
#     )
# 
#   kpis <- df %>%
#     group_by(Rentrée) %>%
#     summarise_at(vars(starts_with("kpi")), ~sum(.))
# 
#   merge(info,kpis) %>% kpiesr_add_kpis
# }




#kpiesr_plot_tdb(2017,uai)


kpiesr_classement <- function(rentrée, rentrée.deb, groupe, kpis, labels=NA, historique=c()) {
  
  classement <- kpiESR::esr %>%
    filter(Rentrée %in% c(rentrée,rentrée.deb), Groupe == groupe, Comparable) %>%
    select(Etablissement, Rentrée, all_of(kpis)) %>%
    group_by(Rentrée) %>% mutate(rang = rank(-!!as.name(kpis[[1]]), na.last = "keep")) %>%
    #pivot_wider(Etablissement, values_from=starts_with("kpi"), names_from = Rentrée) %>%
    group_by(Etablissement) %>% arrange(rentrée) %>% 
    mutate(rang.deb = ifelse(first(Rentrée)==rentrée.deb,first(rang),NA)) %>%
    mutate(evolution = sprintf("(%+3d)", rang.deb - rang)) %>%
    filter(Rentrée == rentrée) %>%
    ungroup() %>% arrange(rang) %>%
    mutate(across(starts_with("kpi"), ~ valeur_labels_long(cur_column(),.x))) %>%
    select(rang, Etablissement, starts_with("kpi"), rang.deb, evolution)

  return(classement)
}

# kpiesr_classement(2019,2013, "Universités et assimilés",
#                  c("kpi.K.dotPres","kpi.FIN.P.ressources","kpi.FIN.S.SCSP"))


#
# kpiesr_classement(rentrée, "Université",
#                   c("kpi.K.proPres",
#                     "kpi.FIN.P.ressources",
#                     "kpi.FIN.S.ressourcesPropres"),
#                   c("Taux","Res.","Res. Propres"),
#                   seq(2012,2016))
cpesr/kpiESR documentation built on July 24, 2024, 6:41 a.m.