Taller de Investigación: Política Cuantitativa “CUANTIPOL” - UNMSM

Introducción ggplot2

Joel Belsasar

2023-04-06

Herramientas para la ciencia de datos

A diagram displaying the data science cycle: Import -> Tidy -> Understand  (which has the phases Transform -> Visualize -> Model in a cycle) -> Communicate. Surrounding all of these is Program Import, Tidy, Transform, and Visualize is highlighted.

Figure 1: Whole game: Visualización

Visualizar… datos

Una visualización de datos efectiva brinda a los usuarios medios intuitivos para…

  • explorar y analizar datos de manera interactiva, permitiéndoles

  • identificar de manera efectiva patrones interesantes,

  • inferir correlaciones y causalidades, y

  • brindar soporte a actividades de comprensión.

Pero…

  • No solo implica aprender a crear un gráfico con una presentación adecuada, sino también comprender cómo abordar los inputs necesarios para lo que se necesite comunicar y, así, determinar la forma más efectiva de expresarlo.

Entonces, ¿por qué usar R?

Reproducibilidad

  • Puedes anotar el scrpit, agregar información extra como títulos, etiquetas y leyendas, y mantener el código de todas las versiones de tus gráficos para saber siempre cómo se crearon.

Flujo de trabajo unificado

  • R nos permite llevar a cabo muchas tareas sin necesidad de utilizar otros programas.

  • Funciones poderosas

    • Se pueden utilizar múltiples paquetes y funciones para lograr una excelente visualización como base R, plotly, sjPlot, mapview, igraph y en particular nos vamos a enfocar en ggplot2.

ggplot()

  • La lógica que propone ggplot una de los paquetes de la familia tidyverse() es la estratificación

  • Si existe un consenso en R, es que ggplot es la librería para graficar.

  • En ggplot una capa se encarga de renderizar cada uno de los elementos visuales. Las capas forman una gramática o un conjunto de reglas mediante las cuales R creará los artefactos visuales.

La gramática en capas de gráficos de Wickham (2009)

A diagram displaying the data science cycle

Figure 2: Adaptado en Introduction to data visualisation

Las capas básicas

1. La data:

  • Los datos que queremos representar en la grafica deben estar ordenados, es decir, cada fila debe representar una observación y cada columna debe representar una variable.

2. El mapeo estético:

  • La segunda capa mapea las variables X y Y usando la funcion aes. Además, puede utilzar otros argumentos como el color y vincularlo a una columna diferente del conjunto de datos.
ggplot(dataframe) + 
geom_(mapping = aes(x, y), ...) + ...

Dataset: WorldBank

  • Utilicemos los datos económicos y sociales de diferentes países proporcionados por el Banco Mundial.

  • Preprocesamiento de los datos:

pacman::p_load(WDI, # Data World Bank
               ggplot2
               )
# Buscar indicadores relacionados con el PIB per cápita:
indicadores <- WDIsearch("GDP per capita")

dataf <- WDI(country = "PE", indicator = c("NY.GDP.PCAP.CD", # PBI
                                             "SH.DYN.MORT"), # Mortalidad
             start = 2000, end = 2022)
dataf <- data.frame(dataf)

# Renombrar las variables del dataframe
colnames(dataf)[5:6] <- c("PIB_Per_Capita", "Mortalidad_Infantil")

Capa: data

ggplot(data = dataf)

Capa: Aesthetics

ggplot(data = dataf, 
       mapping = aes(x = Mortalidad_Infantil, 
           y = PIB_Per_Capita)) 

Capa: Geométrica geom_

ggplot(data = dataf, 
       mapping = aes(x = Mortalidad_Infantil, 
           y = PIB_Per_Capita))  + # Para añadir la siguiente capa debemos utilizar el signo más (`+`)
  geom_point()
  

Capas: Coordinates, and themes

ggplot(data = dataf, 
       mapping = aes(x = Mortalidad_Infantil, y = PIB_Per_Capita)) + 
       geom_point() + 
       coord_trans(x = "log10", y = "log10") + 
       theme_classic()

En suma, en un solo fragmento de código:

# Crear la gráfica utilizando ggplot2
ggplot(dataf,                         # Data
       aes(x = Mortalidad_Infantil,   # Your X-value
           y = PIB_Per_Capita,        # Your Y-value
           color = "")                # Podemos pintar con otra variable
       ) +                            # Aesthetics
  geom_point(size = 5, alpha = 0.8) + # Point
  geom_smooth(method = "lm") +        # Linear regression
  labs(title = "Relación entre Tasa de Mortalidad Infantil y PIB per cápita", # Title
       x = "Tasa de Mortalidad Infantil", y = "PIB per cápita", col = "") +
  theme_classic() + # apply a clean theme
  theme(title = element_text(size = 18, face = "bold"),
      text = element_text(size = 16))

En suma, en un solo fragmento de código:

Bibliografía:

Wickham, H., Navarro, D., & Lin, T. (2009). ggplot2. Elegant Graphics for Data Analysis (3ª ed.). Springer. https://ggplot2-book.org/

Wickham, H. (2010). A Layered Grammar of Graphics. Journal of Computational and Graphical Statistics, vol. 19, no. 1, pp. 3–28. https://vita.had.co.nz/papers/layered-grammar.pdf

Wickham, H., Çetinkaya-Rundel, M., & Grolemund, G. (2023). R for Data Science. Import, Tidy, Transform, Visualize, and Model Data (2ª ed.). O’Reilly Media, Inc. https://r4ds.hadley.nz/

Ikakis, N. (2018). Big data visualization tools.” arXiv preprint. arXiv:1801.08336

Más recursos: