Normes ISO i el sistema d'estats

Quants estats hi ha al món? Aquesta pregunta no té una resposta única si mirem el recompte que fa cada una de les diverses institucions que intenta categoritzar el sistema d’estats. Aquestes institucions estableixen un recompte anual en base a uns determinats criteris i assignen un codi a cada element del sistema –en el nostre cas, els estats–. Una de les institucions que fa aquesta tasca és l’Organització Internacional per a l’Estandardització (International Organization for Standardization en anglès, coneguda com a ISO), una organització no governamental que s’encarrega d’elaborar estàndards internacionals de tot tipus. La norma ISO 3166 és la que correspon al sistema d’estats. Aquesta norma classifica i codifica cada un dels estats existents en el sistema. Per exemple, Espanya rep dues codificacions: segons el codi de caràcters (iso3c), és SPN, i segons el codi numèric (iso3n), és 230. França, en el seu cas, rep les codificacions FRN i 220. Els Estats Units USA i 2.

Els estats són una de les principals unitats d’anàlisi en les bases de dades internacionals. És per això que quan estiguem examinant els estats en bases de dades, estarem implícitament utilitzant categoritzacions ja establertes, sigui la ISO 3166 o bé la d’alguna altra institució. El cert és que no només existeix una sola manera de classificar els estats, sinó vàries. Hi ha altres organitzacions que elaboren les seves pròpies nomenclatures, com el projecte Correlates of War (COW), Eurostat, el Banc Mundial … Per sort, tota aquesta diversitat està recollida en el paquet d’R countrycode, que examinarem en aquesta activitat. Per a això, en primer lloc carregarem a R aquest paquet juntament amb altres paquets que necessitarem per fer els exercicis que us proposem.

#recordeu que els paquets han d'estar prèviament instal·lats 
library(countrycode)
library(haven)
library(readr)
library(dplyr)
library(tidyr)
library(ggplot2)
library(readxl)

En la següent Figura 1, hem creat un diagrama de línies a partir del paquet countrycode, que respon a la pregunta: quants estats hi ha al món? Com veieu, és sorprenent que la quantitat d’estats que tenen registrats cada any diverses organitzacions internacionals i grups d’investigació tinguin tant poca coincidència. Si utilitzéssim una base de dades que pren com a referència la norma ISO 3166 (veure iso2c, iso3c, iso3n), ens trobaríem que el 1940 hi havia uns 150 estats registrats. En canvi, si prenem com a referència Polity IV (p4c), en tindríem menys de 75.

Número d'estats/any segons diverses bases de dades

Figure 1: Número d’estats/any segons diverses bases de dades

Al llarg del temps aquestes organitzacions no han tingut en compte el mateix nombre d’estats. Les seves classificacions varien perquè han emprat definicions diferents per acceptar què és un estat i què no ho és.

En aquesta secció explorarem el paquet d’R countrycode (Arel-Bundock, Enevoldsen, and Yetman 2018), que ens permetrà veure la importància d’aquestes classificacions quan treballem amb bases de dades internacionals. Per obrir el paquet a R podem teclejar countrycode:: i ens apareixerà un menú. També podem obrir qualsevol paquet anant a Global Environment i buscant-lo al desplegable. Veurem que countrycode té quatre elements principals:

  1. El marc de dades codelist_panel
  2. La funció countrycode()
  3. L’objecte codelist
  4. L’objecte cldr_examples

El marc de dades codelist_panel

Fixem-nos primer en el marc de dades codelist_panel. Observem que el paquet té 36 variables, que veiem desplegades de forma vertical, la primera de les quals és country.name.en. Aquesta variable conté els noms dels països, com Antigua & Barbuda. A la segona variable (year) hi tenim els anys. A partir de la tercera variable veiem els diferents tipus de codificació segons cada institució.

