EDA Checklist

  1. Formular las preguntas
  2. Leer los datos
  3. Comprobar el empaque
  4. Ejecutar str()
  5. Mirar la parte superior e inferior de los datos.
  6. Limpiar los datos
  7. Validar con al menos una fuente de datos externa
  8. Probar la solución fácil primero
  9. Desafía la solución
  10. Seguimiento

1. Formular las preguntas

Formular preguntas es una forma muy útil de limitar el numero exponencial de caminos a tomar, en particular las preguntas concisas y las hipótesis pueden servir para eliminar el numero de dimensiones y variables que nos son inmediatamente relevantes para responderlas.

Las siguientes preguntas se toman cómo ejemplo para nuestro análisis:
¿Qué país tiene la esperanza de vida más alta?
¿Qué país tiene el aumento más drástico en la esperanza de vida en la década pasada?
¿Hay algún país que haya descendido en su esperanza de vida los últimos años?

2. Leer los datos

Usando las distintas librerías de importación de datos podemos cargar la data que requerimos para nuestro análisis. En este caso realizamos la carga usando directamente la librería gampinder que esta disponible en R base y lo almacenamos como dataframe en la variable gap, revisamos que todo vaya bien mostrando las primeras 10 filas de nuestro nuevo dataframe.

library(tidyverse)
Registered S3 method overwritten by 'dplyr':
  method           from
  print.rowwise_df     
── Attaching packages ──────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
✔ ggplot2 3.2.1     ✔ purrr   0.3.3
✔ tibble  2.1.3     ✔ dplyr   0.8.3
✔ tidyr   1.0.0     ✔ stringr 1.4.0
✔ readr   1.3.1     ✔ forcats 0.4.0
── Conflicts ─────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
library(gapminder)
gap <- gapminder
head(gap)

3. Comprobar el empaque

Usando la analogía de un regalo que aún no puedes abrir y que la única forma de inferir su contenido es agitando el envase, en el EDA podemos diagnosticar con que tipo de información estamos tratando, contando el numero total de columnas y filas de nuestro set de datos.

nrow(gap)
[1] 1704
ncol(gap)
[1] 6

4. Ejecutar str()

Una de las formas más eficientes de revisar nuestro dataset es mediante la función str().La función glimpse() es muy similar pero nos permite observar mayor cantidad de datos por columna.

str(gap)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   1704 obs. of  6 variables:
 $ country  : Factor w/ 142 levels "Afghanistan",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ continent: Factor w/ 5 levels "Africa","Americas",..: 3 3 3 3 3 3 3 3 3 3 ...
 $ year     : int  1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 ...
 $ lifeExp  : num  28.8 30.3 32 34 36.1 ...
 $ pop      : int  8425333 9240934 10267083 11537966 13079460 14880372 12881816 13867957 16317921 22227415 ...
 $ gdpPercap: num  779 821 853 836 740 ...
glimpse(gap)
Observations: 1,704
Variables: 6
$ country   <fct> Afghanistan, Afghanistan, Afghanistan, Afghanistan, Afghanistan, Afghanistan, Af…
$ continent <fct> Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Europe, …
$ year      <int> 1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992, 1997, 2002, 2007, 1952, 19…
$ lifeExp   <dbl> 28.801, 30.332, 31.997, 34.020, 36.088, 38.438, 39.854, 40.822, 41.674, 41.763, …
$ pop       <int> 8425333, 9240934, 10267083, 11537966, 13079460, 14880372, 12881816, 13867957, 16…
$ gdpPercap <dbl> 779.4453, 820.8530, 853.1007, 836.1971, 739.9811, 786.1134, 978.0114, 852.3959, …

5. Mirar la parte superior e inferior de los datos.

Es conveniente mirar el principio y el final de nuestro dataset para revisar de forma rápida si la información esta apropiadamente formateada, en las series de datos incluso nos permite determinar si los periodos de tiempo en los que estamos realizando nuestro análisis están incluidos en nuestra data.
Para realizar esto tenemos las funciones head() y tail()

head(gap)
tail(gap)

6. Limpiar los datos

Una vez que determinamos que nuestra data esta completa y que conocemos la estructura de nuestras variables, podemos limpiar nuesra información, revisando los formatos de fechas, quitando NA’s y NULL, así como eliminar la información que no arroja valor para responder nuestras preguntas. Para este ejercicio las variables continent, pop, gdpPercap son innecesarías para nuestro análisis por lo que decidimos no selecciónarlas.

EDA <- gap %>% 
  select(country,year,lifeExp)
head(EDA)

7. Validar con al menos una fuente de datos externa

