Graduação

Cálculo do Aluno de Graduação Equivalente a partir dos dados fornecidos pela SUTIC. Na tabela abaixo, é possível filtrar o total de alunos equivalente de acordo com o curso, o sexo e a área do Impact Ranking do Times Higher Education (THE).

Fórmula para cálculo do Aluno de Graduação em Tempo Integral:

\[AG_{TI} = \sum_{\text{todos os cursos}}\{(N_{DI}*D_{PC})(1+[\text{Fator de retenção}]) + ((N_{I}-N_{DI})/4)*D_{PC})\}\]

Fórmula para cálculo do Aluno de Graduação Equivalente:

\[A_gE = AG_{TI} * [\text{Peso do grupo em que se insere o curso}]\]

# Calculando aluno equivalente TCU a partir de dados 
# brutos 

library(openxlsx)
library(readxl)
library(readr)
library(dplyr)
library(imputeTS)
library(tidyverse)
library(DT)

library(htmlwidgets)
library(htmltools)


# Abrir os dados ----------------------------------------------------------


# numero de discentes 
discentes_20211 <- 
  read_csv("G:/Drives compartilhados/ESTATISTICA/THE_IMPACT_2023/TCU_metodology/Discentes da Graduaçãp 2021-1.csv")
discentes_20211$pnaes %>% str_replace_all("NULL", NA_character_) -> discentes_20211$pnaes

# numero de diplomados NDI

NDI <- read_excel("G:/Drives compartilhados/ESTATISTICA/THE_IMPACT_2023/TCU_metodology/formados_GRAD.xlsx") 

# tabela DPC e fatores de retencao

DPC_fator_ret <- read_excel("G:/Drives compartilhados/ESTATISTICA/THE_IMPACT_2023/TCU_metodology/DPC_fator_ret.xlsx")


# Areas THE
areas_cursos <- read_excel("dados alunos para WUR 2016.xlsx", 
                           sheet = "area_turno", col_types = c("text", "skip", "text"))



areas_cursos %>% DT::datatable(options=list(initComplete = JS(
  "function(settings, json) {",
  "$(this.api().table().header()).css({'font-size': '50%'});",
  "$(this.api().table().footer()).css({'font-size': '50%'});",
  "}"),
  scrollY=300,  pageLength = nrow(areas_cursos), scrollX=TRUE, 
  scroller=TRUE), 
  rownames=FALSE, filter = "top") %>%
  DT::formatStyle(columns = 0:12, fontSize = '50%')
# Totais de alunos por curso ----------------------------------------------

# numero total de discentes
discentes_20211 %>% group_by(curso, campus, sexo) %>%
  summarise(total = n()) -> total_geral

total_geral %>% DT::datatable(options=list(initComplete = JS(
  "function(settings, json) {",
  "$(this.api().table().header()).css({'font-size': '50%'});",
  "$(this.api().table().footer()).css({'font-size': '50%'});",
  "}"),
  scrollY=300,  pageLength = nrow(total_geral), scrollX=TRUE, 
  scroller=TRUE), 
  rownames=FALSE, filter = "top") %>%
  DT::formatStyle(columns = 0:12, fontSize = '50%')
# numero total de diplomados
NDI %>% group_by(curso, campus, sexo) %>% 
  summarise(NDI = n()) -> total_NDI

total_NDI %>% DT::datatable(options=list(initComplete = JS(
  "function(settings, json) {",
  "$(this.api().table().header()).css({'font-size': '50%'});",
  "$(this.api().table().footer()).css({'font-size': '50%'});",
  "}"),
  scrollY=300,  pageLength = nrow(total_NDI), scrollX=TRUE, 
  scroller=TRUE), 
  rownames=FALSE, filter = "top") %>%
  DT::formatStyle(columns = 0:12, fontSize = '50%')
# numero total de ingressantes
discentes_20211 %>% filter(ano_ingresso == 2021) %>% 
  group_by(curso, campus, sexo) %>% summarise(NI = n()) -> total_NI

total_NI %>% DT::datatable(options=list(initComplete = JS(
  "function(settings, json) {",
  "$(this.api().table().header()).css({'font-size': '50%'});",
  "$(this.api().table().footer()).css({'font-size': '50%'});",
  "}"),
  scrollY=300,  pageLength = nrow(total_NI), scrollX=TRUE, 
  scroller=TRUE), 
  rownames=FALSE, filter = "top") %>%
  DT::formatStyle(columns = 0:12, fontSize = '50%')
# Merge para tabela AGTI --------------------------------------------------


total_geral %>% 
  full_join(total_NDI, by=c(curso = "curso", campus = "campus", sexo="sexo")) %>% 
  full_join(total_NI, by=c(curso = "curso", campus = "campus", sexo="sexo")) %>%
  full_join(DPC_fator_ret, by=c(curso = "curso", campus = "campus")) %>% 
  full_join(areas_cursos, by="curso") %>% 
  mutate_if(is.numeric, ~replace_na(., 0)) %>% 
  mutate(AGTI = (NDI*dpc)*(1+fator_ret) + ((NI-NDI)/4)*dpc) %>%
  mutate(AGE = AGTI*peso) -> tabela


#------

sketch <- htmltools::withTags(table(
  tableHeader(colnames(tabela)), 
  tableFooter(rep("",ncol(tabela)))
))

jsCode <- "function(row, data, start, end, display) {
  var api = this.api(), data;
  total = api.column(10, {page: 'current'}).data().reduce( function(a, b) { return a +
b}, 0);
  total2 = api.column(11, {page: 'current'}).data().reduce( function(a, b) { return a
+ b}, 0);
  $( api.column(10).footer() ).html('Total: ' + total.toFixed(2));
  $( api.column(11).footer() ).html('Total: ' + total2.toFixed(2))
  }"

DT::datatable(tabela, container = sketch, 
              options=list(initComplete = JS(
                "function(settings, json) {",
                "$(this.api().table().header()).css({'font-size': '50%'});",
                "$(this.api().table().footer()).css({'font-size': '50%'});",
                "}"),
                scrollY=300,  pageLength = nrow(tabela), scrollX=TRUE, 
                scroller=TRUE, dom = 't',
                footerCallback = JS(jsCode),
                columnDefs = list(list(targets = c(1,3,4,5,6,7,8,10,11), 
                                       searchable = FALSE))), rownames=FALSE,
              filter = "top") %>%
  DT::formatStyle(columns = 0:12, fontSize = '50%')