library(tidyverse) library(datos) # Objetivos de un Análisis Exploratorio de Datos # 1) Estudiar el comportamiento (varianza) de cada variable # 2) Estudiar la interacción entre distintas variables ggplot(data = diamantes) + geom_bar(mapping = aes(x = corte)) ggplot(data = diamantes) + geom_histogram(mapping = aes(x = quilate), binwidth = 0.5) pequenos <- diamantes %>% filter(quilate < 3) # Cuiado que no se nos escape info al agrupar demasiado grueso ggplot(data = pequenos, mapping = aes(x = quilate)) + geom_histogram(binwidth = 0.1) ggplot(data = pequenos, mapping = aes(x = quilate, colour = corte)) + geom_freqpoly(binwidth = 0.1) ggplot(data = pequenos, mapping = aes(x = quilate)) + geom_histogram(binwidth = 0.01) # No siempre tenemos datos con forma de campana ggplot(data = fiel, mapping = aes(x = erupciones)) + geom_histogram(binwidth = 0.25) # Valores atípicos ggplot(diamantes) + geom_histogram(mapping = aes(x = y), binwidth = 0.5) # El rango del eje x sugiere que hay datos grandes, pero no se ven ggplot(diamantes) + geom_histogram(mapping = aes(x = y), binwidth = 0.5) + coord_cartesian(ylim = c(0, 50)) # ahora sí! # Esto nos permite encontrar características que permitan filtrarlos y estudiarlos inusual <- diamantes %>% filter(y < 3 | y > 20) %>% # El complemento es el rango usual, según el histograma select(precio, x, y, z) %>% arrange(y) inusual # medidas iguales a 0?? # Queremos entender a los datos atípicos. No siempre son errores al pasar los datos. # No siempre queremos eliminaros de la base de datos. # Si los eliminamos, tiene que estar debidamente justificado. # Datos faltantes # Podemos eliminar las filas con datos atípicos de 'y' diamantes2 <- diamantes %>% filter(between(y, 3, 20)) # Capaz queremos modificar los valores erroneos anteriores con NA diamantes2 <- diamantes %>% mutate(y = ifelse(y < 3 | y > 20, NA, y)) ggplot(data = diamantes2, mapping = aes(x = x, y = y)) + geom_point() # Observar que ggplot devuelve warnings cuando deja de graficar puntos por datos faltantes # Si queremos explicitar que ignoramos los NA: ggplot(data = diamantes2, mapping = aes(x = x, y = y)) + geom_point(na.rm = TRUE) # A veces queremos eliminar todos los datos faltantes bateadores %>% na.omit() %>% summarise_all(is.na) %>% summarise_all(sum) bateadores %>% filter_at(vars(bases_robadas, atrapado_robando), any_vars(!is.na(.))) %>% summarise_all(is.na) %>% summarise_all(sum) # Covariación # Cómo interactúan distintas variables entre sí? # Cómo visualizar una variable continua junto con una discreta? ggplot(data = diamantes, mapping = aes(x = precio)) + geom_freqpoly(mapping = aes(colour = corte), binwidth = 500) # Es un poco complicado comparar porque los grupos de 'corte' son de distintos tamaños ggplot(data = diamantes, mapping = aes(x = precio, y = ..density..)) + geom_freqpoly(mapping = aes(colour = corte), binwidth = 500) # Usando proporciones lo solucionamos ggplot(data = diamantes, mapping = aes(x = precio, y = ..density..)) + geom_histogram(mapping = aes(fill = corte), binwidth = 50, position = 'stack') ggplot(data = diamantes, mapping = aes(x = precio, y = ..density..)) + geom_histogram(mapping = aes(fill = corte), binwidth = 50, position = 'identity', alpha = 0.2) ggplot(data = diamantes, mapping = aes(x = precio, y = ..density..)) + geom_histogram(mapping = aes(fill = corte), binwidth = 100, position = 'fill') # Los boxplot son una herramienta muy usada para visualizar ggplot(data = diamantes, mapping = aes(x = corte, y = precio)) + geom_boxplot() # Usamos el orden normal de la variable 'corte': de peor a mejor ggplot(data = diamantes) + geom_boxplot(mapping = aes(x = reorder(corte, precio, FUN = median), y = precio)) # En caso que queramos estudiar el crecimiento de las medianas de los grupos # Cómo visualizar dos variables discretas? ggplot(data = diamantes) + geom_count(mapping = aes(x = corte, y = color)) # Calcular tablas es una buena manera de visualizar diamantes %>% count(color, corte) diamantes %>% count(color, corte) %>% ggplot(mapping = aes(x = color, y = corte)) + geom_tile(mapping = aes(fill = n)) # Similar a geom_count, pero con colores. # Cómo visualizar dos variables continuas? # Scatterplot es una opción ggplot(data = diamantes) + geom_point(mapping = aes(x = quilate, y = precio), alpha = 1 / 100) # Otra alternativa a usar alpha ggplot(data = pequenos) + geom_bin2d(mapping = aes(x = quilate, y = precio)) # Si solo agrupamos en una coordenada, podemos usar boxplots ggplot(data = pequenos, mapping = aes(x = quilate, y = precio)) + geom_boxplot(mapping = aes(group = cut_width(quilate, 0.1))) # pero algunos grupos pueden quedar subrepresentados, dependiendo # de la distribución en el eje x # Con esta variatne, solucionamos la representación, pero puede quedar medio feo ggplot(data = pequenos, mapping = aes(x = quilate, y = precio)) + geom_boxplot(mapping = aes(group = cut_number(quilate, 20)))