Leer archivos

Primero ajustamos la librería en tidyverse para poder leer el archivo como un tibble. Luego, leemos este archivo como read_csv.

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.1     ✔ stringr   1.5.1
## ✔ ggplot2   4.0.0     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.1.0     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
data <- read_csv("Datos_Permanencia.csv")
## Rows: 29548 Columns: 18
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (4): Nombre.Asignatura, grupo, Ingreso, Condicionalidad
## dbl (14): X1, Codigo_Op, programa_academico, ano_matric, periodo_matric, cod...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Estudiante con menos asignaturas perdidas (Primer punto)

Para observar esto, primero debemos filtrar los estudiantes graduados con las asignaturas vistas.

asignaturas <- 
  data %>% 
  filter(Condicionalidad=="GRADUADO") %>% 
  group_by(Codigo_Op) %>% 
  summarise(n=n_distinct(Nombre.Asignatura))

Posteriormente, para ver quien es el estudiante con el menor número de asignaturas vistas, realizamos el siguiente código.

pequeno <- asignaturas %>% filter(n==min(n))
pequeno
## # A tibble: 1 × 2
##   Codigo_Op     n
##       <dbl> <int>
## 1       669    25

Con esto, sabemos que el estudiante con menor número de asignaturas cursadas es el 669 con 25 materias.

Ya si queremos analizar por qué se da esto, sacamos sus datos en una tabla única para él.

minimo <- data %>% 
  filter(Codigo_Op==669)

Con esto vemos que se debe a que ingresó por CAMBIO DE PROGRAMA y no repitió ninguna asignatura a excepción de Trabajo de Grado I, además que no vio (en Biología) materias de contexto.

Graduados en 10 semestres o menos (Segundo punto)

Para observar cuantos estudiantes graduados han visto 10 semestres o menos, tenemos que realizar el siguiente código.

data %>% 
  filter(Condicionalidad=="GRADUADO", permanencia<=10) %>% 
  summarise(n=n_distinct(Codigo_Op))
## # A tibble: 1 × 1
##       n
##   <int>
## 1     3

Con esto sabemos que los estudiantes graduados con 10 semestres o menos cursados son 3.

Gráfica de permanencia en distintas condicionalidades (Tercer punto)

Para hacer un gráfico de barras de permanencia por cada condicionalidad, se realiza lo siguiente.

data %>% 
  group_by(Condicionalidad=Condicionalidad, perm=permanencia) %>% 
  summarise(n=n_distinct(Codigo_Op)) %>% 
  filter(Condicionalidad=="RETIRO VOLUNTARIO" | Condicionalidad=="GRADUADO" | Condicionalidad=="PFU") %>% 
  ggplot(aes(x=Condicionalidad, y=perm, fill = Condicionalidad))+
  geom_boxplot()+
  labs(y="Permanencia", title = "Permanencia por condicionalidad")
## `summarise()` has grouped output by 'Condicionalidad'. You can override using
## the `.groups` argument.

Con esto se concluye que en general los estudiantes con condicionalidad de RETIRO VOLUNTARIO son los que duran menos tiempo, sin embargo, el estudiante que ha durado menos tiempo hace parte de la condicionalidad PFU.

Gráfico de recurrencias (Cuarto punto)

Primero, se debe filtrar los datos de acuerdo a las condicionalidades dadas.

condicion <- data %>% 
  filter(Condicionalidad=="GRADUADO" | Condicionalidad=="PFU" | Condicionalidad=="RETIRO VOLUNTARIO")

Seguidamente, tenemos que hallar la recurrencia de las materias, esto se hace dividiendo las veces vistas la materia/el número de estudiantes distintos que la vieron.

repetidas<- condicion %>% 
  group_by(Condicionalidad, Nombre.Asignatura) %>% 
  summarise(estu=n_distinct(Codigo_Op),
            cursada=n(),
            recurrencia= cursada/estu) %>% 
  filter(recurrencia>1.3)
## `summarise()` has grouped output by 'Condicionalidad'. You can override using
## the `.groups` argument.

Posterior a esto, hacemos un gráfico en el cual se visualice las materias por las recurrencias de estas.

ggplot(repetidas, 
  aes(x=recurrencia, y=Nombre.Asignatura, fill = Nombre.Asignatura))+
  geom_col()+
  facet_wrap(~Condicionalidad)+
  labs(title = "Recurrencia mayor a 1.3", x="Recurrencia", y="Asignatura")+
  theme_bw()+
  theme(legend.position = "none")

Por último, si queremos saber cual es la materia la cual tiene mayor recurrencia, utilizamos el siguiente cófigo (ajustado para PFU).

repetidas %>% 
  filter(Condicionalidad=="PFU") %>% 
  arrange(desc(recurrencia))
## # A tibble: 22 × 5
## # Groups:   Condicionalidad [1]
##    Condicionalidad Nombre.Asignatura                   estu cursada recurrencia
##    <chr>           <chr>                              <int>   <int>       <dbl>
##  1 PFU             GENETICA                               1       3         3  
##  2 PFU             PROYECTO DE GRADO I.                   1       3         3  
##  3 PFU             BIOQUIMICA II                          4      10         2.5
##  4 PFU             MICROBIOLOGIA                          2       5         2.5
##  5 PFU             DEPORTE SELECCION                      1       2         2  
##  6 PFU             DEPORTES SELECCION                     1       2         2  
##  7 PFU             FISIOLOGIA ANIMAL                      4       8         2  
##  8 PFU             GENETICA DE POBLACIONES                2       4         2  
##  9 PFU             INTROD.A LA INVESTIGACION              3       6         2  
## 10 PFU             SISTEMAS DE INFORMACION GEOGRAFICA     1       2         2  
## # ℹ 12 more rows

A partir de esto, podemos saber que para los estudiantes con condicionalidad PFU es GENETICA y PROYECTO DE GRADO I.