Les presentamos un documento RMarkdown renderizado a HTML :)
En este ejemplo vamos a ver cómo construir un archivo Rmarkdown que incluya texto, tablas y figuras en el documento.
El documento se divide en 3 partes:
En el texto se pueden señalar palabras en:
color
También se pueden cambiar el color del fondo y la alineación del texto o incluso agregar emojis 😉
Podemos incluir codigos
y links como éste al capítulo sobre Rmarkdown del libro R para Ciencia de Datos en español.
Y muchas más opciones!
Los bloques o ‘chunks’ son fragmentos de código incluidos en nuestro documento. Cada bloque comienza con ```{r}
y termina con```
.
Se agregan:
apretando Ctrl+Alt+I
haciendo click en Code > Insert Chunk
Dentro de ellos podemos escribir texto anteponiendo un #. Todo lo que este detrás del # no será leido.
Los códigos de bloque se pueden correr:
apretando Ctrl+Enter en la línea de código
haciendo click sobre la flecha verde en cada bloque
1. Indicar que se incluya una imagen
# comando para incluir una imagen
knitr::include_graphics("REINVENTARTEC 2022.png")
2. Realizar operaciones matemáticas
# ejemplo de operación matemática
2 + 2
## [1] 4
3. Configurar condiciones para futuros bloques
# para cambiar algunas opciones por default de los bloques
knitr::opts_chunk$set(
warning = FALSE, #evita que se muestren "warnings"
message = FALSE, #evita que se muestren mensajes
fig.align = 'center' #centra las imágenes
)
4. Realizar análisis de datos!
Analizaremos el set de datos llamado “Datos 2010-2016.csv” (que pueden descargar de este link) pero ahora con R en vez de Python.
Paso 1: cargar los paquetes necesarios
Para cargar, manipular y vizualizar los datos debemos tener instalados ciertos paquetes y cargarlos.
La instalación se realiza una única vez y los paquetes se cargan cada vez que se inicia una sesión de R.
En este caso utilizaremos 2 paquetes:
tidyverse
(incluye varios paquetes diseñados para la ciencia de datos)janitor
Carguemos los paquetes:
# Instalación de los paquetes (solo la primera vez)
# Si nunca los instalaron, sacar el # que esta adelante de los siguientes comandos
# install.packages("tidyverse")
# install.packages("janitor")
# Carga de los paquetes
library(tidyverse)
library(janitor)
Paso 2: cargar la base de datos
Se pueden leer bases de datos en formato csv
utilizando la función read.csv()
y generando un objeto que los contenga.
#Creación de un objeto con los datos
datos <- read.csv(file="Datos 2010-2016.csv",
header=T)
Podemos ver la estructura de los datos utilizando la función glimpse()
.
# Para ver cuáles son las variables y de qué tipo son
glimpse(datos)
## Rows: 58,840
## Columns: 22
## $ AÃ.o <int> 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2~
## $ Tipo.de.Institucion <chr> "Universidad ", "Universidad ", "Universida~
## $ Institucion <chr> "Pontificia Universidad Catolica Argentina ~
## $ Institucion.New <chr> "Pontificia Universidad Catolica Argentina ~
## $ Unidad.Academica <chr> "Facultad de Artes y Ciencias Musicales", "~
## $ Unidad.Academica.New <chr> "Facultad de Artes y Ciencias Musicales", "~
## $ Carrera <chr> "Musica", "Musica", "Musica", "Musica", "Mu~
## $ Titulo <chr> "Licenciado en Composicion", "Licenciado en~
## $ Gestion <chr> "Privada ", "Privada ", "Privada ", "Privad~
## $ Nivel.de.la.Oferta <chr> "Grado ", "Grado ", "Grado ", "Pregrado", "~
## $ Total.de.Estudiantes <chr> "144", "3", "53", "5", "36", "42", "350", "~
## $ Estudiantes.Varones <chr> "111", "1", "34", "3", "27", "24", "268", "~
## $ Estudiantes.Mujeres <chr> "33", "2", "19", "2", "9", "18", "82", "32"~
## $ Total.de.Nuevos.Inscriptos <chr> "40", "", "10", "", "10", "", "91", "35", "~
## $ Nuevos.Inscriptos.Varones <chr> "27", "", "8", "", "7", "", "66", "27", "7"~
## $ Nuevos.Inscriptos.Mujeres <chr> "13", "", "2", "", "3", "", "25", "8", "24"~
## $ Total.de.Reinscriptos <chr> "104", "3", "43", "5", "26", "", "259", "12~
## $ Reinscriptos.Varones <chr> "84", "1", "26", "3", "20", "", "202", "100~
## $ Reinscriptos.Mujeres <chr> "20", "2", "17", "2", "6", "", "57", "24", ~
## $ Total.de.Egresados <chr> "11", "2", "15", "", "", "7", "21", "2", "2~
## $ Egresados.Varones <chr> "11", "1", "10", "", "", "6", "13", "", "9"~
## $ Egresados.Mujeres <chr> "", "1", "5", "", "", "1", "8", "2", "18", ~
El set de datos tiene 58840 filas (observaciones) y 22 columnas (variables).
Debajo estan los nombres de las variables (detras de cada $), el tipo de variable (numérica o de caracteres) y algunos de los valores que toman.
En este ejemplo vamos a analizar la relación de ingresantes que se autoperciben mujeres o varones en las 10 carreras de postgrado con mayor número de ingresantes por lo que antes de realizar cualquier análisis hay que “limpiar” los datos.
Paso 3: limpieza de datos
Este paso suele ser uno de los más tediosos pero también de los más importantes!
Pero no se preocupen, R lo hace rápido y para este taller ya traemos la solución 😉
Estos son los pasos para obetener la tabla de datos “limpia” de las 10 carreras de postgrado con mayor número de ingresantes para los análisis.
# Generaremos un nuevo objeto con los datos de interés
# a partir del set original de datos
datos_limpios <- datos %>%
# renombramos las columnas sin mayúsculas y con "_" entre palabras
clean_names() %>%
# seleccionamos las variables de interés
select(nivel_de_la_oferta,
carrera,
total_de_nuevos_inscriptos,
nuevos_inscriptos_varones,
nuevos_inscriptos_mujeres) %>%
# convertimos a factor el nivel y la carrera
mutate(across(c(nivel_de_la_oferta,
carrera),
as.factor)) %>%
# convertimos a números los inscriptos
mutate(across(c(total_de_nuevos_inscriptos,
nuevos_inscriptos_varones,
nuevos_inscriptos_mujeres),
as.numeric)) %>%
# reemplazamos los valores faltantes (NA) por 0
mutate_if(is.numeric, ~replace_na(., 0)) %>%
# filtramos las carreras de posgrado
filter(nivel_de_la_oferta=="Posgrado") %>%
# eliminamos la columna de "nivel_de_la_oferta"
select(-nivel_de_la_oferta)%>%
# agrupamos los datos por carrera
group_by(carrera)%>%
# sumamos los valores por carrera
summarise(across(everything(), sum))%>%
# seleccionamos las 10 carreras con más personas inscriptas
top_n(10,total_de_nuevos_inscriptos) %>%
# renombramos las variables
rename("Carrera" = carrera,
"Total" = total_de_nuevos_inscriptos,
"Varones" = nuevos_inscriptos_varones,
"Mujeres" = nuevos_inscriptos_mujeres)
Paso 4: analizar los datos
Podemos simplemente visualizar los datos
datos_limpios %>%
kableExtra::kbl(caption = "Tabla 1. Número de ingresantes totales y que se autoperciben mujeres o varones en las 10 carreras de postgrado con mayor número de ingresantes.") %>%
kableExtra::kable_classic(full_width = F, html_font = "Helvetica", font_size = 12)
Carrera | Total | Varones | Mujeres |
---|---|---|---|
Ciencia Politica | 8764 | 4092 | 4672 |
Ciencias de la Educacion | 18571 | 4258 | 14313 |
Contabilidad | 6163 | 2695 | 3468 |
Derecho y Ciencias Juridicas | 33674 | 15089 | 18585 |
Finanzas y Negocios | 8190 | 5514 | 2676 |
Formacion Docente de Nivel Superior y Universitario | 7476 | 2701 | 4775 |
Gestion y Administracion de Empresas | 15937 | 10054 | 5883 |
Medicina | 25010 | 10118 | 14892 |
Psicologia | 11592 | 2463 | 9129 |
Sociologia | 9483 | 3112 | 6371 |
datos_limpios %>%
pivot_longer(!c(Carrera, Total), names_to = "Género", values_to = "N") %>%
ggplot(aes(x =reorder(Carrera, N), y =N)) +
geom_col(aes(fill=Género), stat = "identity")+
scale_fill_viridis_d() +
scale_x_discrete(labels = label_wrap_gen(width = 27))+
coord_flip() +
labs(x = NULL, y = "Número de personas")+
theme_minimal()+
theme(legend.text = element_text(size = 12),
legend.position = "bottom",
axis.text = element_text(size = 12),
title = element_text(size = 12, hjust = 0.5))
O también podemos estimar (y visualizar) valores de interés
datos_limpios %>%
pivot_longer(!c(Carrera, Total),
names_to = "Género", values_to = "N") %>%
group_by(Género)%>%
summarise(total = sum(N)) %>%
mutate(porcentaje = total/sum(total),
ymax = cumsum(porcentaje),
ymin = c(0, head(ymax, n=-1)),
labelPosition = (ymax + ymin) / 2,
label = paste0(Género, "\n value: ", total)) %>%
ggplot(aes(x=2, y=porcentaje, fill=Género)) +
geom_bar(stat = "identity") +
xlim(0.5, 2.5) +
coord_polar(start = 0, theta = "y") +
labs(x = "",
y = "",
title = "Representación de género de las 10 carreras\nde postgrado con más ingresantes\nentre 2010 y 2016",
fill= NULL) +
scale_fill_viridis_d() +
geom_text(aes(label = scales::percent(porcentaje)),
size = 6, position = position_stack(vjust = 0.5),
colour = c(rep("white", 1), 1))+
theme_void() +
theme(legend.text = element_text(size = 16),
legend.position = "bottom",
title = element_text(size = 16))