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.
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)
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"
Cambiamos los nombres de algunas variables. La sintaxis es la siguiente:
names(datos) examina todos los nombres en el dataframe datos
[names(datos) == old.var.name] extrae el nombre de la variable que desea modificar.
<- “new.var.name” asigna el nuevo nombre de variable.
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")
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)
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”.