glimpse(codelist_panel)
## Observations: 30,806
## Variables: 36
## $ country.name.en     <chr> "Antigua & Barbuda", "Antigua & Barbuda", "Antigu…
## $ year                <int> 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1…
## $ ar5                 <chr> "LAM", "LAM", "LAM", "LAM", "LAM", "LAM", "LAM", …
## $ continent           <chr> "Americas", "Americas", "Americas", "Americas", "…
## $ cowc                <chr> "AAB", "AAB", "AAB", "AAB", "AAB", "AAB", "AAB", …
## $ cown                <int> 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 5…
## $ ecb                 <chr> "AG", "AG", "AG", "AG", "AG", "AG", "AG", "AG", "…
## $ eu28                <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ eurocontrol_pru     <chr> "Southern America", "Southern America", "Southern…
## $ eurocontrol_statfor <chr> "Mid-Atlantic", "Mid-Atlantic", "Mid-Atlantic", "…
## $ eurostat            <chr> "AG", "AG", "AG", "AG", "AG", "AG", "AG", "AG", "…
## $ fao                 <int> 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8…
## $ fips                <chr> "AC", "AC", "AC", "AC", "AC", "AC", "AC", "AC", "…
## $ gaul                <int> 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1…
## $ genc2c              <chr> "AG", "AG", "AG", "AG", "AG", "AG", "AG", "AG", "…
## $ genc3c              <chr> "ATG", "ATG", "ATG", "ATG", "ATG", "ATG", "ATG", …
## $ genc3n              <chr> "028", "028", "028", "028", "028", "028", "028", …
## $ gwc                 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ gwn                 <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ icao                <chr> "TA", "TA", "TA", "TA", "TA", "TA", "TA", "TA", "…
## $ icao_region         <chr> "T", "T", "T", "T", "T", "T", "T", "T", "T", "T",…
## $ imf                 <int> 311, 311, 311, 311, 311, 311, 311, 311, 311, 311,…
## $ ioc                 <chr> "ANT", "ANT", "ANT", "ANT", "ANT", "ANT", "ANT", …
## $ iso2c               <chr> "AG", "AG", "AG", "AG", "AG", "AG", "AG", "AG", "…
## $ iso3c               <chr> "ATG", "ATG", "ATG", "ATG", "ATG", "ATG", "ATG", …
## $ iso3n               <int> 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 2…
## $ p4c                 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ p4n                 <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ region              <chr> "Caribbean", "Caribbean", "Caribbean", "Caribbean…
## $ un                  <int> 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 2…
## $ unpd                <int> 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 2…
## $ vdem                <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ wb                  <chr> "ATG", "ATG", "ATG", "ATG", "ATG", "ATG", "ATG", …
## $ wb_api2c            <chr> "AG", "AG", "AG", "AG", "AG", "AG", "AG", "AG", "…
## $ wb_api3c            <chr> "ATG", "ATG", "ATG", "ATG", "ATG", "ATG", "ATG", …
## $ wvs                 <int> 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 2…

Exercici 1: A partir del resultat de glimpse(codelist_panel) i d’observar la Figura 1, respon a les següents preguntes:

  1. Fixa’t en les diferents variables del marc de dades. Sabries identificar el nom de la organització que correspon a cada sigla? Trobaràs la resposta a ?codelist. Escull i descriu-ne breument cinc de diferents.
  2. Observa la Figura 1 i respon breument:
  1. Per què hi ha un augment tant important de països el 1900?
  2. Per què hi ha tanta diferència entre cowc i p4c i la resta entre 1900 i 1960?
  3. Per què vdem, imf, fao o iso3n, que segueixen un mateix patró fins a 1950, segueixen línies diferents a partir de llavors?
  4. Escull una d’aquestes institucions i investiga la metodologia i la definició d’estat que fa servir.
  1. Per què necessitem estàndards internacionals? Busca a internet una altra codificació ISO (que no sigui la 3166) i comenta la seva rellevància en l’àmbit internacional.

Ara que ja ens hem familiaritzat amb algunes de les institucions que categoritzen els estats, anem a veure com els classifiquen. A continuació a la Taula 1 reproduïm un fragment del marc de dades codelist_panel. Per això hem transformat codelist_panel en l’objecte cc, mantenint només els valors corresponents a l’any 2000 i seleccionant només unes poques columnes. Veiem que els codis acostumen a tenir entre 2 i 3 xifres i solen estar format per caràcters (c) o per nombres (n). Per exemple, iso2n té dos nombres, cowc està format per caràcters, etc.

code <- as_tibble(countrycode::codelist_panel)
cc <- code %>%
  filter(year == 2000) %>% 
  select(country = country.name.en, iso2c, iso3c, iso3n, cowc, cown, eurostat, imf) %>%
  head(20)
cc
Table 1: Codis de països
country iso2c iso3c iso3n cowc cown eurostat imf
Antigua & Barbuda AG ATG 28 AAB 58 AG 311
Afghanistan AF AFG 4 AFG 700 AF 512
Albania AL ALB 8 ALB 339 AL 914
Algeria DZ DZA 12 ALG 615 DZ 612
Andorra AD AND 20 AND 232 AD NA
Angola AO AGO 24 ANG 540 AO 614
Argentina AR ARG 32 ARG 160 AR 213
Armenia AM ARM 51 ARM 371 AM 911
Australia AU AUS 36 AUL 900 AU 193
Austria AT AUT 40 AUS 305 AT 122
Azerbaijan AZ AZE 31 AZE 373 AZ 912
Bahrain BH BHR 48 BAH 692 BH 419
Barbados BB BRB 52 BAR 53 BB 316
Belgium BE BEL 56 BEL 211 BE 124
Benin BJ BEN 204 BEN 434 BJ 638
Burkina Faso BF BFA 854 BFO 439 BF 748
Bahamas BS BHS 44 BHM 31 BS 313
Bhutan BT BTN 64 BHU 760 BT 514
Belarus BY BLR 112 BLR 370 BY 913
Belize BZ BLZ 84 BLZ 80 BZ 339

