9  El paquet countrycode

Quan estudiem la política internacional, el més freqüent serà que ens trobem amb dades que provenen de fonts d’informació diferent, pel qual sovint els estats poden rebre un nom diferent, estar codificats de manera diferent i tenir sèries temporals diferents. Això suposa un problema a l’hora d’ajuntar i treballar amb grans quantitats de dades. Per sort, el paquet d’R countrycode (Arel-Bundock et al., 2018) ens resol aquest problema.

En aquesta secció replicarem els passos habituals que se segueixen per crear bases de dades que tenen per unitat d’anàlisi l’estat. Normalment, el procediment serà el següent:

Codi d’R

Aquesta secció conté codi d’R. Qui no tingui un coneixement previ del programa, pot ignorar els codis que apareixen més avall i llegir simplement el text. Qui ja tingui un coneixement previ d’R, pot intentar replicar els exemples que figuren a continuació. Per fer-ho, necessitarà tenir carregats els següents paquets:

9.1 Transformar codis de país

Podem veure les funcionalitats de countrycode amb un senzill exemple. A continuació tenim dos marcs de dades (Taula 9.1 i Taula 9.2), amb dades de tres països: França, Alemanya i República Txeca. No obstant, a cada marc de dades hi apareix informació diferent. El primer marc de dades conté informació del PIB per càpita (gdpcap) i la població (pop). A més, té una columna amb el codis de país, codificats segons el sistema iso2c.

Taula 9.1: Marc de dades 1a
country code gdpcap pop
France FR 43518 67
Germany DE 50801 83
Czechia CZ 26378 11
df1 <- tibble(country = c("France", "Germany", "Czechia"),
              code = c("FR", "DE", "CZ"),
              gdpcap = c(43518, 50801, 26378),
              pop = c(67, 83, 11))

En el segon marc de dades tenim informació de la llengua oficial d’aquests països. Observem que els noms de país són diferents en el primer i segon marc de dades. I que el segon marc està codificat amb el sistema cowc.

Taula 9.2: Marc de dades 1
country cowc lang
French Republic FRN French
Federal Republic of Germany GMY German
Czech Republic CZR Czech
df2 <- tibble(country = c("French Republic", 
                          "Federal Republic of Germany",
                          "Czech Republic"),
              cowc = c("FRN", "GMY", "CZR"),
              lang = c("French", "German", "Czech"))

Imaginem-nos que, enlloc de tres països, tenim un marc de dades de 190 països. Com que no hi ha cap manera òbvia d’ajuntar els dos marcs de dades, el primer que pensaríem és que haurem de fer la unió de les dades de forma manual.

Com que tenim poques observacions, podríem ajuntar-los manualment amb programes com Excel. Però l’habitual serà treballar amb grans quantitats de dades. Si, per exemple, tinguéssim dades de 150 estats durant 50 anys, el nombre d’observacions seria: 150 * 50 = 7.500 casos. Ajuntar les dades de forma manual portaria moltes hores de feina. Per tant, és necessari disposar d’una forma automàtica que ens permeti fer aquesta operació.

Una millor alternativa és utilitzar el paquet d’R countrycode, que conté informació de totes les equivalències entre sistemes de classificació d’estats. El primer que hem de fer és crear una nova columna en el primer marc de dades que contingui els codis de país del segon marc de dades. A la funció countrycode() haurem d’indicar tres arguments, separats per comes:

  • Com a primer argument indicarem on es troba el codi que volem transformar (df1$code).
  • Com a segon argument indicarem quin és el sistema de classificació d’aquest codi ("iso2c").
  • Com a tercer argument indicarem sistema del codi al què transformarem les dades ("cowc").
countrycode(variable d'origen, 
            codi d'origen, 
            codi de destí)

La llista dels diferents sistemes de classificació es pot consultar teclejant ?codelist.

Si transformem la variable d’origen code, que conté el sistema iso2c, al sistema cowc, obtindrem com a resultat el marc de dades Taula 9.3, que veiem a continuació. Com observem, amb un senzill codi hem creat una nova columna que conté el codi de país cowc.

Taula 9.3: Base de dades 1b
country code gdpcap cowc
France FR 43518 FRN
Germany GE 50801 GRG
Czechia CZ 26378 CZR
df1$cowc <- countrycode(df1$code, "iso2c", "cowc")

9.2 Unir marcs de dades

Un cop tenim un codi de país comú que als dos marcs de dades, podem unir-los amb una de les funcions join del paquet dplyr. En aquestes funcions:

  • En el primer argument indiquem el nom del primer marc de dades (df1).
  • En el segon argument indiquem el nom del segon marc de dades (df2).
  • I en el tercer argument indiquem la columna per la qual volem unir els marcs de dades ("cowc").
country.x code gdpcap pop cowc country.y lang
France FR 43518 67 FRN French Republic French
Germany DE 50801 83 GMY Federal Republic of Germany German
Czechia CZ 26378 11 CZR Czech Republic Czech
df <- full_join(df1, df2, by = c("cowc"))

9.3 Canviar l’idioma

Opcionalment, també podem canviar els noms a un idioma diferent de l’anglès. Els noms estan continguts en diferents vectors del marc de dades codelist, que és un dels objectes que conté el paquet countrycode. Per exemple, si consultem el vector cldr.name.ca veurem la llista de tots els noms de país en català.

CLDR respon al nom de Common Locale Data Repository, un repositori que registra termes amb centenars d’idiomes diferents.

Per canviar els noms, hem de fer una operació molt semblant a la que hem fet a la Taula 9.3. A dins de la funció countrycode(), en el primer argument indiquem la columna on es troba nom del codi de país que prendrem com a referència, en el següent argument especifiquem el sistema del codi en qüestió i en el tercer argument indicarem l’idioma al que ho volem transformar. També hem aprofitat per netejar el marc de dades i eliminar les columnes amb els noms de països en anglès.

codelist[,"cldr.name.ca"]
# A tibble: 288 × 1
   cldr.name.ca        
   <chr>               
 1 Afganistan          
 2 Illes Åland         
 3 Albània             
 4 Algèria             
 5 Samoa Nord-americana
 6 Andorra             
 7 Angola              
 8 Anguilla            
 9 Antàrtida           
10 Antigua i Barbuda   
# ℹ 278 more rows
pais code cowc gdpcap pop lang
França FR FRN 43518 67 French
Alemanya DE GMY 50801 83 German
Txèquia CZ CZR 26378 11 Czech
df$pais <- countrycode(df$code, "iso2c", "cldr.name.ca")
df[,c("pais", "code", "cowc", "gdpcap", "pop", "lang")]

Saber-ne més: Per practicar amb uns exercicis més avançats, opcionalment es pot anar al següent enllaç: Normes ISO i el sistema d’estats