IN2039: Visualización de Datos
Departamento de Ingeniería Industrial
Datos de más de una variable
Dos variables numéricas
Una variable numérica y una categórica
Dos variables categóricas
Tres o más variables
Carguémos las librerías readxl
, ggplot2
, ggformula
, y dplyr
en Google Colab y R antes de comenzar.
Los datos multivariados son conjunto de datos que contienen observaciones de dos o más variables.
Las variables pueden ser numéricas o categóricas.
Las variables pueden o no depender las unas de las otras.
De hecho, el objetivo es establecer si hay alguna relación entre las variables, así como el tipo de relación.
Consideremos datos de 392 autos sobre sus millas por galón, número de cilindros, caballos de fuerza, peso, aceleración, año, origen, entre otras variables.
Los datos están en el archivo “auto_dataset.xlsx”.
# A tibble: 6 × 9
mpg cylinders displacement horsepower weight acceleration year origin
<dbl> <dbl> <dbl> <chr> <dbl> <dbl> <dbl> <chr>
1 18 8 307 130 3504 12 70 American
2 15 8 350 165 3693 11.5 70 American
3 18 8 318 150 3436 11 70 American
4 16 8 304 150 3433 12 70 American
5 17 8 302 140 3449 10.5 70 American
6 15 8 429 198 4341 10 70 American
# ℹ 1 more variable: `car name` <chr>
En el contexto de datos de múltiples variables, las preguntas típicas a estudiar son:
¿Cómo se relacionan la variable \(X\) y la variable \(Y\)?
¿Es la distribución de la variable \(X\) la misma en todos los subgrupos definidos por la variable \(Z\)?
¿Hay alguna observación inusual en la combinación de valores de las variables \(X\) y \(Y\)?
¿Hay alguna observación inusual en \(X\) para un subgrupo de la variable \(Z\)?
Existen varios tipos de gráficas que nos ayudan a explorar relaciones entre dos o más variables.
Tipo | Gráfica |
---|---|
Numéricas | Gráfica de dispersión, gráfico de lineas |
Categóricas | Gráfica de barras lado a lado, gráfico de barras apiladas |
Mixta | Gráfica de caja una al lado de la otro, gráfica de burbujas |
Cuando investigamos la relación entre dos variables (numéricas o categóricas), tenemos una nomenclatura específica para cada una de ellas.
Llamamos a una variable como la variable dependiente o de respuesta, denotandola con la letra \(Y\).
La otra variable la llamamos variable independendiente o predictor, denotandola con la letra \(X\).
Nuestro objetivo es saber si cambios en la variable \(X\) están asociados a cambios en la variable \(Y\), y el tipo de asociación.
La gráfica más común para examinar la relación entre dos variables numéricas es la gráfica de dispersión.
Las variables \(X\) y \(Y\) se colocan en el eje horizontal y vertical, respectivamente. Cada punto en la gráfica marca la posición de un par de valores de \(X\) y \(Y\).
El objetivo es explorar relaciones lineales o no lineales entre las variables.
Para construir gráficas de dispersión, usamos la función gf_point(Y ~ X, data = data_set)
.
Siguiendo el principio 3, podemos cambiar los valores pre-establecidos de la función para definir colores o formas diferentes de los puntos de la gráfica.
Específicamente, puedes cambiar el color, la forma, y el tamaño de los puntos usando los argumentos color
, shape
y size
, respectivamente.
gf_point(Y ~ X, data = data_set, color, shape, size)
Para alterar los símbolos que denotan los puntos en una gráifca de dispersión, fijamos el parametro shape
a algún número o caracter mostrado abajo.
Siguiendo con el principio 3, puedes usar funciones antes vistas para mejorar aún más la apariencia del gráfico.
mi_diagrama = gf_point(mpg ~ weight, data = auto_data, color = "darkblue", size = 2, linetype = 1) + labs(title = "Relación de peso y millas por galón en autos", x = "Peso (lb)", y = "Millas por galón")
mi_diagrama = mi_diagrama + theme(axis.text=element_text(size=20), axis.title=element_text(size=20),
plot.title=element_text(size=25))
mi_diagrama
En la gráfica anterior, el valor mínimo del eje vertical está alrededor de 10. Para ajustar el valor mínimo en ese eje a 0 usamos el comando adicional mostrado abajo.
De ser necesario, también podemos ajustar el eje horizontal para mostrar el 0 también.
Las gráficas individuales de variables (como el histograma) no permiten estudiar la relación entre dos variables. Solo dan información de la distribución cada variable.
histogram_mpg = gf_histogram( ~ mpg, data = auto_data, fill = "darkblue", color = "black")
histogram_mpg = histogram_mpg + labs(title = "Distribución de milas por galón", x = "Millas por galón", y = "Frecuencia")
histogram_mpg = histogram_mpg + theme(axis.text=element_text(size=20), axis.title=element_text(size=20),
plot.title=element_text(size=25))
histogram_mpg
histogram_weight = gf_histogram( ~ weight, data = auto_data, fill = "darkblue", color = "black")
histogram_weight = histogram_weight + labs(title = "Distribución de peso", x = "Peso (lb)", y = "Frecuencia")
histogram_weight = histogram_weight + theme(axis.text=element_text(size=20), axis.title=element_text(size=20), plot.title=element_text(size=25))
histogram_weight
Una gráfica de línea es una representación visual de datos en la que puntos de datos están conectados por una línea. Ejes:
Cada punto representa un valor en un momento dado.
El objetivo es explorar tendencias a lo largo del tiempo o la evolución de una variable continua.
Considera los datos en el archivo “spotify.xlsx”. El conjunto de datos de este contiene las reproducciones diarias globales de las cinco canciones más populares en el servicio de transmisión de música Spotify en el 2017.
# A tibble: 3 × 7
Date Day `Shape of You` Despacito `Something Just Like This`
<dttm> <dbl> <dbl> <dbl> <dbl>
1 2017-01-06 00:00:00 1 12287078 NA NA
2 2017-01-07 00:00:00 2 13190270 NA NA
3 2017-01-08 00:00:00 3 13099919 NA NA
# ℹ 2 more variables: HUMBLE. <dbl>, Unforgettable <dbl>
Nos enfocaremos en la canción Despacito de Luis Fonsi. Para construir gráficas de dispersión, usamos la función gf_line(Y ~ X, data = data_set)
.
Podemos cambiar varios aspectos de la gráfica usando argumentos adicionales linetype
, size
, y color
.
gf_line(Y ~ X, linetype, size, color, data = data_set)
.
mi_linea = gf_line(Despacito ~ Date, data = spotify_data, color = "darkblue", size = 1.3) + labs(title = "Popularidad de la canción despacito de Luis Fonsi", x = "Fecha", y = "Número de reproducciones en Spotify")
mi_linea = mi_linea + theme(axis.text=element_text(size=20), axis.title=element_text(size=18),
plot.title=element_text(size=25))
mi_linea
Para cambiar el tipo de linea, fijamos el parametro linetype
a algún número o palabra mostrada abajo.
Para examinar la relación entre una variable numérica y una categórica, usamos la variable categórica para dividir los datos en grupos. Así comparamos la distribución de la variable numérica entre estos grupos.
En este contexto:
La gráfica de cajas lado al lado es la más efectiva para estudiar la relación entre una variable categórica y una numérica.
La gráfica de cajas lado a lado compara la distribución de una variable en diferentes grupos.
La gráfica se obtiene con la función
gf_boxplot(Y ~ X, data = dataset)
.
Por ejemplo, si queremos comparar las distribuciones de las millas por galón de los autos construídos en America, Europa, o Japón, usamos el siguiente comando:
bp_mpg_by_origin = gf_boxplot(mpg ~ origin, data = auto_data, fill = "lightblue", color = "black")
bp_mpg_by_origin = bp_mpg_by_origin + labs(y = "Millas por galón", x = "Origen")
bp_mpg_by_origin = bp_mpg_by_origin + theme(axis.text=element_text(size=20), axis.title=element_text(size=20))
bp_mpg_by_origin
También, podemos cambiar el formato de los puntos atípicos usando los argumentos outlier.color
, outlier.shape
, y outlier.size
.
bp_mpg_by_origin = gf_boxplot(mpg ~ origin, data = auto_data, fill = "lightblue",
color = "black", outlier.color = "red",
outlier.shape = 4, outlier.size = 4)
bp_mpg_by_origin = bp_mpg_by_origin + labs(y = "Millas por galón", x = "Origen")
bp_mpg_by_origin = bp_mpg_by_origin + theme(axis.text=element_text(size=20), axis.title=element_text(size=20))
bp_mpg_by_origin
Alternativamente, podemos resumir los valores de la variable numérica \(Y\) para cada categoría de la variable \(X\) usando la mediana o el promedio.
Por ejemplo, gráfiquemos el promedio de millas por galón de los autos producidos en America, Europa, y Japón. Para esto, primero calculamos el promedio por cada categoría usando group_by()
y summarise()
.
Los datos a graficar son:
# A tibble: 3 × 2
origin Promedio.mpg
<chr> <dbl>
1 American 20.1
2 European 27.9
3 Japanese 30.5
Dos tipos de visualizaciones comúnes para graficar una variable numérica y una discreta cuando cada solo hay un valor de la variable categorica por categoría son:
La gráfica de puntos de Cleveland codifica datos cuantitativos en distintas categorías. Es una alternativa a un gráfico de barras. Se obtiene con la función gf_point()
.
Aplicamos el Principio 3 mejorar la gráfica.
gf_point(origin ~ Promedio.mpg, size = 10, color = "pink", data = resumen_autos) +
labs(y = "Origen", x = "Promedio de Millas por Galón",
title = "Comparación de autos de diferences regiones") +
scale_x_continuous(limits = c(0, 35)) +
theme_bw() +
theme(axis.text=element_text(size=20), axis.title=element_text(size=20),
plot.title=element_text(size=20))
Para hacer una gráfica de barras donde la longitud de la barra sea igual a un valor específico, usamos la función gf_col()
de la librería ggformula.
Podemos usar comandos similares a la gráfica de puntos de Cleveland para mejorar la gráfica de barras.
gf_col(origin ~ Promedio.mpg, fill = "pink", data = resumen_autos) +
labs(y = "Origen", x = "Promedio de Millas por Galón",
title = "Comparación de autos de diferences regiones") +
theme_bw() +
theme(axis.text=element_text(size=20), axis.title=element_text(size=20),
plot.title=element_text(size=20))
Con dos variables categóricas, comparamos la distribución de una variable entre subgrupos definidos por la otra variable.
De hecho, mantenemos constante una variable y trazamos la distribución de la otra.
Para hacer esto, los gráficos más populares son una extensión de las gráficas de barras:
Como ejemplo, consideremos los datos en el archivo “penguins.xlsx”.
# A tibble: 6 × 8
species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 Adelie Torgersen 39.1 18.7 181 3750
2 Adelie Torgersen 39.5 17.4 186 3800
3 Adelie Torgersen 40.3 18 195 3250
4 Adelie Torgersen NA NA NA NA
5 Adelie Torgersen 36.7 19.3 193 3450
6 Adelie Torgersen 39.3 20.6 190 3650
# ℹ 2 more variables: sex <chr>, year <dbl>
Los datos tienen dos variables categóricas:
species
).island
).¡Asegúrate que sean especificados como factor
en R!
La gráfica de barras lado al lado se genera con la función gf_bar()
, asignando la variable \(X\) al argumento fill
.
El nombre de la variable debe de estar precedido por una tilde ~X
.
La gráfica muestra la frecuencia de cada especie, separada por el nombre de la isla.
Una alternativa a la gráfica anterior es poner las barras lado al lado para las categorías de la variable \(X\).
En este caso, se usan los mismos comandos con un argumento extra: position = position_dodge()
.
La principal diferencia entre los gráficos de barras apiladas y de lado a lado es que el gráfico de lado a lado muestra los valores en barras separadas dentro de una categoría.
Ventajas de barras apiladas:
Es más fácil entender qué proporciones de un todo se dividen entre segmentos.
Agrega visualmente cada proporción.
Ventajas de barras lado a lado:
Es más fácil comparar las alturas de cada entidad individual.
Mejor para comparar entre grupos.
Para variables categóricas, los resúmenes estadísticos más comunes son la frecuencia y la frecuencia relativa.
Con dplyr, calculamos la frecuencia usando la función count()
, que cuenta los valores únicos de una o más variables.
Para calcular la frecuencia relativa, usamos mutate()
junto con la función prop.table()
, que calcula las proporciones de una columna.
tabla.resumen = penguins_data %>%
count(island, species) %>%
group_by(island)
tabla.resumen %>% mutate("Proporción" = prop.table(n))
# A tibble: 5 × 4
# Groups: island [3]
island species n Proporción
<fct> <fct> <int> <dbl>
1 Biscoe Adelie 44 0.262
2 Biscoe Gentoo 124 0.738
3 Dream Adelie 56 0.452
4 Dream Chinstrap 68 0.548
5 Torgersen Adelie 52 1
Cuando examinamos una distribución o relación, a menudo queremos compararla entre subgrupos de datos.
Este proceso de condicionamiento sobre variables adicionales conduce a visualizaciones que involucran tres o más variables.
Aquí explicamos cómo crear gráficas para visualizar múltiples variables.
Para dos variables numéricas y una categórica.
La gráfica de facetas visualiza la relación o distribución de una o dos variables para cada subgrupo definido por una tercera variable \(Z\).
Idea: Crear una gráfica para cada subgrupo de \(Z\).
La función produce una rejilla con 1 columna y 3 filas de gráficas. Cada fila acomoda una categoría de origin
.
Si cambiamos el orden de la variable origin
en la función gf_facet_grid
, obtenemos una rejilla de gráficas con tres columnas y una fila de gráficas.
Podemos utilizar las funciones gf_line()
y gf_facet_grid()
para visualizar la evolución de las reproducciones de las 5 canciones en el archivo “spotify.xlsx” a través del tiempo.
Sin embargo, requerimos manipular los datos para obtener el formato requerido por estas funciones.
En el formato para una gráfica de varias, necesitamos juntar las columnas Shape of You
, Despacito
, Something Just Like This
, HUMBLE
y Unforgettable
en dos columnas.
Una columna contendrá el número de reproducciones y la otra el título de la canción.
Ambas columnas estarán ordenadas por la variable Date
.
tidyr permite remodelar y reagrupar un conjunto de datos.
Es parte de una colección de paquetes de ciencia de datos llamado tidyverse.
Cárgala en Google Colab con el siguiente código.
Para hacer el formateo necesario, usamos la función pivot_longer()
de la librería tidyr.
data_lines = spotify_data %>%
pivot_longer(c("Shape of You", "Despacito", "Something Just Like This",
"HUMBLE.", "Unforgettable"),
names_to = "Cancion",
values_to = "Reproducciones")
data_lines %>% head()
# A tibble: 6 × 4
Date Day Cancion Reproducciones
<dttm> <dbl> <chr> <dbl>
1 2017-01-06 00:00:00 1 Shape of You 12287078
2 2017-01-06 00:00:00 1 Despacito NA
3 2017-01-06 00:00:00 1 Something Just Like This NA
4 2017-01-06 00:00:00 1 HUMBLE. NA
5 2017-01-06 00:00:00 1 Unforgettable NA
6 2017-01-07 00:00:00 2 Shape of You 13190270
Ahora, aplicamos funciones similares sobre el objeto data_lines
.
O podemos poner todas las lineas en una sola gráfica.
Es una forma especializada de la gráfica de líneas, donde conectamos los puntos con una línea continua y rellenamos la región debajo de esa línea con un color sólido. Se genera usando la función gf_area()
de ggformula.
Además de las funciones antes vistas, podemos hacer las areas trasnparentes usando el parametro alpha
.
Una gráfica común para 4 variables es la gráfica de dispersión, donde el color y el tamaño de los símbolos dependen de dos variables categóricas.
https://www.mosaic-web.org/ggformula/articles/pkgdown/ggformula-long.html
Tecnológico de Monterrey