Exercici 2: A continuació crearem un marc de dades personalitzat amb els països i variables que vulguem. Per això, ens haurem d’ajudar del codi següent i canviar alguns dels paràmetres:

  • Per canviar els països de la taula (substituint “Country1”, “Country2” pels països en qüestió) haureu de saber primer els noms exactes dels països. Ho podreu esbrinar amb unique(code$country.name.en).
  • També canviarem algunes columnes. Podeu obtenir una llista de les columnes amb names(code).
cc1 <- code %>%
  filter(country.name.en %in% c("Country 1", "Country 2"), #afegiu dos o més països, assegureu-vos que escriviu el nom de cada país correctament
         year == 2000) %>% # canvieu l'any
  select(country = country.name.en,
         iso2c, iso3c, iso3n, cowc, cown, eurostat, imf) #seleccioneu altres institucions
cc1 #imprimiu el marc de dades

La funció countrycode()

La principal utilitat del paquet countrycode recau en què ens permet equiparar (per posteriorment ajuntar) dades de països que provenen de bases de dades diferents. Suposem, per exemple, que tenim els dos següents marcs de dades:

country code gdp
France FR 30000
Germany GE 35000
country code lang
French Republic FRA French
Federal Republic of Germany FRG German

Com veieu, els dos marcs de dades contenen dades dels mateixos països: França i Alemanya. No obstant, no hi ha una manera òbvia d’ajuntar-los de forma automàtica per simil·litud de cel·les. Cada marc de dades es refereix al país d’una manera diferent i també utilitza un codi diferent.

  • Com que només tenim dues observacions, podríem ajuntar els marcs de dades de manera manual utilitzant programes com Excel.
  • Però imaginem-nos que tenim dades per un període de més de 50 anys de tots els països del món. Serien aproximadament 150 * 50 = 7.500 casos, de manera que ajuntar-ho de forma manual ens portaria moltes hores de feina.
  • Necessitem una forma automàtica que ens permeti fer aquesta operació. Així podríem, per exemple, enllaçar una base de dades que funcioni amb iso3c amb una base de dades del Banc Mundial que funciona amb wb d’una manera molt ràpida.
  • La funció countrycode() ens permet ajuntar marcs de dades de codis diferents.

Vegem com examinar els codis d’un marc de dades. Si recuperem el marc de dades cc que hem creat anteriorment, podem examinar la codificació dels països segons iso2c de la següent manera:

cc$iso2c
##  [1] "AG" "AF" "AL" "DZ" "AD" "AO" "AR" "AM" "AU" "AT" "AZ" "BH" "BB" "BE" "BJ"
## [16] "BF" "BS" "BT" "BY" "BZ"

Amb la funció countrycode() podem convertir aquestes codificacions en unes altres d’una manera molt senzilla. Fixeu-vos que a dins la funció hi ha tres arguments, separats per comes:

  • Com a primer argument de la funció indicarem on es troba el codi que volem transformar. En aquest exemple, indicaríem el marc de dades i la variable corresponent: cc$iso2c.
  • Com a segon argument indicarem quina és la nomenclatura d’aquest codi.
  • Com a tercer argument indicarem la nomenclatura a la que ho volem transformar.
countrycode(cc$iso2c, origin = "iso2c", destination = "wb")
##  [1] "ATG" "AFG" "ALB" "DZA" "AND" "AGO" "ARG" "ARM" "AUS" "AUT" "AZE" "BHR"
## [13] "BRB" "BEL" "BEN" "BFA" "BHS" "BTN" "BLR" "BLZ"

Fixeu-vos que la funció ens ha transformat els codis de iso2c, de dos caràcters, a codis de wb, de tres caràcters. Amb la funció countrycode() també podem saber, per exemple, a quina nomenclatura fao correspondria a Espanya si sabem la seva nomenclatura iso2c.

countrycode(c("ES"), "iso2c", "fao")
## [1] 203

Exercici 3: Selecciona un altre país que no sigui Espanya i prova la conversió d’iso2c a una altra nomenclatura que no sigui fao. Pots veure la llista de països amb:

View(distinct(code, country.name.en, iso2c))

Cas pràctic 1

Tenim el marc de dades següent, format per diverses variables. Els codis dels països es troben a la columna md_agr$code:

