R-Conomics

Un ejercicio con echarts4r.maps

Una de las cosas más interesantes que podemos hacer en cuanto a visualización de información es la creación de sistemas de información geográfica, es decir, mapas que nos muestren datos sobre algún tópico en específico. Este tipo de información suele ser bastante útil cuando se quiere hacer una comparación entre una gran cantidad de países, ya que podemos ver diferencias claras entre ellos sin tener información demasiado revuelta, algo que sería complicado de ver en una gráfica convencional si utilizamos demasiadas variables (países, en este caso).

Existen una gran cantidad de paquetes para la creación de mapas en R, como es el caso de leaflet, ggmap, maptools e incluso ggplot2, pero estos paquetes suelen pedir requisitos bastante específicos en cuanto a la creación de mapas, como es el caso de la latitud y longitud, una API Key proporcionada por páginas como Mapbox, además de códigos que para alguien que apenas se está iniciando en la programación estadística en R pueden parecer algo complicados, por lo que para este ejercicio haremos uso de un paquete llamado echarts4r.maps, el cual facilita bastante la creación de mapas, ya que basta con tener una base de datos que contenga los nombres de los países en ingles para que podamos crear el mapa que necesitemos. Como tal, utilizaremos dos paquetes para crear el mapa, el primero será el ya mencionado anteriormente, el siguiente será echarts4r, además de dplyr para modificar la base de datos que usaremos en este caso. Antes de comenzar hay que considerar que el paquete echarts4r.maps solo se encuentra disponible en Github, por lo que para descargarlo tendremos que ejecutar la siguiente sentencia: remotes::install_github('JohnCoene/echarts4r.maps'), claro, teniendo ya descargado el paquete remotes, el cual permite descargar paquetes desde otras plataformas diferentes a CRAN.

