16  Banc Mundial

16.1 Introducció

El Banc Mundial (World Bank en anglès) és una institució internacional financera que es va fundar el 1944 a la conferència de Bretton Woods, juntament amb altres organitzacions, com el Fons Monetari Internacional (FMI). Des de la seva fundació, aquesta institució s’ha encarregat de donar préstecs a governs d’arreu del món, especialment a països de pocs recursos, per impulsar el seu desenvolupament econòmic. Però el que és especialment interessant per a nosaltres és la seva iniciativa de dades obertes.

El Banc Mundial conté més de 1.400 indicadors de més de 200 economies mundials, amb sèries temporals que van en alguns casos des de finals de la Segona Guerra Mundial fins a l’actualitat. Les dades abasten multitud de temes, des d’agricultura fins a deute extern, passant per indicadors macroeconòmics o indicadors d’igualtat de gènere, entre moltíssims altres. Aquestes dades es poden visualitzar a la seva pàgina web a través d’una consola interactiva i senzilla d’utilitzar, on es poden seleccionar les dades per països i període de temps i que fins i tot ofereix diversos tipus de gràfics possibles.

Aquesta eina permet aconseguir la visualització de dades senzilles. Si us voleu fer una idea de com funciona, podeu tafanejar amb la llista d’indicadors aquí. Però el que és realment interessant és com el Banc Mundial proporciona en obert totes les dades, perquè qui vulgui en pugui fer un ús més avançat mitjançant un programari estadístic. En aquest apartat descobrirem com fer un tractament de les dades amb el paquet d’R wbstats.

16.2 El paquet wbstats

El paquet wbstats (Piburn, 2020) permet accedir a la gran majoria de dades obertes del Banc Mundial a R amb unes poques línies de codi i importar-les fàcilment a R. Això evita el fet d’haver de descarregar i després carregar manualment a R cadascuna de les bases de dades, amb la consegüent despreocupació dels problemes de codificació que poden sorgir. Per poder-lo utilitzar, necessitarem tenir el paquet activat, juntament amb altres paquets d’R com dplyr, readr i ggplot2 (Wickham, François, et al., 2023; Wickham, Hester, et al., 2023; Wickham et al., 2024).

Has instal·lat els paquets?

Recorda que per utilitzar un paquet, aquest ha d’estar prèviament instal·lat a RStudio. Si no has instal·lat algun d’aquests paquets, ara és el moment de fer-ho:

install.packages(c("dplyr", "readr", 
                   "ggplot2", "wbstats"))

El paquet wbstats funciona d’una forma prou senzilla, ja que permet:

  1. Buscar qualsevol indicador present en les bases de dades del Banc Mundial a través de la funció wb_search().
  2. Descarregar l’indicador en qüestió a través de la funció wb_data().

Vegem aquestes dues funcions pas a pas.

16.3 Buscar dades

La funció wb_search() funciona com un cercador de caràcters. Només cal indicar entre parèntesis quines paraules clau ha de cercar perquè faci una llista de tots els indicadors que estan relacionats amb aquella paraula. A continuació es mostra un codi que busca les dades que té el Banc Mundial sobre producte interior brut (PIB) per càpita. Dins de la funció haurem d’introduir:

  • Un valor de caràcter, especificat entre cometes, per exemple "gdp".
  • Si volem especificar vàries paraules, ho haurem de fer utilitzant el separador .*, per exemple, "gdp.*capita".
library(wbstats)
wb_search("gdp.*capita")

La cerca retorna un marc de dades amb tres columnes:

  • indicator_id: l’identificador únic de la variable.
  • indicator: el títol formal de la variable.
  • indicator_desc: una breu descripció de l’indicador en qüestió.