md_agr <- data.frame(country = c("France", "France", "United Kingdom", "United Kingdom", 
                              "Poland", "Poland", "Congo", "Congo"), 
                     code = c("FRN", "FRN", "UKG", "UKG", "POL", "POL", "CON", "CON"),
                     year = c(1980, 2010, 1980, 2010, 1980, 2010, 1980, 2010), 
                     dem = c(TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, FALSE), 
                     pib_cap = c(12672.18, 40638.33, 10032.06, 38893.02, 5241.75, 12597.86, 
                                 927.10, 2737.34), agr = c(56.8, 52.8, 76.8, 71.2, 64.5, 47.2, 30.8, 31),
                     stringsAsFactors = FALSE)

Podem visualitzar el marc de dades que acabem de crear teclejant md_agr.

Table 2: Marc de dades md_agr
country code year dem pib_cap agr
France FRN 1980 TRUE 12672.18 56.8
France FRN 2010 TRUE 40638.33 52.8
United Kingdom UKG 1980 TRUE 10032.06 76.8
United Kingdom UKG 2010 TRUE 38893.02 71.2
Poland POL 1980 FALSE 5241.75 64.5
Poland POL 2010 TRUE 12597.86 47.2
Congo CON 1980 FALSE 927.10 30.8
Congo CON 2010 FALSE 2737.34 31.0

Exercici 4: Volem transformar els valors de la columna code del marc de dades md_agr a iso3n. No obstant, desconeixem quina nomenclatura fa servir code.

  • Esbrina quina és la nomenclatura en qüestió. Hauràs de substituir els interrogants del codi i provar diverses combinacions fins que en trobis una que et faci la conversió correctament.
md_agr %>%
  mutate(code = countrycode(code, origin = "????", destination = "iso3n"))

Els objectes codelist i cldr_examples

El paquet countrycode no només ens permet modificar els codis dels països, sinó que també ens permet modificar els noms dels països a un altre idioma. És a dir, podem traduir en castellà, en català, en basc, en suahili o en qualsevol idioma els noms dels països d’una base de dades amb unes poques línies de codi. Fixeu-vos en la taula cldr_examples, que registra 622 maneres diferents d’anomenar els Territoris Francesos del Sud (CLDR respon al nom de Common Locale Data Repository, un repositori que registra termes amb centenars d’idiomes diferents).

Reproduïu la taula teclejant cldr_examples o feu sample(cldr_examples[,2], 10) vàries vegades per veure una mostra dels diferents idiomes que contempla. A la Taula 3 podeu veure’n una mostra:

Table 3: Noms de països CLDR
Code Example
cldr.name.fr_ca Terres australes françaises
cldr.name.gv TF
cldr.short.ki TF
cldr.short.kn ಫ್ರೆಂಚ್ ದಕ್ಷಿಣ ಪ್ರದೇಶಗಳು
cldr.short.ca Territoris Francesos del Sud
cldr.name.ee Anyiehe Franseme nutome
cldr.name.yo TF
cldr.variant.ta பிரெஞ்சு தெற்கு பிரதேசங்கள்
cldr.name.mfe TF
cldr.name.it Terre australi francesi
cldr.name.sr_latn_xk Francuske Južne Teritorije
cldr.short.ml ഫ്രഞ്ച് ദക്ഷിണ ഭൂപ്രദേശം
cldr.variant.cgg TF
cldr.short.ru Французские Южные территории
cldr.name.ur_in فرانسیسی جنوبی خطے
cldr.variant.ga Críocha Francacha Dheisceart an Domhain
cldr.name.mt It-Territorji Franċiżi tan-Nofsinhar
cldr.short.sr_latn Francuske Južne Teritorije
cldr.name.kkj TF
cldr.name.shi_latn TF
cldr.variant.ky Франциянын Түштүктөгү аймактары
cldr.name.kln TF
cldr.variant.it Terre australi francesi
cldr.variant.se_fi TF
cldr.short.ksf TF

L’objecte cldr_examples és només una petita mostra del que conté el marc de dades codelist, que és un exhaustiu marc de dades que emmagatzema centenars de codificacions de països i registres CLDR. Com veieu a la taula anterior, els noms de països tenen un codi de referència que comença per cldr, després hi figura name, variant o short i a continuació el que sembla una abreviació del nom de l’idioma.

Exercici 5: Observeu el marc de dades codelist amb glimpse(codelist). Al principi de la llista us apareixeran algunes variables que ja hem vist anteriorment. A continuació començaran a aparèixer les variables que comencen per cldr.

  1. Intenteu identificar les variables que corresponen al rus, el coreà, el japonès i el croat.
  2. Un cop hagueu identificat un idioma, podeu inspeccionar el contingut de la variable utilitzant com a plantilla els exemples següents. Només heu de substituir el codi que considereu oportú.
names(codelist) #si voleu consultar només els codis
codelist[,"cldr.name.ca"] #noms en català
codelist[,"cldr.name.es"] #noms en castellà
codelist[,"cldr.name.eu"] #noms en euskera

