INTRODUCCIÓN

El banco de datos del Banco Mundial agrupa actualmente más de 80 bases de datos que incluyen información sobre una multitud de temas para muchos países del mundo. La base de datos de Indicadores de Desarrollo Mundial (WDI) es probablemente la más popular y un recurso muy utilizado, tanto por expertos como estudiantes.

Hay varias formas de acceder al WDI. Una forma es visitar el portal de datos del Banco Mundial, que permite a los usuarios no solo el acceso a los indicadores de WDI, sino también segmentar los datos por años, países, etc. El portal también permite a los usuarios crear diferentes tipos de gráficos, que se pueden descargar y pegar en sus documentos. Además, los usuarios pueden descargar los datos asociados a sus consultas en muchos formatos diferentes. Puede utilizarse el siguiente link para acceder a un tutorial que permite conocer los procedimientos de desgarga de la información:

Sin embargo, en la asignatura G2040. Introducción al Análisis Cuantitativo de la Información Espacial se usará el paquete WDI, desarrollado por Vincent Arel-Bundock, para descargar, analizar y representar gráficamente los datos del Banco Mundial.

DESCARGA DE LA INFORMACIÓN PROCEDENTE DEL BANCO MUNDIAL

El primer paso de la actividad consiste en la instalación, si procede, y en la activiación del paquete.

#if(!require("WDI")) install.packages("WDI")                                    # Verificamos que está instalado el packete en el disco duro.
library(WDI)                                                                    # Activamos la librería del paquete "WDI".

La búsqueda del código de una variable específica se realiza mediante la función WDIsearch() de la siguiente forma (en este caso, el producto interior bruto):

WDIsearch('gdp')

📝 CÓDIGOS DEL BANCO MUNDIAL

La base de datos del Banco Mundial comprende un gran conjunto de variables, que son identificadas mediante un código, como por ejemplo:

“BG.GSR.NFSV.GD.ZS” “Trade in services (% of GDP)”
“BM.KLT.DINV.GD.ZS” “Foreign direct investment, net outflows (% of GDP)”
“BN.CAB.XOKA.GD.ZS” “Current account balance (% of GDP)”

Esta información puede consultarse en el siguiente fichero excel.

Para comprobar si una variable está disponible se puede consultar la página web del paquete WDI

Extracción de la variable de interés: en este caso es la tasa de feminidad, codificada en la base de datos como “SP.POP.TOTL.FE.ZS”.

datos <- WDI(country="all",                                                     # Todos los paises del mundo
             indicator = c("tasa_fem" = "SP.POP.TOTL.FE.ZS"),                   # Código de la variable y denominación particular 
             extra = TRUE,                                                      # Variables adicionales (region, iso3c code ...)
             start = 2021,                                                      # Año de comienzo
             end = 2021)                                                        # Año de fin

Comprobamos la estructura del fichero.

str(datos)
## 'data.frame':    266 obs. of  13 variables:
##  $ country    : chr  "Afghanistan" "Africa Eastern and Southern" "Africa Western and Central" "Albania" ...
##  $ iso2c      : chr  "AF" "ZH" "ZI" "AL" ...
##  $ iso3c      : chr  "AFG" "AFE" "AFW" "ALB" ...
##  $ year       : int  2021 2021 2021 2021 2021 2021 2021 2021 2021 2021 ...
##  $ tasa_fem   : num  49.5 50.5 49.7 50 49.1 ...
##   ..- attr(*, "label")= chr "Population, female (% of total population)"
##  $ status     : chr  "" "" "" "" ...
##  $ lastupdated: chr  "2024-06-28" "2024-06-28" "2024-06-28" "2024-06-28" ...
##  $ region     : chr  "South Asia" "Aggregates" "Aggregates" "Europe & Central Asia" ...
##  $ capital    : chr  "Kabul" "" "" "Tirane" ...
##  $ longitude  : chr  "69.1761" "" "" "19.8172" ...
##  $ latitude   : chr  "34.5228" "" "" "41.3317" ...
##  $ income     : chr  "Low income" "Aggregates" "Aggregates" "Upper middle income" ...
##  $ lending    : chr  "IDA" "Aggregates" "Aggregates" "IBRD" ...

A continuación visualizamos el dataframe con los datos.

View(datos)

PROCESAMIENTO INICIAL DE LA INFORMACIÓN PROCEDENTE DEL BANCO MUNDIAL

El dataframe contiene una estructura con información que no es necesaria.

datos <- subset(datos,
                !(tasa_fem=="NA"))                
datos <- subset(datos, 
                !(region=="Aggregates"))           # Subconjunto de datos en los que region no es igual a "Aggregates"     
datos <- datos[ , -c(2,4,6:7,9:11,13)]
names (datos)
## [1] "country"  "iso3c"    "tasa_fem" "region"   "income"

Traducción de etiquetas en inglés al español.

names(datos)[names(datos) == "income"] <- "ingresos"
names(datos)[names(datos) == "country"] <- "pais"
datos$ingresos[datos$ingresos == "Low income"] <- "BA"
datos$ingresos[datos$ingresos == "Lower middle income"] <- "BA_ME"
datos$ingresos[datos$ingresos == "Upper middle income"] <- "ME_AL"
datos$ingresos[datos$ingresos == "High income"] <- "AL"
datos$ingresos[datos$ingresos == "Not classified"] <- "NO"
datos$region[datos$region=="Middle East & North Africa"] <- "MENA"
datos$region[datos$region=="South Asia"] <- "ASMER"
datos$region[datos$region=="Latin America & Caribbean"] <- "AMCAR"
datos$region[datos$region=="Europe & Central Asia"] <- "EUR"
datos$region[datos$region=="Sub-Saharan Africa"] <- "AFSS"
datos$region[datos$region=="East Asia & Pacific"] <- "AOPAC"
datos$region[datos$region=="North America"] <- "AMNOR"