# A tibble: 32 × 3
   indicator_id         indicator                                 indicator_desc
   <chr>                <chr>                                     <chr>         
 1 5.51.01.10.gdp       Per capita GDP growth                     "GDP per capi…
 2 6.0.GDPpc_constant   GDP per capita, PPP (constant 2011 inter… "GDP per capi…
 3 GB.XPD.RSDV.GD.ZS    Research and development expenditure (% … "Gross domest…
 4 GFDD.DM.01           Stock market capitalization to GDP (%)    "Value of lis…
 5 GFDD.DM.02           Stock market total value traded to GDP (… "Total value …
 6 NE.GDI.FPUB.ZS       Gross public investment (% of GDP)        "Gross public…
 7 NE.GDI.FTOT.CR       GDP expenditure on gross fixed capital f… "Gross fixed …
 8 NE.GDI.FTOT.SNA08.CR GDP expenditure on gross fixed capital f…  <NA>         
 9 NV.AGR.PCAP.KD.ZG    Real agricultural GDP per capita growth … "The growth r…
10 NY.GDP.PCAP.CD       GDP per capita (current US$)              "GDP per capi…
# ℹ 22 more rows

En aquest tipus de marcs de dades, ens pot resultar molt convenient utilitzar la funció View(), que ens permet observar les dades en una finestra nova. Per utilitzar aquesta funció, guardarem primer les dades en un objecte i després n’examinarem el resultat.

cerca <- wb_search("gdp.*capita")
View(cerca)

Com podem observar, la cerca retorna més de 30 indicadors. Quan els examinem de prop, veurem que no tots aquests indicadors resulten útils. Per exemple, si estem interessats només en el PIB per càpita dels països, ens n’adonarem que molts són indicadors que utilitzen el PIB (gdp) com a referència, però no ens informen directament de dades de PIB. És el cas de SH.XPD.CHEX.GD.ZS, que mostra la despesa sanitària del país respecte al seu PIB. Per això és indispensable llegir els títols i les descripcions per saber exactament què ens explica l’indicador.

Exercici 1

Ara que saps com cercar indicadors amb wb_search(), busca quins indicadors té el Banc Mundial sobre agricultura. Recorda que has de buscar-ho en anglès.

No oblidis les cometes!

Recorda que, a dins de la funció wb_search(), hi has d’introduir un vector de caràcter. Per tant, has d’escriure la paraula o paraules "entre.*cometes".

16.4 Importar dades

Una vegada hem après com buscar els indicadors amb el paquet, el següent pas serà importar les dades de l’indicador que ens interessi amb la funció wb_data(). La informació clau que necessitem és la que es troba a la columna indicator_id del marc de dades que hem estat examinant a l’apartat anterior. Per importar les dades, utilitzarem el bloc de codi que queda a sota d’aquestes línies de la manera següent:

  1. A dins de la funció wb_data(), indiquem amb l’argument indicator = c("NY.GDP.PCAP.CD") que volem descarregar les dades referents als indicadors de PIB per càpita a preus constants i valorats en US$. Guardarem les dades a l’objecte gdp.
gdp <- wb_data(indicator = c("NY.GDP.PCAP.CD"))
  1. A l’argument country podem especificar si volem les dades només per països (l’opció per defecte és country = "countries only") o bé si volem dades per regions o per grups de renda. Si consulteu l’ajuda ?wb_data(), trobareu més informació sobre les diferents possibilitats que té aquest argument.
  2. També es poden especificar altres característiques del marc de dades, com per exemple si volem la taula llarga o ampla (return_wide), l’any d’inici de les dades (start_date), l’any final (end_date) o l’idioma dels resultats (lang)1. Per exemple:
  • 1 Consulta els idiomes disponibles amb wb_languages().

  • gdp <- wb_data(indicator = c("NY.GDP.PCAP.CD"),
                   country = "countries only",
                   start_date = 1990,
                   end_date = 2020,
                   lang = "es")
    Problemes amb la descàrrega?

    Si en els passos següents sorgeix algun problema amb les dades, prova de descarregar-les de nou utilitzant el codi següent:

    gdp <- wb_data(indicator = c("NY.GDP.PCAP.CD"),
                   country = "countries_only") |>  
      mutate(date = as.numeric(date)) |> as_tibble()

    El codi incorpora algunes funcions més:

    • La funció mutate(date = as.numeric(date)) recodifica la columna “date” perquè R la llegeixi com una variable numèrica.
    • La funció as_tibble() indica a R que ens ha de retornar aquesta base de dades en format tibble, que és més còmode per treballar.

    16.5 Explorar dades

    Per poder fer servir les dades correctament, abans és necessari saber exactament com estan organitzades, les dimensions de la nostra base de dades o les característiques de cadascuna de les variables. D’aquest procés se’n diu exploració de dades. Les dades que explorarem són les que importem amb el següent codi2.:

  • 2 si darrerament el Banc Mundial ha actualitzat les seves dades, és possible que les teves dades no coincideixin al 100% amb les de l’exemple d’aquest mòdul.

  • gdp <- wb_data(indicator = c("NY.GDP.PCAP.CD"),
                   start_date = 1990,
                   end_date = 2020)

    Per comprovar que les dades s’han importat correctament, podem escriure el nom de l’objecte (gdp) a la consola d’Rstudio, que ens retornarà una mostra de les 10 primeres observacions de la nostra base de dades.

    • L’objecte gdp és una tibble formada per 7.161 observacions i 9 columnes.
    • Les dades estan ordenades alfabèticament per països, a les 10 primeres observacions només veiem les dades d’Aruba, del 1990 fins al 1999.
    gdp
    ## # A tibble: 7,161 × 9
    ##    iso2c iso3c country  date NY.GDP.PCAP.CD unit  obs_status footnote
    ##    <chr> <chr> <chr>   <dbl>          <dbl> <lgl> <lgl>      <lgl>   
    ##  1 AW    ABW   Aruba    1990         11639. NA    NA         NA      
    ##  2 AW    ABW   Aruba    1991         12850. NA    NA         NA      
    ##  3 AW    ABW   Aruba    1992         13658. NA    NA         NA      
    ##  4 AW    ABW   Aruba    1993         14970. NA    NA         NA      
    ##  5 AW    ABW   Aruba    1994         16675. NA    NA         NA      
    ##  6 AW    ABW   Aruba    1995         17140. NA    NA         NA      
    ##  7 AW    ABW   Aruba    1996         17375. NA    NA         NA      
    ##  8 AW    ABW   Aruba    1997         18713. NA    NA         NA      
    ##  9 AW    ABW   Aruba    1998         19742. NA    NA         NA      
    ## 10 AW    ABW   Aruba    1999         19834. NA    NA         NA      
    ## # ℹ 7,151 more rows
    ## # ℹ 1 more variable: last_updated <date>

    Per explorar més a fons l’objecte gdp, podem utilitzar uns senzills comandaments d’R per respondre algunes qüestions fonamentals sobre les dades:

    - De quins països diferents tenim dades? Com sabem, la funció unique retorna un vector de caràcter amb tots els valors que hi apareixen com a mínim una vegada.

    unique(gdp$country)

    - De quants països diferents tenim dades? Si la pregunta que ens volem respondre no és quins, sinó quants països, podem incloure al mateix codi d’abans la funció length(). Aquesta funció s’encarrega de comptar la llargada que té un vector. Per tant, en aquest cas comptarà quants noms (països) surten com a mínim una vegada a la variable country.

    length(unique(gdp$country))

    - Quin és el rang longitudinal de dades? Podem comprovar que, efectivament, les dades comencen l’any 1990 i acaben el 2020. La funció range()determina el valor mínim i el valor màxim d’un vector. A més, introduirem l’argument na.rm = TRUE, que indica que la funció ignori els valors perduts i funcioni només amb aquells que coneix.

    range(gdp$date, na.rm = TRUE)
    Quin tipus de variable és?

    Recorda que perquè range funcioni, R ha de ser capaç d’entendre que una variable és numèrica. Si R no la detecta com a nombre, és tan senzill com convertir-la a variable numèrica amb la funció as.numeric(). Per exemple:

    gdp$date <- as.numeric(gdp$date)

    Això transformarà la variable date en numèrica.

    Exercici 2

    Ara que saps com explorar les dades, utilitza una de les funcions que acabem de veure i intenta respondre les preguntes següents:

    • Quin és el valor més alt de PIB per càpita?
    • Quin és el valor més baix de PIB per càpita?

    16.6 Visualitzar dades

    En aquest apartat aprendrem a visualitzar les dades de l’objecte gdp de dues maneres diferents: en un any determinat i a través del temps. Crearem les visualitzacions amb les funcions del paquet ggplot2 (Wickham et al., 2024).

    16.6.1 En un any determinat

    En aquest primer gràfic observarem unes dades concretes de diferents països en un any determinat. En el cas que ens ocupa, hem decidit observar el PIB per càpita de cinc països (Estats Units, la Xina, Rússia, el Regne Unit i França) el 2020. Per fer-ho correctament seguirem aquests passos:

    En primer lloc, reduirem les dades per tal que mostrin només les observacions que ens interessen.

    • Dins de la funció filter(), indicarem l’any (date) que ens interessa examinar i els països (country) en qüestió, dins d’un vector de caràcter.
    • Fixem-nos que això ens produeix un marc de dades de cinc observacions.
    gdp |> 
      filter(date == 2020,
             country %in% c("United States", "China", "Russian Federation", 
                            "United Kingdom", "France"))
    ## # A tibble: 5 × 9
    ##   iso2c iso3c country             date NY.GDP.PCAP.CD unit  obs_status footnote
    ##   <chr> <chr> <chr>              <dbl>          <dbl> <lgl> <lgl>      <lgl>   
    ## 1 CN    CHN   China               2020         10409. NA    NA         NA      
    ## 2 FR    FRA   France              2020         39180. NA    NA         NA      
    ## 3 GB    GBR   United Kingdom      2020         40217. NA    NA         NA      
    ## 4 RU    RUS   Russian Federation  2020         10194. NA    NA         NA      
    ## 5 US    USA   United States       2020         63529. NA    NA         NA      
    ## # ℹ 1 more variable: last_updated <date>

    El proper pas serà ubicar els vectors en qüestió en un gràfic, pel qual haurem de tenir carregat el paquet ggplot2.

    • A dins de les funcions ggplot(aes()), especificarem que a l’eix de les \(x\) (horitzontal) hi posarem els països i a l’eix de les \(y\) (vertical) les dades de PIB per càpita.
    • Fixem-nos com ggplot2 ens ubica aquestes dues variables en el gràfic.
    gdp |> 
      filter(date == 2020,
             country %in% c("United States", "China", "Russian Federation", 
                            "United Kingdom", "France")) |>
      ggplot(aes(x = country, y = NY.GDP.PCAP.CD)) 

    Finalment, indicarem la geometria i el títol del gràfic i dels eixos:

    • La geometria serà un diagrama de barres (geom_col()). Amb l’argument fill personalitzarem el color de les barres del gràfic ("darkblue").
    • Especificarem els títols del gràfic, indicant a dins de la funció labs() un valor de caràcter per cada argument: x, y i title.
    gdp |> 
      filter(date == 2020,
             country %in% c("United States", "China", "Russian Federation",
                            "United Kingdom", "France")) |> 
      ggplot(aes(x = country, y = NY.GDP.PCAP.CD)) +
      geom_col(fill = "darkblue") +
      labs(title = "PIB per càpita any 2020",
           x = "Country",
           y = "GDP per capita (current US$)")

    Exercici 3

    Ara que has vist com de senzill és fer un gràfic comparant dades d’un any de diversos països, intenta comparar les dades de PIB per càpita de tres països diferents, però de l’any 2015:

    • Afegeix el valor de l’any en qüestió.
    • Canvia els ? per països que vulguis examinar. Com saps, pots demanar la llista de països amb la funció unique().
    • Canvia el color de les barres, consultant aquesta web.
    • Canvia els títols del gràfic.
    gdp |> 
      filter(date == ?,
             country %in% c("?", "?", "?")) |> 
      ggplot(aes(x = country, y = NY.GDP.PCAP.CD)) +
      geom_col(fill = "darkblue") +
      labs(title = "Títol del gràfic", x = "Títol d'x", y = "Títol d'x")
    Coses per recordar
    • Recorda que els països han d’estar escrits en anglès i anar “entre cometes”. En canvi, els números no cal que vagin entre cometes.
    • A més, l’última línia de codi del gràfic no ha de tenir el símbol + al final, perquè sinó ggplot2 no entendrà que el gràfic ja està acabat.

    16.6.2 A través del temps

    El fet que el Banc Mundial proveeixi dades de varis anys ens permet veure l’evolució d’alguns indicadors al llarg del temps. Per exemple, ens pot interessar veure com evolucionen les dades del PIB per càpita dels Estats Units i la Xina. Per aconseguir-ho, farem les següents operacions a l’objecte gdp:

    • Amb filter(), filtrem les dades del vector country per als països que ens interessen, de manera que conservarem només les observacions que formen part dels Estats Units o de la Xina.
    • Indiquem amb les funcions ggplot(aes()) les variables del gràfic: a l’eix horitzonal hi posarem l’any (x = date); a l’eix vertical, l’indicador de PIB per càpita (y = NY.GDP.PCAP.CD) i també especificarem que el color serveixi per diferenciar les dades dels països (col = country)
    • Per veure l’evolució d’una variable en el temps, la geometria més apropiada és el diagrama de línies geom_line().
    • Finalment, a l’última capa definirem els títols del gràfic amb la funció labs().
    gdp |> 
      filter(country %in% c("United States", "China")) |> 
      ggplot(aes(x = date, y = NY.GDP.PCAP.CD, colour = country)) +
      geom_line() +
      labs(title = "Evolució PIB per càpita (1990-2022)",
           x = "Year", y = "GDP per capita (current US$)", col = "País")

    Exercici 4

    Una vegada vist com es pot fer un gràfic senzill amb ggplot, i fixant-te en el codi que es mostra, prova de fer un gràfic comparatiu amb dos països europeus diferents. Fes les següents modificacions al codi:

    • Filtra les dades per uns altres valors del vector country.
    • Canvia el títol del gràfic.
    • Opcionalment, afegeix l’argument linetype = country a dins de la capa de ggplot(aes()) i observa’n els resultats.