class: center, middle, titular background-size: contain <img style="border-radius: 50%;" src="img/masapp.jpg" width="250px"/> # Capítulo 4: Análisis exploratorio de datos ## **CAPACITACIÓN** #### LINDA CABRERA ORELLANA #### Mayo, 2023 --- .pull-left[ # Contenido del Capítulo 4 - Análisis exploratorio de datos * Variables numéricas * Variables categóricas * Varias variables numéricas * Variables numéricas con una categórica - Gráficos dinámicos con `plotly` ] .pull-right[ # Paquetes a utilizar *
`library(tidyverse)` *
`library(readr)` *
`library(dplyr)` *
`library(ggplot2)` *
`library(magrittr)` *
`library(plotly)` *
`library(RColorBrewer)` *
`library(scales)` ] --- class: middle, center, inverse
# Análisis exploratorio de datos --- ## Análisis exploratorio de datos El análisis exploratorio es un enfoque en el que se "deja hablar a los datos" para que ellos nos den las pistas necesarias para construir modelos o incluso desarrollar supuestos o conclusiones. Conocer los datos "como a la palma de tu mano", este es el primer beneficio del EDA, algo útil seas analista comercial, de marketing, científico, ingeniero o cualquier puesto donde analizar datos sea fundamental. Por conocer, nos referimos a: Comprende las correlaciones entre los elementos, descubrir la estructura subyacente de los datos, detectar valores atípicos y anomalías, etc. Por "dejar a los datos hablar" nos referimos a permitir que los datos sugieran los modelos que se adaptan mejor a ellos datos, encontrar variables importantes o más relacionadas, desarrollar modelos parsimoniosos, etc. --- ## Análisis exploratorio de datos - Permite entender los datos - Sirve para examinar las variables y sus interacciones antes de aplicar las técnicas - Es util para encontrar errores en el set de datos - Se realiza mediante estadísticos descriptivos y principalmente gráficos - Suele ser un proceso iterativo: - se plantea una pregunta - se grafica o se crea una tabla para responder - se obtiene una idea o una nueva pregunta del paso anterior - Proporciona pistas o intuición --- ## Variables numéricas .pull-left[ ### Histograma de frecuencias Para explorar variables continuas graficaremos un histograma de frecuencias con `geom_histogram()`. ```r ventas %>% filter(PROVINCIA == "GALAPAGOS") %>% ggplot(aes(x = COMPRAS_RISE)) + geom_histogram(binwidth = 50000, color = "black", fill = "chartreuse4") ``` ] .pull-right[ <!-- --> ] --- ## Variables numéricas .pull-left[ ### Polígono de frecuencias Para explorar variables continuas también podemos usar un polígono de frecuencias con `geom_frefreqpoly()`. Es más útil si lo usamos junto al `geom_histogram()`. ```r ventas %>% filter(PROVINCIA == "GALAPAGOS") %>% ggplot(aes(x = COMPRAS_RISE)) + geom_histogram(binwidth = 50000, color = "black", fill = "chartreuse4") + geom_freqpoly(binwidth = 50000, linewidth = 1, color = "chocolate1") ``` ] .pull-right[ <!-- --> ] --- ## Variables numéricas .pull-left[ ### Gráfico de texto Para explorar variables continuas también podemos usar un gráfico de texto con `geom_text()`. En este caso lo usaremos para ubicar las etiquetas a los gráficos anteriores junto al `geom_histogram()` y `geom_freqpoly()`. ```r ventas %>% filter(PROVINCIA == "GALAPAGOS") %>% ggplot(aes(x = COMPRAS_RISE)) + geom_histogram(binwidth = 50000, color = "black", fill = "chartreuse4") + geom_freqpoly(binwidth = 50000, linewidth = 1, color = "chocolate1") + geom_text(stat = "bin", # para usar binwidth binwidth = 50000, aes(label=stat(round(count,2)), # etiquetas de los textos y=stat(count)), nudge_y = 30, # posición de etiquetas color = "grey50", size = 3) ``` ] .pull-right[ <!-- --> ] --- ## Variables numéricas .pull-left[ ### Gráfico de cajas El gráfico de cajas permite conocer cómo se distribuyen los datos dentro de una variable. En R lo obtenemos con un `geom_boxplot()` y la información que se representa en el diagrama de cajas es la siguiente: - **Mediana.** Punto medio de los valores ordenados de menor a mayor o de mayor a menor representando el 50% de los datos. - **Cuartiles.** Dividen al conjunto de observaciones en 4 partes iguales. El `\(Q_1\)` representa el 25% de las observaciones y el `\(Q_3\)` representa el 75% de las observaciones. - **Rango Intercuartílico (RIC).** Es la diferencia entre el tercer y el primer cuartil. ] .pull-right[ <img src="img/boxplot.png" width="600px"/> ] --- ## Variables numéricas .pull-left[ ### Gráfico de cajas El gráfico de cajas permite visualizar los quartiles de nuestra variable: ```r ventas %>% filter(PROVINCIA == "GALAPAGOS") %>% ggplot(aes(x = COMPRAS_RISE, y="")) + geom_boxplot(fill = "chocolate1") ``` ] .pull-right[ <!-- --> ] --- ## Variables numéricas .pull-left[ ### Diagrama de violín A nuestro boxplot le podemos agregar capas como violín que grafica la concentración de las observaciones: ```r ventas %>% filter(PROVINCIA == "GALAPAGOS") %>% ggplot(aes(x = COMPRAS_RISE, y="")) + geom_boxplot(fill = "chocolate1") + geom_violin(fill = "chartreuse4", alpha = 0.3, color = NA) ``` ] .pull-right[ <!-- --> ] --- ## Variables categóricas .pull-left[ ### Gráfico de barras ```r ventas %>% filter(PROVINCIA == "GALAPAGOS") %>% ggplot(aes(x = CANTON)) + geom_bar() ``` ] .pull-right[ <!-- --> ] --- ## Variables categóricas .pull-left[ ### Gráfico de barras apiladas ```r ventas %>% filter(PROVINCIA == "GALAPAGOS") %>% group_by(CANTON) %>% summarise(Frec = n()) %>% arrange(-Frec) %>% mutate(Prop= round((Frec/ sum(Frec)),3), PosLab= cumsum(Prop) - 0.6*Prop) %>% ggplot(aes(x = "", y=Prop, fill = reorder(CANTON, Frec))) + geom_bar(stat = "identity", color="white") + geom_text(aes(y = PosLab, label = scales::percent(Prop)), color = "white", size = 6, nudge_x = 0.2) + scale_y_continuous(label= percent_format()) + labs(title = "Cantidad de transacciones globales por provincia", fill = "Provincia", x = "", y = "") + theme(text = element_text(colour = "grey45", size = 10), plot.title = element_text(face = "bold", size = 14, colour = "grey30"), plot.background = element_rect(fill = "grey92"), panel.grid.minor = element_blank(), panel.grid.major = element_blank(), axis.text.x = element_blank(), legend.position = "bottom", legend.background = element_blank(), legend.key = element_rect(fill = "grey92", color = "grey92")) ``` ] .pull-right[ <!-- --> ] --- ## Varias Variables numéricas .pull-left[ ### Gráfico de dispersión El gráfico de dispersión se usa para identificar la intensidad de la _relación entre dos variables numéricas_. El eje `\(x\)` representa la variable independiente, mientras que el eje `\(y\)` representa la variable dependiente. En R lo generamos con `geom_point()`. Si no existe una variable dependiente, cualquier variable se puede representar en cada eje y el diagrama de dispersión mostrará el **grado de correlación (no causalidad)** entre las dos variables. Un diagrama de dispersión puede sugerir varios tipos de **correlaciones** entre las variables con un intervalo de confianza determinado (Ver siguiente página). Con `geom_smooth()` se puede dibujar una línea de ajuste (llamada también "línea de tendencia") con el fin de estudiar la correlación entre las variables. ] .pull-right[ <img src="img/dispersion.png" width="600px"/> ] --- ## Varias Variables numéricas .pull-left[ ### Gráfico de dispersión Cuando hay mucha superposición de los puntos es mejor agregar transparencia a los datos: ```r # transaparencia de puntos con alpha ventas %>% filter(PROVINCIA == "GALAPAGOS") %>% ggplot(aes(x = TOTAL_VENTAS, y = TOTAL_COMPRAS)) + geom_point(alpha = 0.2) ``` ] .pull-right[ <!-- --> ] --- ## Varias Variables numéricas .pull-left[ ### Gráfico smooth Este gráfico `geom_smooth()` agrega una línea de tendencia sobre una gráfica existente: ```r # agregamos una línea de suavizado para ver la tendencia ventas %>% filter(PROVINCIA == "GALAPAGOS") %>% ggplot(aes(x = TOTAL_VENTAS, y = TOTAL_COMPRAS)) + geom_point(alpha = 0.2) + geom_smooth() ``` ] .pull-right[ <!-- --> ] --- ## Variables numéricas con una categórica .pull-left[ ### Gráfico de densidad Un gráfico de densidad visualiza la distribución de datos cuantitativos en un intervalo o período de tiempo continuo. Este gráfico es una variación de un histograma que usa suavizado de kernel para trazar valores, lo que permite distribuciones más suaves suavizando el ruido. En R lo generamos con `geom_density()`: ```r ## gráfico de densidad con transparencia ventas %>% filter(PROVINCIA == "GALAPAGOS" & TOTAL_VENTAS < 1000000) %>% ggplot(aes(x = TOTAL_VENTAS, fill = CANTON)) + geom_density(alpha = 0.4) + labs(x = "Total de Ventas (USD)", y = "Densidad", title = "Total de Ventas - Densidad", fill = "Canton") ``` ] .pull-right[ <!-- --> ] --- ## Variables numéricas con una categórica .pull-left[ ### Gráfico de líneas verticales Podemos agregar estadísticos al gráfico de densidad mediante un gráfico de líneas verticales con `geom_vline()`: ```r ## calculando estadísticos para el gráfico ventas_medias <- ventas %>% filter(PROVINCIA == "GALAPAGOS" & TOTAL_VENTAS < 1000000) %>% group_by(CANTON) %>% summarise(MEDIA = mean(TOTAL_VENTAS, na.rm= TRUE)) ## agregamos geom_vline() ventas %>% filter(PROVINCIA == "GALAPAGOS" & TOTAL_VENTAS < 1000000) %>% ggplot(aes(x = TOTAL_VENTAS, fill = CANTON)) + geom_density(alpha = 0.4) + geom_vline(data = ventas_medias, aes(xintercept = MEDIA, colour= CANTON), linetype= "dashed", size= 1) + labs(x = "Total de Ventas (USD)", y = "Densidad", title = "Total de Ventas - Densidad", fill = "Canton") ``` ] .pull-right[ <!-- --> ] --- ## Variables numéricas con una categórica .pull-left[ ### Gráfico de texto Podemos agregar estadísticos al gráfico de densidad y de líneas verticales con `geom_text()`: ```r ## incluir los valores de medias en texto con geom_text() ventas %>% filter(PROVINCIA == "GALAPAGOS" & TOTAL_VENTAS < 1000000) %>% ggplot(aes(x = TOTAL_VENTAS, fill = CANTON)) + geom_density(alpha = 0.4) + geom_vline(data = ventas_medias, aes(xintercept = MEDIA, colour= CANTON), linetype= "dashed", size= 1) + geom_text(data = ventas_medias, aes(x=MEDIA-10000, label= paste("Media: USD ", round(MEDIA,2)), y=0.000005, colour= CANTON), angle=90, size = 3) + labs(x = "Total de Ventas (USD)", y = "Densidad", title = "Total de Ventas - Densidad", fill = "Canton") ``` ] .pull-right[ <!-- --> ] --- class: middle, center, inverse
# Gráficos dinámicos con `plotly` --- ## Gráficos html .pull-left[ Web oficial: [https://plotly.com/r/](https://plotly.com/r/) ```r library(plotly) ## gráfico dinámico de un gráfico de densidad g1 <- ventas %>% filter(PROVINCIA == "GALAPAGOS" & TOTAL_VENTAS < 1000000) %>% ggplot(aes(x = TOTAL_VENTAS, fill = CANTON)) + geom_density(alpha = 0.4) + labs(x = "Total de Ventas (USD)", y = "Densidad", title = "Total de Ventas - Densidad", fill = "Canton") ggplotly(g1) ``` ] .pull-right[
] --- class: middle, center, inverse <br> <br> # Gramática de gráficos con `ggplot2` ## **CAPÍTULO 4** <br> <br> .center[ ### [@MasappEC
](https://www.facebook.com/MasappEC/) ### [@Masappdata
](https://twitter.com/Masappdata) ] .pull-right[ Para dudas y preguntas:
Linda Cabrera O. (+34 924 609 588) ]