La exploración de datos es el primer paso del análisis de datos que se utiliza para explorar y visualizar datos que permite descubrir conocimientos desde el mismo inicio o identificar áreas o patrones para profundizarlos más.
¿Cuál es el objetivo del análisis exploratorio?
El análisis exploratorio tiene como objetivo identificar el modelo teórico más adecuado para representar la población de la cual proceden los datos muestrales
Dicho análisis se basa en gráficos y estadísticos que permiten explorar la distribución identificando características tales como: valores atípicos o outliers, saltos o discontinuidades, concentraciones de valores, forma de la distribución, entre otros.
El principal propósito del análisis exploratorio es tener una idea completa de cómo son nuestros datos, antes de decidir qué técnica de Ciencia de Datos o de Machine Learning usaremos. Y como en la práctica los datos no son ideales, debemos organizarlos, entender su contenido, entender cuáles son las variables más relevantes y cómo se relacionan unas con otras, comenzar a ver algunos patrones, determinar qué hacer con los datos faltantes y con los datos atípicos para finalmente extraer conclusiones acerca de todo este análisis.
En resumen una forma de entender, visualizar y extraer información relevante del set de datos para decidir cuál será la ruta o técnica más adecuada para su posterior procesamiento.
Visualización de datos puede significar dos cosas:
visualizar datos para uno mismo, así que sinónimo de eso es el análisis exploratorio de datos,
o visualizarlo para otros Es decir hacer buenos gráficos que las personan puedan comprender.
Podemos trabajar en el análisis exploratorio de datos, buscando saber algo más de probabilidad y algo más de estadística para buscar patrones entre variables. Una parte muy importante de la exploración de datos es entender cómo es la relación entre x e y
Variable es una cantidad, cualidad o propiedad que se puede medir.
Valor es el estado de una variable cuando se mide. El valor de una variable puede cambiar de una medida a otra.
Observación es un conjunto de mediciones realizadas en condiciones similares (por lo general, realiza todas las mediciones en una observación al mismo tiempo y en el mismo objeto). Una observación contendrá varios valores, cada uno asociado con una variable diferente.
Datos tabulares son un conjunto de valores, cada uno asociado con una variable y una observación. Los datos tabulares están ordenados si cada valor se coloca en su propia “celda”, cada variable en su propia columna y cada observación en su propia fila.
A la exploración de datos -EDA - podemos separarla en tres grandes fases: una de transformación de datos, otra de generar tablas resumen y otra de gráficas. Ahora, esto en R lo podemos ver utilizando los paquetes tidyr y dplyr para la transformación y limpieza de datos y ggplot para visualizaciones.
Etapas EDA
Utilizaremos el dataset, “Bihar:sample_data.csv” para analizar la altura de las mujeres en Bihar, en el estado de India. Para ello, necesitaremos los siguientes paquetes:
# Visualización de gráficos con ggplot
library(ggplot2)
# Limpiieza de datos
library(dplyr)
# Formado csv lectura
library(csvread)
Abrimos el archivo:
#Miramos los datos y comprendemos algunas características
bihar_data<-read.csv("data/Bihar_sample_data.csv")
str(bihar_data)
#> 'data.frame': 39553 obs. of 6 variables:
#> $ personid : int 11010101 11010102 11010103 11010104 11010105 11010201 11010202 11010203 11010204 11010205 ...
#> $ female : int 0 0 1 0 1 0 1 0 0 1 ...
#> $ adult : int 1 1 1 0 0 1 1 0 0 0 ...
#> $ age : num 70 32 28 12 11 38 30 15 10 16 ...
#> $ height_cm: num 164 157 150 146 135 ...
#> $ weight_kg: num 48.9 44 37.7 30.7 30.2 67.7 57.3 59.3 40.7 43.9 ...
Analizamos más sus variables:
summary(bihar_data)
#> personid female adult age
#> Min. :11010101 Min. :0.0000 Min. :0.0000 Min. : 0.00
#> 1st Qu.:14142114 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.: 9.00
#> Median :18011402 Median :1.0000 Median :1.0000 Median : 20.00
#> Mean :17674861 Mean :0.5136 Mean :0.5518 Mean : 26.29
#> 3rd Qu.:21181403 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.: 40.00
#> Max. :24282407 Max. :1.0000 Max. :1.0000 Max. :115.00
#> NA's :1 NA's :14 NA's :14
#> height_cm weight_kg
#> Min. : 1.0 Min. : 1.00
#> 1st Qu.:132.9 1st Qu.: 24.80
#> Median :149.4 Median : 41.60
#> Mean :142.8 Mean : 39.14
#> 3rd Qu.:159.0 3rd Qu.: 50.60
#> Max. :195.5 Max. :141.70
#> NA's :6415 NA's :6063
Elegimos variables a trabajar, ya que queremos analizar la altura de adultos femeninos:
#Mantenemos solo los adultos femeninos
bihar_adult_females <- filter(bihar_data, adult==1, female==1)
#> personid female adult age height_cm weight_kg
#> 1 11010103 1 1 28 150.3 37.7
#> 2 11010202 1 1 30 139.7 57.3
#> 3 11010207 1 1 35 147.5 38.9
#> 4 11010302 1 1 48 145.2 35.7
#> 5 11010303 1 1 22 NA NA
#> 6 11010306 1 1 18 NA NA
Tenemos los datos, ahora podemos explorar:
Realizamos el histograma:
#> Warning: Removed 1432 rows containing non-finite values (`stat_bin()`).
Un histograma es un gráfico que se utiliza para representar la distribución de frecuencias de algunos puntos de datos de una variable. Los histogramas frecuentemente clasifican los datos en varios “contenedores” o “grupos de rango” y cuentan cuántos puntos de datos pertenecen a cada uno de esos contenedores.
Características:
Un histograma es una estimación aproximada de la distribución de probabilidad función de una variable continua.
Lo obtenemos agrupando los datos (típicamente en contenedores de igual tamaño) y simplemente contando el número de observaciones dentro cada contenedor.
Gráfico de un histograma: Dibujamos, para cada bin, un rectángulo proporcional al número de tales casos.
También puede dividir por el número total de observaciones para obtener la densidad: la proporción de casos que dentro de cada compartimiento.
¿ Qué representa cada uno de estos contenedores?
Aqui, utilizamos un histograma para la altura de una mujer en Bihar, estado en India. Cada uno de estos contenedores, barras del histograma, es proporcional al número de mujeres que tienen ese tamaño de altura. Podemos representar conteo o densidad. En densidad se puede tener la proporción del número de observaciones que cae adentro. Así que todo lo que haríamos aquí es que ellos tienen exactamente la misma forma. Pero en lugar de ser 0, 500, 1000, etcétera seria un numero entre 0 y 1 que representan la fracción de mujeres que, de las observaciones que caen dentro de este contenedor. Así que cada uno de estos marcadores aquí se dividirá por la población en general.
El histograma generado, no permite ver en detalle. Por lo que ajustamos el gráfico.
Filtramos:
Agregamos detalles para que sea más visible:
ggplot(bihar_adult_females_trunc, aes(height_cm))+
geom_histogram(fill="blue", color="darkblue")+
xlab("Altura en Centímetro, Bihar Females")
Jugamos con los contenedores
#Playing with bins
bihar1 <- ggplot(bihar_adult_females_trunc, aes(height_cm))+
geom_histogram(fill="blue", color="darkblue", binwidth = 5)+
xlab("bin width=5")+
ylab("")
bihar2 <- ggplot(bihar_adult_females_trunc, aes(height_cm))+
geom_histogram(fill="blue", color="darkblue", binwidth = 10)+
xlab("bin width=10")+
ylab("")
bihar3 <- ggplot(bihar_adult_females_trunc, aes(height_cm))+
geom_histogram(fill="blue", color="darkblue", binwidth = 20)+
xlab("bin width=20")+
ylab("")
bihar4 <- ggplot(bihar_adult_females_trunc, aes(height_cm))+
geom_histogram(fill="blue", color="darkblue", binwidth = 50)+
xlab("bin width=50")+
ylab("")
Altura de Mujeres en Bihar
plot_grid(bihar1, bihar2, bihar3, bihar4, labels="Altura de Mujeres en Bihar", hjust=-1, vjust=0.2)
Lo mismo exploramos para las mujeres en USA
us_data <- read.csv("data/US_sample_data.csv")
Vemos un poco más las características del dataset
us_adult_females_trunc <- filter(us_data,female==1 , adult==1, height_cm>120 , height_cm<200)
Generamos el gráfico
ggplot(us_adult_females_trunc, aes(height_cm))+
geom_histogram(fill="red", color="darkred")+
xlab("Height in centimeters, US females")
ggplot(us_adult_females_trunc, aes(height_cm))+
geom_histogram(data=us_adult_females_trunc, aes(height_cm , ..density..), fill="white" , color="darkred")+
geom_density(kernel="gaussian", aes(height_cm))
#> Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
#> ℹ Please use `after_stat(density)` instead.
Jugamos con los contenedores
US1 <- ggplot(us_adult_females_trunc, aes(height_cm))+
geom_histogram(data=us_adult_females_trunc, aes(height_cm , ..density..), fill="white" , color="darkred")+
geom_density(kernel="gaussian", aes(height_cm), bw=1)+
xlab("bw=1")+
ylab("")
US2 <- ggplot(us_adult_females_trunc, aes(height_cm))+
geom_histogram(data=us_adult_females_trunc, aes(height_cm , ..density..), fill="white" , color="darkred")+
geom_density(kernel="gaussian", aes(height_cm), bw=5)+
xlab("bw=5")+
ylab("")
US3 <- ggplot(us_adult_females_trunc, aes(height_cm))+
geom_histogram(data=us_adult_females_trunc, aes(height_cm , ..density..), fill="white" , color="darkred")+
geom_density(kernel="gaussian", aes(height_cm), bw=10)+
xlab("bw=10")+
ylab("")
US4 <- ggplot(us_adult_females_trunc, aes(height_cm))+
geom_histogram(data=us_adult_females_trunc, aes(height_cm , ..density..), fill="white" , color="darkred")+
geom_density(kernel="gaussian", aes(height_cm), bw=20)+
xlab("bw=20")+
ylab("")
plot_grid(US1, US2, US3, US4, labels="Female Height in the US", hjust=-1, vjust=0.2)
Más sobre esta distribución
• ¿Qué observamos sobre la forma de esta curva? • Es unimodal, de cola delgada, simétrico.
Combinamos los dos histogramas
ggplot(bihar_adult_females_trunc, aes(height_cm))+
geom_histogram(data=bihar_adult_females_trunc, aes(height_cm),fill="blue", color="darkblue" )+
geom_histogram(data=us_adult_females_trunc, aes(height_cm), fill="red", color="darkred" )
No tiene sentido hacerlo contabilizando.
Hacemos más visibles los puntos.
ggplot(bihar_adult_females_trunc, aes(height_cm))+
geom_freqpoly(data=bihar_adult_females_trunc, aes(height_cm, ..density.. ), color="darkblue" )+
geom_freqpoly(data=us_adult_females_trunc, aes(height_cm , ..density..), color="darkred" )+
xlab("Height in centimeters")
Visualizamos la densidad de Kernel
ggplot(bihar_adult_females_trunc, aes(height_cm))+
geom_density(data=bihar_adult_females_trunc, aes(height_cm), color="darkblue" )+
geom_density(data=us_adult_females_trunc, aes(height_cm), color="darkred" )+
xlab("Height in centimeters")
Representamos el CDF
MITxT 14.310x Data Analysis for Social Scientists, Esther Duffo.
ggplot: https://ggplot2.tidyverse.org/
Exploración de datos por Gonzalo Guveia https://gonzalezgouveia.com/analisis-exploratorio-de-datos-en-r/