Amb el que hem après fins ara ja podem crear un marc de dades en qualsevol idioma del món. Per testar-ho, modificarem el marc de dades cc per tal que els noms dels països apareixin en un altre idioma. Ho podem fer amb la funció countrycode(). El resultat el podeu veure a la Taula 4.

cat <- cc #fem primer una còpia de l'objecte
cat$country <- countrycode(cat$country, #marquem la columna que volem modificar
                           origin = "country.name.en", #marquem el codi de la columna d'origen
                           destination = "cldr.name.ca") #marquem el codi de la columna de destí 
cat #observem el nou marc de dades
Table 4: Marc de dades en català
country iso2c iso3c iso3n cowc cown eurostat imf
Antigua i Barbuda AG ATG 28 AAB 58 AG 311
Afganistan AF AFG 4 AFG 700 AF 512
Albània AL ALB 8 ALB 339 AL 914
Algèria DZ DZA 12 ALG 615 DZ 612
Andorra AD AND 20 AND 232 AD NA
Angola AO AGO 24 ANG 540 AO 614
Argentina AR ARG 32 ARG 160 AR 213
Armènia AM ARM 51 ARM 371 AM 911
Austràlia AU AUS 36 AUL 900 AU 193
Àustria AT AUT 40 AUS 305 AT 122
Azerbaidjan AZ AZE 31 AZE 373 AZ 912
Bahrain BH BHR 48 BAH 692 BH 419
Barbados BB BRB 52 BAR 53 BB 316
Bèlgica BE BEL 56 BEL 211 BE 124
Benín BJ BEN 204 BEN 434 BJ 638
Burkina Faso BF BFA 854 BFO 439 BF 748
Bahames BS BHS 44 BHM 31 BS 313
Bhutan BT BTN 64 BHU 760 BT 514
Belarús BY BLR 112 BLR 370 BY 913
Belize BZ BLZ 84 BLZ 80 BZ 339

Exercici 6: Feu el mateix procediment però amb un altre idioma com s’indica a continuació.

  • Creeu una còpia de l’objecte cc amb el nom que vulgueu.
  • Introduïu el nom de l’objecte en la segona línea de codi i proposeu un nou idioma per al marc de dades.
????? <- cc #creem una còpia de l'objecte cc
?????$country <- countrycode(????$country, #indiqueu el nom de l'objecte creat
                           origin = "country.name.en", 
                           destination = "cldr.?????.???")  #proposeu un nou idioma

Cas pràctic 2

Volem fer un estudi sobre la democràcia i el covid, però tenim dades provinents de dues fonts diferents.

El nostre objectiu és crear un marc de dades únic, on el nom dels països hi figuri un idioma diferent a l’anglès.

Primer descarreguem i netegem les dades de democràcia. Ens generarà la Taula 5, que podeu imprimir teclejant polity. Observem que tenim dues columnes amb codis de país, una columna amb el nom del país i una amb la variable polity2, que ens mesura en un contínuum si un país és una democràcia (+10) o no ho és (-10).

polity <- haven::read_spss("http://www.systemicpeace.org/inscr/p5v2018.sav")
polity <- polity %>%
  filter(year == last(year)) %>%
  select(ccode, scode, country, polity2)
Table 5: Índex de democràcia Polity V
ccode scode country polity2
700 AFG Afghanistan -1
339 ALB Albania 9
615 ALG Algeria 2
540 ANG Angola -2
160 ARG Argentina 9
371 ARM Armenia 7

I descarreguem i netegem les dades del covid19. Ens generarà la Taula 6, que podeu imprimir teclejant covid.

download.file("https://www.ecdc.europa.eu/sites/default/files/documents/COVID-19-geographic-disbtribution-worldwide.xlsx", 
              "covid.xlsx")
covid <- read_xlsx("covid.xlsx")
covid <- covid %>%
  filter(year == "2020", month == "6", day == "11") %>%
  select(code = countryterritoryCode, country = countriesAndTerritories, 
         cases, deaths, popData2019, continentExp)

DESCÀRREGA: Si no us funciona el codi de descàrrega, descarregueu l’arxiu .xlsx manualment, ubiqueu-lo al vostre directori de treball i canvieu-li el nom per covid.xls. A continuació, cargueu-lo amb covid <- read_xlsx(“covid.xlsx”) i seguiu el codi

  • Una altra opció és el següent codi alternatiu, que requereix el paquet readr.
library(readr) #instal·ar paquet readr
covid <- read_csv("https://opendata.ecdc.europa.eu/covid19/casedistribution/csv")
covid <- covid %>% 
  filter(dateRep == "11/06/2020") %>%
  select(code = countryterritoryCode, country = countriesAndTerritories, 
         cases, deaths, popData2018, continentExp)