Para trabajar utilizaremos los datos actualizados de COVID-19 disponibles en [WHO] (https://www.who.int). Comencemos con el ejercicio:

# Cargamos las paqueterías necesarias

library(readxl)
library(dplyr)
library(echarts4r.maps)
library(echarts4r)

# Cargamos y leemos la base de datos
covidbase <- read_excel("/Users/jorge/Desktop/Trabajo/Programacion/Mapas para R/owid-covid-data.xlsx")

attach(covidbase)

Veamos los datos que tenemos en la base de datos para tener más claro lo que vamos a hacer a continuación:

head(covidbase)
## # A tibble: 6 x 59
##   iso_code continent location date  total_cases new_cases new_cases_smoot…
##   <chr>    <chr>     <chr>    <chr>       <dbl>     <dbl>            <dbl>
## 1 AFG      Asia      Afghani… 2020…           1         1           NA    
## 2 AFG      Asia      Afghani… 2020…           1         0           NA    
## 3 AFG      Asia      Afghani… 2020…           1         0           NA    
## 4 AFG      Asia      Afghani… 2020…           1         0           NA    
## 5 AFG      Asia      Afghani… 2020…           1         0           NA    
## 6 AFG      Asia      Afghani… 2020…           1         0            0.143
## # … with 52 more variables: total_deaths <dbl>, new_deaths <dbl>,
## #   new_deaths_smoothed <dbl>, total_cases_per_million <dbl>,
## #   new_cases_per_million <dbl>, new_cases_smoothed_per_million <dbl>,
## #   total_deaths_per_million <dbl>, new_deaths_per_million <dbl>,
## #   new_deaths_smoothed_per_million <dbl>, reproduction_rate <dbl>,
## #   icu_patients <lgl>, icu_patients_per_million <lgl>, hosp_patients <lgl>,
## #   hosp_patients_per_million <lgl>, weekly_icu_admissions <lgl>,
## #   weekly_icu_admissions_per_million <lgl>, weekly_hosp_admissions <lgl>,
## #   weekly_hosp_admissions_per_million <lgl>, new_tests <dbl>,
## #   total_tests <dbl>, total_tests_per_thousand <dbl>,
## #   new_tests_per_thousand <dbl>, new_tests_smoothed <dbl>,
## #   new_tests_smoothed_per_thousand <dbl>, positive_rate <dbl>,
## #   tests_per_case <dbl>, tests_units <chr>, total_vaccinations <lgl>,
## #   people_vaccinated <lgl>, people_fully_vaccinated <lgl>,
## #   new_vaccinations <lgl>, new_vaccinations_smoothed <lgl>,
## #   total_vaccinations_per_hundred <lgl>, people_vaccinated_per_hundred <lgl>,
## #   people_fully_vaccinated_per_hundred <lgl>,
## #   new_vaccinations_smoothed_per_million <lgl>, stringency_index <dbl>,
## #   population <dbl>, population_density <dbl>, median_age <dbl>,
## #   aged_65_older <dbl>, aged_70_older <dbl>, gdp_per_capita <dbl>,
## #   extreme_poverty <dbl>, cardiovasc_death_rate <dbl>,
## #   diabetes_prevalence <dbl>, female_smokers <dbl>, male_smokers <dbl>,
## #   handwashing_facilities <dbl>, hospital_beds_per_thousand <dbl>,
## #   life_expectancy <dbl>, human_development_index <dbl>

Como podemos ver tenemos 59 variables, de las cuales las que nos interesan son location, date y, para este ejercico, total_cases_per_million, ya que queremos hacer un mapa de los casos totales registrados por millón de habitantes, ya que de esta manera podremos observar qué países tienen una mayor incidencia de COVID-19 sin tener que preocuparnos por la cantidad de habitantes como un factor que pueda sesgar éste dato. Ahora, para conocer la incidencia de COVID-19 por millón de habitantes utilizaremos solo la fecha más actual de las observaciones, ya que sería ilógico tratar de graficar todas las fechas de ésta base de datos en un mismo mapa. Vamos a filtrar la base de datos de la siguiente manera:

# Base filtrada con la función filter del paquete dplyr

covidbasefiltrada <- filter(covidbase, date == "2021-02-25")

Finalmente, procedemos a crear el mapa:

covidbasefiltrada %>% 
  e_charts(location) %>% 
  e_map(total_cases_per_million) %>% 
  e_visual_map(total_cases_per_million)  %>%
  e_title("Casos totales de COVID-19", "Por millón de habitantes") %>% 
  e_theme("london")

Como podemos observar, una de las ventajas que tiene este mapa es que al poner el cursor sobre algún país automáticamente nos da el valor de éste, mientras que si podemos el cursor sobre la barra de la paleta de colores nos dará todos los páises con datos parecidos/iguales, dependiendo del intervalo de valores que tengamos. Otra ventaja de éste paquete es que cuenta con diversos temas, los cuales nos dan varias paletas de colores para el mapa, como por ejemplo:

covidbasefiltrada %>% 
  e_charts(location) %>% 
  e_map(total_cases_per_million) %>% 
  e_visual_map(total_cases_per_million)  %>%
  e_title("Casos totales de COVID-19", "Por millón de habitantes") %>% 
  e_theme("infographic")

Existe una amplia gama de paletas de colores disponibles mediante los temas existentes. Para conocer más de ello basta con que escribas ?e_theme en la consola de RStudio.

Referencias bibliográficas.

  1. González, C. G., & Lise, A. V. (2013). Gráficos estadísticos y mapas con R. Ediciones Díaz de Santos.

  2. Wehrens, R., & Buydens, L. M. (2007). Self-and super-organizing maps in R: the Kohonen package. Journal of Statistical software, 21(5), 1-19.

  3. Coene, J. (2017). Maps. 26 de febrero de 2021, de echarts4r Sitio web: https://echarts4r.john-coene.com/articles/map.html

R-Conomics
Todos los derechos reservados