Comprobamos que los cambios introducidos son correctos

View(datos)                                    

Es recomendable la grabación de la información original en formato R como dataframe.

save(datos, file = "D:/G2040/TEMA_7_Trabajo_aplicado/datos_wdi.RData") 

REPRESENTACIÓN CARTOGRÁFICA INICIAL

En caso de que sea necesario recuperar el fichero datos.RData habría que cargarlo de esta manera:

load("D:/G2040/TEMA_7_Trabajo_aplicado/datos_wdi.RData")

El paquete rnaturalearth proporciona mapas con los límites administrativos de todo el mundo. La función ne_countries extrae los datos (el paquete rnaturalearthhires es necesario si se quiere scale = "large"). El resultado es un objeto de la clase sp. Éste debe transformarse en un objeto de la clase sf con el argumento returnclass():

library("rnaturalearth")
library("sf")
mapa <- ne_countries(scale = "medium", 
                    returnclass = "sf")
class(mapa)
## [1] "sf"         "data.frame"

Podemos visualizar este nuevo objeto así

View(mapa)

En el presente momento tenemos dos objetos, un dataframe datos y un objeto sf con el mapa. Para poder realizar la unión entre ambos objetos , es necesario identificar una variable presente en ambos objetos. Esta variable es el códigos ISO 3166-1 alfa-3, un código de tres letras para identificar países, territorios dependientes y zonas especiales de interés geográfico. En primer lugar, d

names(mapa)[names(mapa) == "adm0_a3"] <- "iso3c"

En el caso del objeto sf, sólo nos interesan dos campos, el correspondiente al código ISO y el de la geometría. En objetos sf la selección de una variable incluye siempre la geometría. A continuación seleccionamos la columna (la número 45) correspondiente al código ISO.

mapa <- mapa[  ,11]  

A continuación uniremos el objeto mapa (soporte gráfico o mapa) con el objeto datos (datos a representar). En el objeto mapa mapa aparecerán ahora los elementos comunes de ambos objetos.

mapa <- merge(mapa, 
              datos)

Cambio de proyección a Robinson en formato PROJ.4. La función correspondiente en el paquete sf es st_transform()(https://r-spatial.github.io/sf/reference/st_transform.html)

robinson <- "+proj=robin +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs"
mapa <- st_transform(mapa, robinson)

REPRESENTACIÓN GRÁFICA

Para representar la información contenida en el objeto datos utilizaremos el paquete tmap(), que facilita la creación de mapas de coropletas, objeto de esta práctica. En primer lugar, se activará el paquete a través de la función library().

library(tmap)

En primer lugar, se creará un mapa en el que aparecerán las diversas regiones del mundo (variable region) en que se ha subdivido el territorio.

tm_shape(mapa) + 
  tm_polygons("region", 
    palette = c("MENA" = "#11467b","ASMER" = "#ffd14d", "AMCAR" = "#86909a", "EUR" = "#14909a","AFSS" = "#7fbee9","AOPAC" = "#df5454","AMNOR" = "#7b1072")) +
  tm_borders(col = "black", lwd = 1) + 
  tm_layout(main.title = "Regiones del mundo",                                  # Título del gráfico
            main.title.fontface = "bold.italic",                                # Tipo de fuente del título.
            legend.title.fontfamily = "monospace",                              # Familia del tipo de fuente del título.
            legend.outside = TRUE) +                                            # Leyenda fuera del marco.
  tm_graticules()                                                               # Rejilla con paralelos y meridianos.

En segundo lugar, representaremos los países según la clasificación del nivel de su renta.

tm_shape(mapa) + 
  tm_polygons("ingresos", palette = c("BA" = "red","BA_ME" = "orange", "ME_AL" = "yellow", "AL" = "green", "NO" = "white")) + 
  tm_borders(col = "black", lwd = 1) + 
  tm_layout(main.title = "Regiones del mundo según ingresos", main.title.fontface = "bold.italic", legend.title.fontfamily = "monospace", legend.outside = TRUE) +
  tm_graticules()

Finalmente, se representará la variable que va a ser estudiada

tm_shape(mapa) + 
  tm_fill(col = "tasa_fem", 
          style = "jenks",                                                  #
          n = 5) +                                                          #
  tm_layout(main.title = "Tasa de feminidad", main.title.fontface = "bold.italic", legend.title.fontfamily = "monospace", legend.outside = TRUE) +
  tm_graticules() + 
  tm_borders(col = "black", lwd = 1) 

En caso de querer exportar automáticamente los mapas, procederemos de la siguiente manera. Primero crearemos un objeto gráfico, denominando mapa_feminidad a partir del mapa anterior

mapa_feminidad <- tm_shape(mapa) + 
  tm_fill(col = "tasa_fem", 
          style = "jenks",                                                  #
          n = 5) +                                                          #
  tm_layout(main.title = "Tasa de feminidad", main.title.fontface = "bold.italic", legend.title.fontfamily = "monospace", legend.outside = TRUE) +
  tm_graticules() + 
  tm_borders(col = "black", lwd = 1) 

A continuación se exporta este objeto gráfico:

tmap_save(mapa_feminidad, "D:/G2040/TEMA_7_Trabajo_aplicado/mapa_feminidad.png", width = 1000, height = 750, dpi = 300)

Por defecto, el argumento que controla la resolución, DPI, es de 300, siendo la anchura y la altura de la imagen ajustada automática. Sin embargo, podemos modificar estos parámetros y ajustarlos a nuestras necesidades. También es posible modificar el tipo de gráfico cambiando añadiendo “pdf”, “eps”, “svg”, “wmf” (sólo en Windows), “jpg”, “bmp”, “tiff”.