str()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?
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
[37m── [1mAttaching packages[22m ──────────────────────────────────────────────────────────── tidyverse 1.2.1 ──[39m
[37m[32m✔[37m [34mggplot2[37m 3.2.1 [32m✔[37m [34mpurrr [37m 0.3.3
[32m✔[37m [34mtibble [37m 2.1.3 [32m✔[37m [34mdplyr [37m 0.8.3
[32m✔[37m [34mtidyr [37m 1.0.0 [32m✔[37m [34mstringr[37m 1.4.0
[32m✔[37m [34mreadr [37m 1.3.1 [32m✔[37m [34mforcats[37m 0.4.0[39m
[37m── [1mConflicts[22m ─────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
[31m✖[37m [34mdplyr[37m::[32mfilter()[37m masks [34mstats[37m::filter()
[31m✖[37m [34mdplyr[37m::[32mlag()[37m masks [34mstats[37m::lag()[39m
library(gapminder)
gap <- gapminder
head(gap)
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
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 [3m[38;5;246m<fct>[39m[23m Afghanistan, Afghanistan, Afghanistan, Afghanistan, Afghanistan, Afghanistan, Af…
$ continent [3m[38;5;246m<fct>[39m[23m Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Europe, …
$ year [3m[38;5;246m<int>[39m[23m 1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992, 1997, 2002, 2007, 1952, 19…
$ lifeExp [3m[38;5;246m<dbl>[39m[23m 28.801, 30.332, 31.997, 34.020, 36.088, 38.438, 39.854, 40.822, 41.674, 41.763, …
$ pop [3m[38;5;246m<int>[39m[23m 8425333, 9240934, 10267083, 11537966, 13079460, 14880372, 12881816, 13867957, 16…
$ gdpPercap [3m[38;5;246m<dbl>[39m[23m 779.4453, 820.8530, 853.1007, 836.1971, 739.9811, 786.1134, 978.0114, 852.3959, …
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)
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)
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
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?
https://bookdown.org/rdpeng/exdata/exploratory-data-analysis-checklist.html
https://bookdown.org/mikemahoney218/IDEAR/introduction-to-data-analysis.html
https://towardsdatascience.com/simple-fast-exploratory-data-analysis-in-r-with-dataexplorer-package-e055348d9619
https://r4ds.had.co.nz/exploratory-data-analysis.html