Capítol 9 Alternativas Tydiverse
El universo de Tydiverse consiste en una colección de packages de R orientados al Data Science. Se recomienda la consulta del libro online R para Ciencia de Datos.
El package dplyr, al igual que ggplot2, está desarrollado por Hadley Wickham. Este paquete, supone un cambio de filosofía en la forma de trabajar con los datos y se está transformando en un nuevo estándar en R.
9.1 Dplyr: arrange, filter, select
arange: Ordena los registros de un data frame.filter: Filtra a partir de un conjunto condiciones lógicas.select: Selecciona las variables.
Paises asiaticos con PIB per cápita inferior a 1000 $ en 2007.
pais07dplyr <- paises07 %>%
arrange(desc(esperanza_de_vida)) %>%
filter(continente=='Asia' & pib_per_capita < 1000) %>%
dplyr::select(pais,esperanza_de_vida,pib_per_capita)
kable(pais07dplyr)| pais | esperanza_de_vida | pib_per_capita |
|---|---|---|
| Myanmar | 62.069 | 944.0000 |
| Afganistán | 43.828 | 974.5803 |
Las 3 comparten el hecho que no necesitan de comillas para referirse a las variables. También utilizan el operador %>% llamado pipe. Éste sustituye el parámetro de entrada de datos. De esta forma, permite escribir las operaciones de izquierda a derecha facilitando así su lectura.
9.2 Dplyr: mutate, group_by, summarise
mutate: Crea o modifica las variables del data frame.group_by: Especifica una o varias variables de agrupación.summarise: define los agregados de las variables originales.
Esperanza de vida y PIB per cápita medio por continente y año.
continentes_anio <- paises %>%
arrange(continente,anio) %>%
mutate(esperanza_de_vida_total = esperanza_de_vida * poblacion
, pib_total = pib_per_capita * poblacion) %>%
group_by(continente,anio) %>%
dplyr::summarize(n_paises=n()
, esperanza_de_vida = sum(esperanza_de_vida_total ) /
sum(poblacion )
, pib_per_capita = sum(pib_total) /
sum(poblacion)
, poblacion = sum(poblacion))
kable(continentes_anio %>% head(10))| continente | anio | n_paises | esperanza_de_vida | pib_per_capita | poblacion |
|---|---|---|---|---|---|
| África | 1952 | 52 | 38.79973 | 1311.221 | 237640501 |
| África | 1957 | 52 | 40.94031 | 1444.952 | 264837738 |
| África | 1962 | 52 | 43.09925 | 1540.599 | 296516865 |
| África | 1967 | 52 | 45.17721 | 1774.847 | 335289489 |
| África | 1972 | 52 | 47.21229 | 2063.171 | 379879541 |
| África | 1977 | 52 | 49.20883 | 2244.799 | 433061021 |
| África | 1982 | 52 | 51.01744 | 2295.192 | 499348587 |
| África | 1987 | 52 | 52.82479 | 2180.764 | 574834110 |
| África | 1992 | 52 | 53.37292 | 2071.615 | 659081517 |
| África | 1997 | 52 | 53.28327 | 2098.865 | 743832984 |
Para la evolución de los continentes en ggplot2, es útil el geom_path()
ggplot(continentes_anio, aes(x=pib_per_capita
, y=esperanza_de_vida
, color =continente)) +
geom_path() +
scale_x_log10() +
geom_text_repel(aes(label=anio), size=2, color="black") +
labs(title="Evolución continentes (ponderado)")
Figura 9.1: Fuente: Elaboración propia con datos de Gapminder
9.3 Actividad guiada 1.4.
Vamos a incorporar los gráficos de evolución de los continentes en el informe teniendo en cuenta los siguientes cambios:
- Recodifica Oceanía como Asia y Modifica los colores de los continentes.
- Utiliza la paleta de colores de la actividad guiada 1.3.
Observa:
- Se ha utilizado dplyr: arrange,mutate,group_by y summarize.
- Se ha utilizado geom_path.
9.4 Actividad guiada 1.4
library(knitr)
library(datos)
suppressPackageStartupMessages(library(tidyverse))
library(ggrepel)
knitr::opts_chunk$set(echo = TRUE)
paises_informe <- paises
# Recodifica Oceanía por Asia
paises_informe$continente[paises_informe$continente=="Oceanía"] <- "Asia"
# Elimina Oceanía de los levels
paises_informe$continente <- factor(paises_informe$continente)
# Paleta de colores
colores_continente <- c("blue","green", "red", "yellow")
names(colores_continente) <- c("África", "Américas", "Asia", "Europa")
# Etiquetas
etiquetas_paises <- c("España","China","Etiopía","Canadá")
# funcion describir
describir <- function(data, colores, etiquetas) {
# filtra paises con etiqueta
data_etiquetas <- data[data$pais %in% etiquetas, ]
# Agrega continentes
data_continente <- data %>%
arrange(continente, anio) %>%
mutate(esperanza_de_vida_total = esperanza_de_vida * poblacion
, pib_total = pib_per_capita * poblacion) %>%
group_by(continente, anio) %>%
dplyr::summarize(n_paises=n()
, esperanza_de_vida = sum(esperanza_de_vida_total ) /
sum(poblacion )
, pib_per_capita = sum(pib_total) /
sum(poblacion)
, poblacion = sum(poblacion))
resultados <- list()
resultados[["continentes"]] <- ggplot(data_continente, aes(x=pib_per_capita, y=esperanza_de_vida
, color=continente)) +
geom_path() +
scale_x_log10() +
scale_colour_manual(values = colores) +
geom_text_repel(aes(label=anio), size=2, color="black") +
labs(title="Evolución de los Continentes de 1952 a 2007"
, x = "Logaritmo base 10 del PIB per cápita ($ americanos, ajustados según inflación)"
, y = "Esperanza de vida (años)")
return(resultados)
}
resumen <- describir(paises_informe, colores_continente, etiquetas_paises)## `summarise()` regrouping output by 'continente' (override with `.groups` argument)
9.4.1 Evolución de los continentes
Figura 9.2: Evolución continentes (Fuente: Elaboración propia con datos de Gapminder)
El gráfico muestra la traza que han recorrido los continentes en sus valores medios de PIB per cápita y Esperanza de vida. Se confirma la mayor progresión de Asia. Vemos que como América y Europa, en media tienen un comportamiento bastante paralelo. Se observa como el recorrido de África, aunque partiendo de valores muy inferiores, ha sido positiva y ha incrementado de forma similar el resto de continentes.