Table 6: Dades Covid-19 el 10 de juny de 2020
code country cases deaths popData2019 continentExp
AFG Afghanistan 684 21 38041757 Asia
ALB Albania 42 0 2880913 Europe
DZA Algeria 102 8 43053054 Africa
AND Andorra 0 0 77146 Europe
AGO Angola 17 0 31825299 Africa
AIA Anguilla 0 0 14872 America

Exercici 7: Examineu els marcs de dades polity i covid tal com t’apareixen a les taules 5 i 6:

  1. Fixeu-vos bé en les columnes on apareixen codis de països. Quines són? Hi ha alguna columna de codi de país en el primer marc de dades que sigui exactament igual en el segon?
  2. En cas de no coincidir, hi ha alguna manera amb la que podríem transformar les columnes d’un marc de dades per tal que siguin exactament iguals a l’altre marc de dades?

Segurament ens hem fixat que les variables polity$scode i covid$code són força semblants. Però a la primera, Algèria és ALG mentre que a la segona és DZA. Angola tampoc coincideix. Per tant, els marc de dades polity i covid no tenen codis de la mateixa nomenclatura. Això ens suposa un problema per unir els dos marcs de dades, ja que per enganxar-los hauríem de trobar alguna columna que sigui exactament igual a un i altre.
Anem a veure quines possibilitats ens ofereix el paquet countrycode si mirem el cas d’Algèria:

filter(codelist_panel, country.name.en == "Algeria", year == 2010) %>%
  gather()
##                    key           value
## 1      country.name.en         Algeria
## 2                 year            2010
## 3                  ar5             MAF
## 4            continent          Africa
## 5                 cowc             ALG
## 6                 cown             615
## 7                  ecb              DZ
## 8                 eu28            <NA>
## 9      eurocontrol_pru          Africa
## 10 eurocontrol_statfor    North-Africa
## 11            eurostat              DZ
## 12                 fao               4
## 13                fips              AG
## 14                gaul               4
## 15              genc2c              DZ
## 16              genc3c             DZA
## 17              genc3n             012
## 18                 gwc             ALG
## 19                 gwn             615
## 20                icao              DA
## 21         icao_region               D
## 22                 imf             612
## 23                 ioc             ALG
## 24               iso2c              DZ
## 25               iso3c             DZA
## 26               iso3n              12
## 27                 p4c             ALG
## 28                 p4n             615
## 29              region Northern Africa
## 30                  un              12
## 31                unpd              12
## 32                vdem             103
## 33                  wb             DZA
## 34            wb_api2c              DZ
## 35            wb_api3c             DZA
## 36                 wvs              12

Observem que hi ha vàries columnes on Algèria està codificat com a ALG, però deduïm que la columna que ens interessa és la p4c, ja que segons ?codelist respon p4c: Polity IV character country code. En el cas del segon marc de dades, veiem que hi ha vàries bases de dades que tenen Algèria codificat com a DZA. Haurem de provar diverses combinacions per trobar la correcta. El codi de partida per unir les dues bases de dades és el següent:

polity %>%
  mutate(country = countrycode(country, "country.name.en", "cldr.????.????"), #introduir idioma
         scode = countrycode(scode, "p4c", "????????")) %>% #introduir codi país
  inner_join(covid, by = c("scode" = "code")) %>%
  rename(country = country.x) %>% 
  select(-country.y)

EXERCICI FINAL: Modifiqueu els interrogants del codi anterior i proveu de trobar la combinació que us permeti crear un marc de dades semblant al que trobareu representat a la Taula 7.

  1. A la primera part heu d’introduir el codi d’idioma que vulgueu (no és necessari que sigui el que apareix a l’exemple).
  2. A la segona part heu d’introduir una nomenclatura de codi de país per tal que el codi del primer marc de dades s’ajusti al del segon marc de dades.
  3. Per decidir quin és el codi de país més apropiat, heu de prioritzar el que us generi el marc de dades amb més observacions (el que tingui el major nombre de files possible).