Es importante revisar que nuestros datos tengan serntido con la realidad, ya que en ocaciones por errores en la limpieza de los datos o de origen la información no es consitente con lo que realmente sucede, para esto tenemos que contrastar de 1 a 3 observaciónes para revisar que tengan sentido con la realidad. Para este ejemplo usaremos summary() para revisar si la esperanza de vida es consistente con lo que esperamos de la realidad.

summary(EDA$lifeExp)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  23.60   48.20   60.71   59.47   70.85   82.60 

8. Probar la solución fácil primero

Contestando nuestra pregunta original:
¿Qué país tiene la esperanza de vida más alta?
Nuestra primera aproximación sería realizar un ranking de los páises con la esperanza de vida más alta del 2007 lo cuál podemos realizarlo muy facilmente usando la función arrange()

Ranking <- EDA %>% 
  filter(year == 2007) %>% 
  arrange(desc(lifeExp))

head(Ranking)

Concluimos que la resuesta es Japón con 82.6 años

¿Qué país tiene el aumento más drástico en la esperanza de vida en la última década?
En este caso la solución requiere que hagamos ajustes mayores a nuestra tabla para poder calcular una nueva variable llamada delta que es la diferencia entre la esperanza de vida del 2007 VS la de 2002.

Y2002 <- EDA %>% 
  filter(year == 2002) %>%
  rename(LExp2002 = lifeExp) %>% 
  select(-year)
Y2007 <- EDA %>% 
  filter(year == 2007) %>%
  rename(LExp2007 = lifeExp) %>% 
  select(-year)
LifeExpDelta <- merge(Y2002,Y2007)
Delta <- LifeExpDelta %>%
  mutate(delta = (LExp2007-LExp2002)/LExp2002) %>% 
  arrange(desc(delta))
head(Delta)

¿Hay algún país que haya descendido en su esperanza de vida lo últimos 5 años?

9. Desafía la solución

10. Seguimiento

