Tidyverse es un conjunto de paquetes para la ciencia de datos, todos los paquetes que lo componen comparten la misma filosofía de diseño, gramática y estructuras de datos.
Instalación
install.packages("tidyverse")
library(tidyverse)
Si de detectan conflictos podemos deshabilitar un paquete con detach("package:magrittr",unload = T)
. Otra forma para “desambiguar” una función es hacer referencia al paquete que contiene la función de forma explicita, por ejemplo dplyr::mutate()
.
Compruebo si hay paquetes desactualizados: tidyverse_update()
Actualizo algunos paquetes pasando sus nombres como un vector de entrada en una línea install.packages(c("httr", "xml2"))
.
Más sobre paquetes
En cualquier momento podemos consultar los paquetes instalados en nuestra computadora: installed.packages()
.
Consultar datos sobre un paquete:
packageDescription("tidyverse")
packageVersion("tidyverse")
help(package = "tidyverse")
Para desinstalar un paquete:
remove.packages("vioplot")
Para obtener los paquetes que requieren actualizarse:
old.packages()
Para actualizar todos los paquetes:
update.packages()
Análisis exploratorio de los datos
View(mpg) # Invoca un visor de datos en una nueva pestaña de RStudio
?mpg # help(mpg)
Muestra los primeros 10 registros del dataset (por defecto muestra 6):
head(mpg,10)
Dimensiones del objeto
> dim(mpg)
[1] 234 11
> nrow(mpg)
[1] 234
> ncol(mpg)
[1] 11
La función glimpse
del paquete dplyr:
> glimpse(mpg)
Observations: 234
Variables: 11
$ manufacturer <chr> "audi", "audi", "audi", "audi", "audi", "audi", "audi", "audi", "…
$ model <chr> "a4", "a4", "a4", "a4", "a4", "a4", "a4", "a4 quattro", "a4 quatt…
$ displ <dbl> 1.8, 1.8, 2.0, 2.0, 2.8, 2.8, 3.1, 1.8, 1.8, 2.0, 2.0, 2.8, 2.8, …
$ year <int> 1999, 1999, 2008, 2008, 1999, 1999, 2008, 1999, 1999, 2008, 2008,…
$ cyl <int> 4, 4, 4, 4, 6, 6, 6, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 8,…
$ trans <chr> "auto(l5)", "manual(m5)", "manual(m6)", "auto(av)", "auto(l5)", "…
$ drv <chr> "f", "f", "f", "f", "f", "f", "f", "4", "4", "4", "4", "4", "4", …
$ cty <int> 18, 21, 20, 21, 16, 18, 18, 18, 16, 20, 19, 15, 17, 17, 15, 15, 1…
$ hwy <int> 29, 29, 31, 30, 26, 26, 27, 26, 25, 28, 27, 25, 25, 25, 25, 24, 2…
$ fl <chr> "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", …
$ class <chr> "compact", "compact", "compact", "compact", "compact", "compact",…
La función summary
es muy útil para analizar cada variable y algunos datos calculados si son numéricas:
> summary(mpg)
manufacturer model displ year cyl
Length:234 Length:234 Min. :1.600 Min. :1999 Min. :4.000
Class :character Class :character 1st Qu.:2.400 1st Qu.:1999 1st Qu.:4.000
Mode :character Mode :character Median :3.300 Median :2004 Median :6.000
Mean :3.472 Mean :2004 Mean :5.889
3rd Qu.:4.600 3rd Qu.:2008 3rd Qu.:8.000
Max. :7.000 Max. :2008 Max. :8.000
trans drv cty hwy
Length:234 Length:234 Min. : 9.00 Min. :12.00
Class :character Class :character 1st Qu.:14.00 1st Qu.:18.00
Mode :character Mode :character Median :17.00 Median :24.00
Mean :16.86 Mean :23.44
3rd Qu.:19.00 3rd Qu.:27.00
Max. :35.00 Max. :44.00
fl class
Length:234 Length:234
Class :character Class :character
Mode :character Mode :character
Para generar un resumen automático en HTML DataExplorer hace un excelente trabajo aplicando varias observaciones estadísticas y diagramas.
install.packages("DataExplorer")
library(DataExplorer)
DataExplorer::create_report(mpg)
Visualización de datos con ggplot2
Genero un diagrama de dispersión de puntos (scatter plot) que muestra la relación negativa entre el tamaño del depósito y la eficiencia (millas que recorren por un galón) del combustible (a mayor tamaño menor eficiencia).
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ,y = hwy))
La función geom_point
no es la única que podemos crear con ggplot2, si introducimos “geom_” RStudio despliega un montón de funciones geométricas para crear representaciones gráficas. El argumento mapping
indica como los datos del dataset van a ser traducidos o mapeados a elementos visuales, el argumento mapping siempre ira relacionado con la función aes
(aesthetic o estética) para indicar en este caso en que eje se representa cada variable. A partir de aquí es muy util definir unos templates o recetas para generar nuestros gráficos.
Siguiendo con el ejemplo anterior voy a introducir una tercera vari able con el tipo de vehículo (class
) que se representará como el color del punto en el scatter plot:
ggplot(data = mpg)+
geom_point(mapping = aes(x=displ,y=hwy,colour=class))
Podemos crear otras visualizaciones, en vez de representar con un color cada tipo de coche podemos usar el tamaño del punto para diferenciarlos:
ggplot(data = mpg)+
geom_point(mapping = aes(x=displ,y=hwy,size=class))
Se produce una advertencia o warning porque estamos usando valores no discretos para una variable size que espera sea numérica.
Podemos jugar con la transparencia o opacidad de los puntos usando el parámetro alpha
:
ggplot(data = mpg)+
geom_point(mapping = aes(x=displ,y=hwy,alpha=class))
Podemos jugar con la forma de los puntos con el parámetro shape
:
ggplot(data = mpg)+
geom_point(mapping = aes(x=displ,y=hwy,shape=class))
Produce un warning porque gglot sólo puede usar 6 tipos de puntos.
Selección manual de estéticas
Fuera del mapeo de la estética defino el color de los puntos:
ggplot(data = mpg)+
geom_point(mapping = aes(x=displ,y=hwy),color="red")
Lo mismo que el color
podemos jugar con el tamaño size
o la forma de los puntos con shape
representable con números del 1 al 24.
Ahora si mezclamos todo lo aprendido:
ggplot(data = mpg)+
geom_point(mapping = aes(x=displ,y=hwy),shape=23,color="red",size=10,fill="yellow")
Los facets de ggplot
Otro modo adicional del uso de las estéticas es añadir facets o subconjuntos de diagramas. La variable que usamos para segmentar debe ser discreta (no acepta cualquier valor, únicamente aquellos que pertenecen al conjunto), en el siguiente ejemplo creo un diagrama para cada tipo de coche:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_wrap(~class,nrow=2)
facet_grid
forma una matriz de paneles formada en este caso por las combinaciones de las variables drv
(tracción delantera ‘f’, trasera ‘r’ o 4x4 ‘4’) y cyl
(número de cilindros).
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(drv~cyl)
Distribuido por una única variable como .~cyl
:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(.~cyl)
Geometrías con ggplot
Hasta ahora hemos visto la geometría de puntos con geom_point
pero ggplot ofrece otras formas de representación, por ejemplo geom_bar
, geom_line
o geom_boxplot
.
Un ejemplo, geom_smooth
ayuda de identificar el patrón de forma visual:
ggplot(data=mpg) +
geom_smooth(mapping = aes(x=displ,y=hwy))
Resultado:
Si queremos dividir las rectas por cada tipo de coche:
ggplot(data=mpg) +
geom_smooth(mapping = aes(x=displ,y=hwy,linetype = drv))
ggplot(data=mpg) +
geom_smooth(mapping = aes(x=displ,y=hwy,linetype = drv,color =drv))
Combinando puntos y líneas:
ggplot(data=mpg) +
geom_point(mapping = aes(x=displ,y=hwy,color=drv)) +
geom_smooth(mapping = aes(x=displ,y=hwy,linetype = drv,color =drv))
Esta guia rápida ggplot2-cheatsheet-2.1-Spanish.pdf ofrece una visión del potencial de ggplot para crear diagramas.
Código fuente
- r / intro / 56-Tidyverse / Tidyverse.R.
Enlaces internos
- ggplot2-cheatsheet-2.1-Spanish.pdf.
- “Paquetes en R - Como instalarlos y usarlos”.
- Artículos sobre ggplot2 en mi blog.
Enlaces externos
- datacamp.com “R Packages: A Beginner’s Guide “: Excelente introducción.
- ggplot2.tidyverse.org “geom_point”.
- ggplot2.tidyverse.org “Construct aesthetic mappings”.
- “ggplot2 Quick Reference: shape”.
- “One Page R”.
- joanby/tidyverse-data-science.