Table 7: Dades de Covid19 i democràcia
ccode scode country polity2 cases deaths popData2019 continentExp
700 AFG Afganistan -1 684 21 38041757 Asia
339 ALB Albània 9 42 0 2880913 Europe
615 DZA Algèria 2 102 8 43053054 Africa
540 AGO Angola -2 17 0 31825299 Africa
160 ARG Argentina 9 1239 18 44780675 America
371 ARM Armènia 7 428 10 2957728 Europe
900 AUS Austràlia 10 9 0 25203200 Oceania
305 AUT Àustria 10 34 1 8858775 Europe
373 AZE Azerbaidjan -7 339 4 10047719 Europe
692 BHR Bahrain -10 0 2 1641164 Asia
211 BEL Bèlgica 8 132 10 11455519 Europe
434 BEN Benín 7 0 0 11801151 Africa
439 BFA Burkina Faso 6 0 0 20321383 Africa
760 BTN Bhutan 7 3 0 763094 Asia
370 BLR Belarús -7 801 6 9452409 Europe
771 BGD Bangla Desh -6 3190 37 163046173 Asia
145 BOL Bolívia 7 637 25 11513102 America
346 BIH Bòsnia i Hercegovina NA 49 1 3300998 Europe
571 BWA Botswana 8 6 0 2303703 Africa
140 BRA Brasil 8 32913 1274 211049519 America
516 BDI Burundi -1 0 0 11530577 Africa
355 BGR Bulgària 9 0 0 7000039 Europe
811 KHM Cambodja -4 0 0 16486542 Asia
20 CAN Canadà 10 472 63 37411038 America
471 CMR Camerun -4 248 6 25876387 Africa
402 CPV Cap Verd 10 30 0 549936 Africa
482 CAF República Centreafricana 6 64 1 4745179 Africa
483 TCD Txad -2 2 1 15946882 Africa
155 CHL Xile 10 5737 192 18952035 America
710 CHN Xina -7 11 0 1433783692 Asia
100 COL Colòmbia 7 1604 61 50339443 America
581 COM Comores -3 0 0 850891 Africa
484 COG Congo - Brazzaville -4 17 1 5380504 Africa
94 CRI Costa Rica 10 86 1 5047561 America
344 HRV Croàcia 9 2 0 4076246 Europe
40 CUB Cuba -5 6 0 11333484 America
352 CYP Xipre 10 2 0 875899 Europe
316 CZE Txèquia 9 73 0 10649800 Europe
390 DNK Dinamarca 10 15 0 5806081 Europe
522 DJI Djibouti 3 42 0 973557 Africa
42 DOM República Dominicana 7 393 6 10738957 America
130 ECU Equador 5 523 30 17373657 America
651 EGY Egipte -4 1455 36 100388076 Africa
411 GNQ Guinea Equatorial -6 0 0 1355982 Africa
531 ERI Eritrea -7 0 0 3497117 Africa
366 EST Estònia 9 11 0 1324820 Europe
529 ETH Etiòpia 1 170 3 112078727 Africa
860 TLS Timor Oriental 8 0 0 129312 Asia
375 FIN Finlàndia 10 15 0 5517919 Europe
950 FJI Fiji 2 0 0 889955 Oceania
220 FRA França 9 545 23 67012883 Europe
481 GAB Gabon 3 81 1 2172578 Africa
420 GMB Gàmbia 4 0 0 2347696 Africa
452 GHA Ghana 8 157 0 30417858 Africa
255 DEU Alemanya 10 555 26 83019213 Europe
404 GNB Guinea Bissau 6 0 0 1920917 Africa
350 GRC Grècia 10 10 0 10724599 Europe
372 GEO Geòrgia 7 9 0 3996762 Europe
90 GTM Guatemala 8 355 27 17581476 America
438 GIN Guinea 4 0 0 12771246 Africa
110 GUY Guyana 7 0 0 782775 America
41 HTI Haití 5 134 2 11263079 America
91 HND Hondures 7 425 19 9746115 America
310 HUN Hongria 10 10 1 9664124 Europe
750 IND Índia 9 9996 357 1366417756 Asia
850 IDN Indonèsia 9 1240 36 270625567 Asia
205 IRL Irlanda 10 16 4 4904240 Europe
630 IRN Iran -7 2011 81 82913893 Asia
645 IRQ Iraq 6 1146 34 39309789 Asia
666 ISR Israel 6 87 0 8519373 Asia
325 ITA Itàlia 10 202 71 60550092 Europe
437 CIV Costa d’Ivori 4 186 3 25716554 Africa
51 JAM Jamaica 9 0 0 2948277 America
663 JOR Jordània -3 18 0 10101697 Asia
740 JPN Japó 10 41 1 126860299 Asia
501 KEN Kenya 9 105 1 52573967 Africa
690 KWT Kuwait -7 683 2 4207077 Asia
703 KGZ Kirguizistan 8 36 0 6415851 Asia
705 KAZ Kazakhstan -6 239 6 18551428 Asia
812 LAO Laos -7 0 0 7169456 Asia
367 LVA Letònia 8 3 0 1919968 Europe
450 LBR Libèria 7 14 0 4937374 Africa
660 LBN Líban 6 20 0 6855709 Asia
570 LSO Lesotho 8 0 0 2125267 Africa
620 LBY Líbia 0 46 0 6777453 Africa
368 LTU Lituània 10 6 2 2759631 Europe
212 LUX Luxemburg 10 3 0 61573 Europe
435 MRT Mauritània -2 0 0 4525698 Africa
343 MKD Macedònia 9 125 7 2083458 Europe
580 MDG Madagascar 6 24 1 26969306 Africa
820 MYS Malàisia 7 2 1 31949789 Asia
590 MUS Maurici 10 0 0 126967 Africa
553 MWI Malawi 6 0 0 18628749 Africa
70 MEX Mèxic 8 4883 708 127575529 America
359 MDA Moldàvia 9 296 6 4043258 Europe
432 MLI Mali 5 81 2 19658023 Africa
348 MNE Montenegro 9 0 0 627988 Europe
712 MNG Mongòlia 10 0 0 3225166 Asia
600 MAR Marroc -4 18 0 36471766 Africa
775 MMR Myanmar (Birmània) 8 3 0 54045422 Asia
541 MOZ Moçambic 5 19 0 30366043 Africa
565 NAM Namíbia 6 0 0 2494524 Africa
790 NPL Nepal 7 279 0 28608715 Asia
920 NZL Nova Zelanda 10 0 0 4783062 Oceania
93 NIC Nicaragua 6 155 9 6545503 America
475 NGA Nigèria 7 409 17 200963603 Africa
436 NER Níger 5 0 0 23310719 Africa
385 NOR Noruega 10 13 0 5328212 Europe
210 NLD Països Baixos 10 184 11 17282163 Europe
698 OMN Oman -8 689 1 4974992 Asia
770 PAK Pakistan 7 5834 101 216565317 Asia
95 PAN Panamà 9 656 10 424644 America
150 PRY Paraguai 9 15 0 7044639 America
135 PER Perú 9 5087 165 32510462 America
840 PHL Filipines 8 740 10 108116622 Asia
910 PNG Papua Nova Guinea 5 0 0 8776119 Oceania
290 POL Polònia 10 197 23 37972812 Europe
235 PRT Portugal 10 294 3 10276617 Europe
694 QAT Qatar -10 1716 4 2832071 Asia
732 KOR Corea del Sud 8 45 0 51225321 Asia
360 ROU Romania 9 196 15 19414458 Europe
365 RUS Rússia 4 8404 217 114587226 Europe
517 RWA Ruanda -3 13 0 12626938 Africa
560 ZAF República de Sud-àfrica 9 2430 48 58558267 Africa
92 SLV El Salvador 8 83 4 645355 America
670 SAU Aràbia Saudita -10 3717 36 34268529 Asia
626 SDN Sudan -4 185 17 42813237 Africa
433 SEN Senegal 7 124 2 16296362 Africa
342 SRB Sèrbia 8 66 1 8772228 Europe
451 SLE Sierra Leone 7 37 0 7813207 Africa
830 SGP Singapur -2 451 0 5804343 Asia
317 SVK Eslovàquia 10 2 0 5450421 Europe
349 SVN Eslovènia 10 2 1 2080908 Europe
520 SOM Somàlia 5 36 0 15442906 Africa
230 ESP Espanya 10 427 0 46937060 Europe
780 LKA Sri Lanka 6 10 0 21323734 Asia
525 SSD Sudan del Sud 0 0 0 11062114 Africa
115 SUR Surinam 5 0 0 581363 America
572 SWZ Swazilàndia -9 27 0 1148133 Africa
380 SWE Suècia 10 890 78 10230185 Europe
225 CHE Suïssa 10 23 12 8591361 Europe
652 SYR Síria -9 6 0 17070132 Asia
702 TJK Tadjikistan -3 73 0 9321023 Asia
510 TZA Tanzània 3 0 0 58005461 Africa
800 THA Tailàndia -3 0 0 69625581 Asia
461 TGO Togo -2 21 0 8082359 Africa
52 TTO Trinitat i Tobago 10 0 0 1394969 America
616 TUN Tunísia 7 0 0 11694721 Africa
640 TUR Turquia -4 922 17 83429607 Asia
696 ARE Emirats Àrabs Units -8 603 1 9770526 Asia
500 UGA Uganda -1 8 0 44269587 Africa
200 GBR Regne Unit 8 1003 245 66647112 Europe
369 UKR Ucraïna 4 525 23 43993643 Europe
165 URY Uruguai 10 1 0 3461731 America
2 USA Estats Units 8 20614 918 329064917 America
704 UZB Uzbekistan -9 148 1 32981715 Asia
101 VEN Veneçuela -3 106 0 28515829 America
818 VNM Vietnam -7 0 0 96462108 Asia
679 YEM Iemen 0 36 2 29161922 Asia
490 COD Congo - Kinshasa -3 131 6 86790568 Africa
551 ZMB Zàmbia 6 52 0 17861034 Africa
552 ZWE Zimbàbue 4 6 0 14645473 Africa

Referències

Arel-Bundock, Vincent, Nils Enevoldsen, and CJ Yetman. 2018. “Countrycode An R package to convert country names and country codes.” Journal of Open Source Software 28 (3): 848.

Marshall, Monty G., and Ted Robert Gurr. 2020. “Polity V. Political Regime Characteristics and Transitions, 1800-2018.” Center for Systemic Peace.

Next