LS0tCnRpdGxlOiAiRURBIEdhcG1pbmRlciIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQojIEVEQSBDaGVja2xpc3QKCjEuIEZvcm11bGFyIGxhcyBwcmVndW50YXMKMi4gTGVlciBsb3MgZGF0b3MKMy4gQ29tcHJvYmFyIGVsIGVtcGFxdWUKNC4gRWplY3V0YXIgYHN0cigpYAo1LiBNaXJhciBsYSBwYXJ0ZSBzdXBlcmlvciBlIGluZmVyaW9yIGRlIGxvcyBkYXRvcy4KNi4gTGltcGlhciBsb3MgZGF0b3MgCjcuIFZhbGlkYXIgY29uIGFsIG1lbm9zIHVuYSBmdWVudGUgZGUgZGF0b3MgZXh0ZXJuYQo4LiBQcm9iYXIgbGEgc29sdWNpw7NuIGbDoWNpbCBwcmltZXJvCjkuIERlc2Fmw61hIGxhIHNvbHVjacOzbgoxMC4gU2VndWltaWVudG8KCiMjIDEuIEZvcm11bGFyIGxhcyBwcmVndW50YXMgIApGb3JtdWxhciBwcmVndW50YXMgZXMgdW5hIGZvcm1hIG11eSDDunRpbCBkZSBsaW1pdGFyIGVsIG51bWVybyBleHBvbmVuY2lhbCBkZSBjYW1pbm9zIGEgdG9tYXIsIGVuIHBhcnRpY3VsYXIgbGFzIHByZWd1bnRhcyBjb25jaXNhcyB5IGxhcyBoaXDDs3Rlc2lzIHB1ZWRlbiBzZXJ2aXIgcGFyYSBlbGltaW5hciBlbCBudW1lcm8gZGUgZGltZW5zaW9uZXMgeSB2YXJpYWJsZXMgcXVlIG5vcyBzb24gaW5tZWRpYXRhbWVudGUgcmVsZXZhbnRlcyBwYXJhIHJlc3BvbmRlcmxhcy4KCkxhcyBzaWd1aWVudGVzIHByZWd1bnRhcyBzZSB0b21hbiBjw7NtbyBlamVtcGxvIHBhcmEgbnVlc3RybyBhbsOhbGlzaXM6ICAKKirCv1F1w6kgcGHDrXMgdGllbmUgbGEgZXNwZXJhbnphIGRlIHZpZGEgbcOhcyBhbHRhPyoqICAKKirCv1F1w6kgcGHDrXMgdGllbmUgZWwgYXVtZW50byBtw6FzIGRyw6FzdGljbyBlbiBsYSBlc3BlcmFuemEgZGUgdmlkYSBlbiBsYSBkw6ljYWRhIHBhc2FkYT8qKiAgCioqwr9IYXkgYWxnw7puIHBhw61zIHF1ZSBoYXlhIGRlc2NlbmRpZG8gZW4gc3UgZXNwZXJhbnphIGRlIHZpZGEgbG9zIMO6bHRpbW9zIGHDsW9zPyoqICAKCiMjIDIuIExlZXIgbG9zIGRhdG9zICAKVXNhbmRvIGxhcyBkaXN0aW50YXMgbGlicmVyw61hcyBkZSBpbXBvcnRhY2nDs24gZGUgZGF0b3MgcG9kZW1vcyBjYXJnYXIgbGEgZGF0YSBxdWUgcmVxdWVyaW1vcyBwYXJhIG51ZXN0cm8gYW7DoWxpc2lzLgpFbiBlc3RlIGNhc28gcmVhbGl6YW1vcyBsYSBjYXJnYSB1c2FuZG8gZGlyZWN0YW1lbnRlIGxhIGxpYnJlcsOtYSBnYW1waW5kZXIgcXVlIGVzdGEgZGlzcG9uaWJsZSBlbiBSIGJhc2UgeSBsbyBhbG1hY2VuYW1vcyBjb21vIGRhdGFmcmFtZSBlbiBsYSB2YXJpYWJsZSBgZ2FwYCwgcmV2aXNhbW9zIHF1ZSB0b2RvIHZheWEgYmllbiBtb3N0cmFuZG8gbGFzIHByaW1lcmFzIDEwIGZpbGFzIGRlIG51ZXN0cm8gbnVldm8gZGF0YWZyYW1lLgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZ2FwbWluZGVyKQpnYXAgPC0gZ2FwbWluZGVyCmhlYWQoZ2FwKQpgYGAKIyMgMy4gQ29tcHJvYmFyIGVsIGVtcGFxdWUgIApVc2FuZG8gbGEgYW5hbG9nw61hIGRlIHVuIHJlZ2FsbyBxdWUgYcO6biBubyBwdWVkZXMgYWJyaXIgeSBxdWUgbGEgw7puaWNhIGZvcm1hIGRlIGluZmVyaXIgc3UgY29udGVuaWRvIGVzIGFnaXRhbmRvIGVsIGVudmFzZSwgZW4gZWwgRURBIHBvZGVtb3MgZGlhZ25vc3RpY2FyIGNvbiBxdWUgdGlwbyBkZSBpbmZvcm1hY2nDs24gZXN0YW1vcyB0cmF0YW5kbywgY29udGFuZG8gZWwgbnVtZXJvIHRvdGFsIGRlIGNvbHVtbmFzIHkgZmlsYXMgZGUgbnVlc3RybyBzZXQgZGUgZGF0b3MuCmBgYHtyfQpucm93KGdhcCkKbmNvbChnYXApCmBgYAoKIyMgNC4gRWplY3V0YXIgYHN0cigpYCAgClVuYSBkZSBsYXMgZm9ybWFzIG3DoXMgZWZpY2llbnRlcyBkZSByZXZpc2FyIG51ZXN0cm8gZGF0YXNldCBlcyBtZWRpYW50ZSBsYSBmdW5jacOzbiBgc3RyKClgLkxhIGZ1bmNpw7NuIGBnbGltcHNlKClgIGVzIG11eSBzaW1pbGFyIHBlcm8gbm9zIHBlcm1pdGUgb2JzZXJ2YXIgbWF5b3IgY2FudGlkYWQgZGUgZGF0b3MgcG9yIGNvbHVtbmEuICAKYGBge3J9CnN0cihnYXApCmdsaW1wc2UoZ2FwKQpgYGAKIyMgNS4gTWlyYXIgbGEgcGFydGUgc3VwZXJpb3IgZSBpbmZlcmlvciBkZSBsb3MgZGF0b3MuICAKRXMgY29udmVuaWVudGUgbWlyYXIgZWwgcHJpbmNpcGlvIHkgZWwgZmluYWwgZGUgbnVlc3RybyBkYXRhc2V0IHBhcmEgcmV2aXNhciBkZSBmb3JtYSByw6FwaWRhIHNpIGxhIGluZm9ybWFjacOzbiBlc3RhIGFwcm9waWFkYW1lbnRlIGZvcm1hdGVhZGEsIGVuIGxhcyBzZXJpZXMgZGUgZGF0b3MgaW5jbHVzbyBub3MgcGVybWl0ZSBkZXRlcm1pbmFyIHNpIGxvcyBwZXJpb2RvcyBkZSB0aWVtcG8gZW4gbG9zIHF1ZSBlc3RhbW9zIHJlYWxpemFuZG8gbnVlc3RybyBhbsOhbGlzaXMgZXN0w6FuIGluY2x1aWRvcyBlbiBudWVzdHJhIGRhdGEuICAKUGFyYSByZWFsaXphciBlc3RvIHRlbmVtb3MgbGFzIGZ1bmNpb25lcyBgaGVhZCgpYCB5IGB0YWlsKClgCmBgYHtyfQpoZWFkKGdhcCkKdGFpbChnYXApCmBgYAoKIyMgNi4gTGltcGlhciBsb3MgZGF0b3MgICAKVW5hIHZleiBxdWUgZGV0ZXJtaW5hbW9zIHF1ZSBudWVzdHJhIGRhdGEgZXN0YSBjb21wbGV0YSB5IHF1ZSBjb25vY2Vtb3MgbGEgZXN0cnVjdHVyYSBkZSBudWVzdHJhcyB2YXJpYWJsZXMsIHBvZGVtb3MgbGltcGlhciBudWVzcmEgaW5mb3JtYWNpw7NuLCByZXZpc2FuZG8gbG9zIGZvcm1hdG9zIGRlIGZlY2hhcywgcXVpdGFuZG8gTkEncyB5IE5VTEwsIGFzw60gY29tbyBlbGltaW5hciBsYSBpbmZvcm1hY2nDs24gcXVlIG5vIGFycm9qYSB2YWxvciBwYXJhIHJlc3BvbmRlciBudWVzdHJhcyBwcmVndW50YXMuClBhcmEgZXN0ZSBlamVyY2ljaW8gbGFzIHZhcmlhYmxlcyBjb250aW5lbnQsIHBvcCwgZ2RwUGVyY2FwIHNvbiBpbm5lY2VzYXLDrWFzIHBhcmEgbnVlc3RybyBhbsOhbGlzaXMgcG9yIGxvIHF1ZSBkZWNpZGltb3Mgbm8gc2VsZWNjacOzbmFybGFzLgpgYGB7cn0KRURBIDwtIGdhcCAlPiUgCiAgc2VsZWN0KGNvdW50cnkseWVhcixsaWZlRXhwKQpoZWFkKEVEQSkKYGBgCgojIyA3LiBWYWxpZGFyIGNvbiBhbCBtZW5vcyB1bmEgZnVlbnRlIGRlIGRhdG9zIGV4dGVybmEgIApFcyBpbXBvcnRhbnRlIHJldmlzYXIgcXVlIG51ZXN0cm9zIGRhdG9zIHRlbmdhbiBzZXJudGlkbyBjb24gbGEgcmVhbGlkYWQsIHlhIHF1ZSBlbiBvY2FjaW9uZXMgcG9yIGVycm9yZXMgZW4gbGEgbGltcGllemEgZGUgbG9zIGRhdG9zIG8gZGUgb3JpZ2VuIGxhIGluZm9ybWFjacOzbiBubyBlcyBjb25zaXRlbnRlIGNvbiBsbyBxdWUgcmVhbG1lbnRlIHN1Y2VkZSwgcGFyYSBlc3RvIHRlbmVtb3MgcXVlIGNvbnRyYXN0YXIgZGUgMSBhIDMgb2JzZXJ2YWNpw7NuZXMgcGFyYSByZXZpc2FyIHF1ZSB0ZW5nYW4gc2VudGlkbyBjb24gbGEgcmVhbGlkYWQuClBhcmEgZXN0ZSBlamVtcGxvIHVzYXJlbW9zIGBzdW1tYXJ5KClgIHBhcmEgcmV2aXNhciBzaSBsYSBlc3BlcmFuemEgZGUgdmlkYSBlcyBjb25zaXN0ZW50ZSBjb24gbG8gcXVlIGVzcGVyYW1vcyBkZSBsYSByZWFsaWRhZC4KYGBge3J9CnN1bW1hcnkoRURBJGxpZmVFeHApCmBgYAojIyA4LiBQcm9iYXIgbGEgc29sdWNpw7NuIGbDoWNpbCBwcmltZXJvICAKQ29udGVzdGFuZG8gbnVlc3RyYSBwcmVndW50YSBvcmlnaW5hbDogIAoqKsK/UXXDqSBwYcOtcyB0aWVuZSBsYSBlc3BlcmFuemEgZGUgdmlkYSBtw6FzIGFsdGE/KiogIApOdWVzdHJhIHByaW1lcmEgYXByb3hpbWFjacOzbiBzZXLDrWEgcmVhbGl6YXIgdW4gcmFua2luZyBkZSBsb3MgcMOhaXNlcyBjb24gbGEgZXNwZXJhbnphIGRlIHZpZGEgbcOhcyBhbHRhIGRlbCAyMDA3IGxvIGN1w6FsIHBvZGVtb3MgcmVhbGl6YXJsbyBtdXkgZmFjaWxtZW50ZSB1c2FuZG8gbGEgZnVuY2nDs24gYGFycmFuZ2UoKWAKYGBge3J9ClJhbmtpbmcgPC0gRURBICU+JSAKICBmaWx0ZXIoeWVhciA9PSAyMDA3KSAlPiUgCiAgYXJyYW5nZShkZXNjKGxpZmVFeHApKQoKaGVhZChSYW5raW5nKQpgYGAKQ29uY2x1aW1vcyBxdWUgbGEgcmVzdWVzdGEgZXMgKipKYXDDs24qKiBjb24gODIuNiBhw7FvcyAgCgoqKsK/UXXDqSBwYcOtcyB0aWVuZSBlbCBhdW1lbnRvIG3DoXMgZHLDoXN0aWNvIGVuIGxhIGVzcGVyYW56YSBkZSB2aWRhIGVuIGxhIMO6bHRpbWEgZMOpY2FkYT8qKiAgCkVuIGVzdGUgY2FzbyBsYSBzb2x1Y2nDs24gcmVxdWllcmUgcXVlIGhhZ2Ftb3MgYWp1c3RlcyBtYXlvcmVzIGEgbnVlc3RyYSB0YWJsYSBwYXJhIHBvZGVyIGNhbGN1bGFyIHVuYSBudWV2YSB2YXJpYWJsZSBsbGFtYWRhIGRlbHRhIHF1ZSBlcyBsYSBkaWZlcmVuY2lhIGVudHJlIGxhIGVzcGVyYW56YSBkZSB2aWRhIGRlbCAyMDA3IFZTIGxhIGRlIDIwMDIuCmBgYHtyfQpZMjAwMiA8LSBFREEgJT4lIAogIGZpbHRlcih5ZWFyID09IDIwMDIpICU+JQogIHJlbmFtZShMRXhwMjAwMiA9IGxpZmVFeHApICU+JSAKICBzZWxlY3QoLXllYXIpClkyMDA3IDwtIEVEQSAlPiUgCiAgZmlsdGVyKHllYXIgPT0gMjAwNykgJT4lCiAgcmVuYW1lKExFeHAyMDA3ID0gbGlmZUV4cCkgJT4lIAogIHNlbGVjdCgteWVhcikKTGlmZUV4cERlbHRhIDwtIG1lcmdlKFkyMDAyLFkyMDA3KQpEZWx0YSA8LSBMaWZlRXhwRGVsdGEgJT4lCiAgbXV0YXRlKGRlbHRhID0gKExFeHAyMDA3LUxFeHAyMDAyKS9MRXhwMjAwMikgJT4lIAogIGFycmFuZ2UoZGVzYyhkZWx0YSkpCmhlYWQoRGVsdGEpCmBgYAoqKsK/SGF5IGFsZ8O6biBwYcOtcyBxdWUgaGF5YSBkZXNjZW5kaWRvIGVuIHN1IGVzcGVyYW56YSBkZSB2aWRhIGxvIMO6bHRpbW9zIDUgYcOxb3M/KiogIAoKCiMjIDkuIERlc2Fmw61hIGxhIHNvbHVjacOzbiAgCiMjIDEwLiBTZWd1aW1pZW50byAgCgojIyBSZWZlcmVuY2lhcyAgCmh0dHBzOi8vYm9va2Rvd24ub3JnL3JkcGVuZy9leGRhdGEvZXhwbG9yYXRvcnktZGF0YS1hbmFseXNpcy1jaGVja2xpc3QuaHRtbCAgCmh0dHBzOi8vYm9va2Rvd24ub3JnL21pa2VtYWhvbmV5MjE4L0lERUFSL2ludHJvZHVjdGlvbi10by1kYXRhLWFuYWx5c2lzLmh0bWwgIApodHRwczovL3Rvd2FyZHNkYXRhc2NpZW5jZS5jb20vc2ltcGxlLWZhc3QtZXhwbG9yYXRvcnktZGF0YS1hbmFseXNpcy1pbi1yLXdpdGgtZGF0YWV4cGxvcmVyLXBhY2thZ2UtZTA1NTM0OGQ5NjE5ICAKaHR0cHM6Ly9yNGRzLmhhZC5jby5uei9leHBsb3JhdG9yeS1kYXRhLWFuYWx5c2lzLmh0bWwgIA==