Las normas ISO y el sistema de estados
¿Cuantos estados hay en el mundo? Esta pregunta no tiene una única respuesta si observamos el recuento que realiza cada una de las diversas instituciones que intenta categorizar el sistema de estados. Estas instituciones establecen un recuento anual en base a unos criterios determinados y asignan un código a cada elemento del sistema –en nuestro caso, los estados–. Una de las instituciones que realiza esta tarea es la Organización Internacional para la Estandarización (International Organization for Standardization en inglés, conocida como ISO), una organización no gubernamental que se encarga de elaborar estándares internacionales de todo tipo. La norma ISO 3166 es la que corresponde al sistema de estados. Esta norma clasifica y codifica cada uno de los estados existentes en el sistema. Por ejemplo, España recibe dos codificaciones: según el código de caracteres (iso3c), es SPN, y según el código numérico (iso3n), es 230. Francia, en su caso, recibe las codificaciones FRN y 220. Los Estados Unidos USA y 2.
Los estados son una de las principales unidades de análisis en las bases de datos internacionales. Es por ello que cuando estamos examinando los estados en bases de datos, estaremos implícitamente utilizando categorizaciones ya establecidas, sea la ISO 3166 o bien la de alguna otra institución. Lo cierto es que no sólo existe una sola manera de clasificar los estados, sino varias. Hay otras organizaciones que elaboran sus propias nomenclaturas, como el proyecto Correlates of War (COW), Eurostat, el Banco Mundial … Por suerte, toda esta diversidad está recogida en el paquete de R countrycode
, que examinaremos en esta actividad. Para ello, en primer lugar cargaremos a R este paquete junto con otros paquetes que necesitaremos para hacer los ejercicios que os proponemos.
#recordad que los paquetes tienen que estar previamente instalados
library(countrycode)
library(haven)
library(readr)
library(dplyr)
library(tidyr)
library(ggplot2)
library(readxl)
A partir del paquete de R countrycode (Arel-Bundock, Enevoldsen, and Yetman 2018), hemos creado un diagrama de líneas en la Figura 1 que responde a la pregunta: cuántos estados hay en el mundo? Observamos como, sorprendentemente, la cantidad de estados que tienen registrados cada año varias organizaciones internacionales y grupos de investigación tengan tan poca coincidencia. Si utilizáramos, por ejemplo, una base de datos que toma como referencia la norma ISO 3166 (ver iso2c, iso3c, iso3n), nos encontraríamos que en 1940 había unos 150 estados registrados. En cambio, si tomamos como referencia Polity IV (p4c), tendríamos menos de 75.
OBSERVA: Tal y como se observa en la Figura 1, estas organizaciones no han tenido en cuenta el mismo número de estados a lo largo del tiempo. Sus clasificaciones varían porque han considerado elementos distintos para aceptar que es un estado y qué no lo es:
- ¿Por qué hay un aumento tan importante de países el 1900?
- ¿Por qué hay tanta diferencia entre
cowc
yp4c
y el resto entre 1900 y 1960? - ¿Por qué
vdem
,imf
,fao
oiso3n
, que siguen un mismo patrón hasta 1950, siguen líneas diferentes a partir de entonces?
En esta sección exploraremos el paquete countrycode
, que nos permitirá ver la importancia de estas clasificaciones cuando trabajamos con bases de datos internacionales. Para abrir el paquete en R podemos teclear countrycode::
y nos aparecerá un menú. También podemos abrir cualquier paquete yendo a Global Environment y buscándolo en el desplegable. Veremos que countrycode
tiene cuatro elementos principales:
- El marco de datos
codelist_panel
- La función
countrycode()
- El objeto
codelist
- El objeto
cldr_examples
El marco de datos codelist_panel
Fijémonos primero en el marco de datos codelist_panel
. Observamos que el paquete tiene 48 variables, que vemos desplegadas de forma vertical, la primera de las cuales es country.name.en
. Esta variable contiene los nombres de los países, como Afghanistan. En la segunda variable (year
) tenemos los años. A partir de la tercera variable vemos los diferentes tipos de codificación según cada organización o grupo de investigación internacional. Podemos consultar la mayoria de nombres de instituciones con ?codelist
.
glimpse(codelist_panel)
## Rows: 28,542
## Columns: 48
## $ country.name.en <chr> "Afghanistan", "Afghanistan", "Afghanistan"…
## $ year <dbl> 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1…
## $ ar5 <chr> "ASIA", "ASIA", "ASIA", "ASIA", "ASIA", "AS…
## $ cctld <chr> ".af", ".af", ".af", ".af", ".af", ".af", "…
## $ continent <chr> "Asia", "Asia", "Asia", "Asia", "Asia", "As…
## $ country.name.de <chr> "Afghanistan", "Afghanistan", "Afghanistan"…
## $ country.name.de.regex <chr> "afghan", "afghan", "afghan", "afghan", "af…
## $ country.name.en.regex <chr> "afghan", "afghan", "afghan", "afghan", "af…
## $ cowc <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ cown <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ currency <chr> "Afghani", "Afghani", "Afghani", "Afghani",…
## $ dhs <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "…
## $ ecb <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "…
## $ eu28 <chr> "NA", "NA", "NA", "NA", "NA", "NA", "NA", "…
## $ eurocontrol_pru <chr> "Asia", "Asia", "Asia", "Asia", "Asia", "As…
## $ eurocontrol_statfor <chr> "Asia/Pacific", "Asia/Pacific", "Asia/Pacif…
## $ eurostat <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "…
## $ fao <dbl> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2…
## $ fips <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "…
## $ gaul <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ genc2c <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "…
## $ genc3c <chr> "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "…
## $ genc3n <chr> "004", "004", "004", "004", "004", "004", "…
## $ gwc <chr> "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "…
## $ gwn <dbl> 700, 700, 700, 700, 700, 700, 700, 700, 700…
## $ icao.region <chr> "ASIAPAC", "ASIAPAC", "ASIAPAC", "ASIAPAC",…
## $ imf <dbl> 512, 512, 512, 512, 512, 512, 512, 512, 512…
## $ ioc <chr> "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "…
## $ iso2c <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "…
## $ iso3c <chr> "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "…
## $ iso3n <dbl> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4…
## $ iso4217c <chr> "AFN", "AFN", "AFN", "AFN", "AFN", "AFN", "…
## $ iso4217n <dbl> 971, 971, 971, 971, 971, 971, 971, 971, 971…
## $ p4c <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ p4n <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ region <chr> "South Asia", "South Asia", "South Asia", "…
## $ region23 <chr> "Southern Asia", "Southern Asia", "Southern…
## $ un <dbl> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4…
## $ un.region.code <chr> "142", "142", "142", "142", "142", "142", "…
## $ un.regionintermediate.code <chr> "NA", "NA", "NA", "NA", "NA", "NA", "NA", "…
## $ un.regionsub.code <chr> "34", "34", "34", "34", "34", "34", "34", "…
## $ unicode.symbol <chr> "\U0001f1e6\U0001f1eb", "\U0001f1e6\U0001f1…
## $ unpd <dbl> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4…
## $ vdem <dbl> 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,…
## $ wb <chr> "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "…
## $ wb_api2c <chr> "AF", "AF", "AF", "AF", "AF", "AF", "AF", "…
## $ wb_api3c <chr> "AFG", "AFG", "AFG", "AFG", "AFG", "AFG", "…
## $ wvs <dbl> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4…
Ejercicio 1: A partir del resultado de glimpse(codelist_panel)
y de observar la Figura 1, responde a las siguientes preguntas:
- Fíjate en las diferentes variables del marco de datos. Sabrías identificar el nombre de la organización que corresponde a cada sigla? Encontrarás la respuesta en
?codelist
. Escoge y describe brevemente cinco de ellas. - Escoge una de estas instituciones e investiga la metodología y la definición de estado que usa.
- ¿Por qué necesitamos estándares internacionales? Busca en internet otra codificación ISO (que no sea la 3166) y comenta su relevancia en el ámbito internacional.
Ahora que ya nos hemos familiarizado con algunas de las instituciones que categorizan los estados, vamos a ver como los clasifican. A continuación, en la Tabla 1, reproducimos un fragmento del marco de datos codelist_panel
. Para ello hemos transformado codelist_panel
en el objeto cc
:
- Hemos mantenido solo los valores correspondientes al año 2000.
- Hemos seleccionando solo unas pocas columnas, la de country.name.en (que hemos renombrado como country), y las iso2c, iso3c, iso3n, cowc, cown, eurostat e imf.
Observamos que los códigos acostumbran a tener entre 2 y 3 cifras y suelen estar formados por caracteres (c
) o por números (n
). Por ejemplo, iso2n
tiene dos números, cowc
está formado por caracteres, etc.
cc <- codelist_panel %>%
filter(year == 2000) %>%
select(country = country.name.en, iso2c, iso3c, iso3n, cowc, cown, eurostat, imf) %>%
head(20)
cc
country | iso2c | iso3c | iso3n | cowc | cown | eurostat | imf |
---|---|---|---|---|---|---|---|
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 |
Antigua & Barbuda | AG | ATG | 28 | AAB | 58 | AG | 311 |
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 |
Bahamas | BS | BHS | 44 | BHM | 31 | BS | 313 |
Bahrain | BH | BHR | 48 | BAH | 692 | BH | 419 |
Bangladesh | BD | BGD | 50 | BNG | 771 | BD | 513 |
Barbados | BB | BRB | 52 | BAR | 53 | BB | 316 |
Belarus | BY | BLR | 112 | BLR | 370 | BY | 913 |
Belgium | BE | BEL | 56 | BEL | 211 | BE | 124 |
Belize | BZ | BLZ | 84 | BLZ | 80 | BZ | 339 |
Benin | BJ | BEN | 204 | BEN | 434 | BJ | 638 |
Bhutan | BT | BTN | 64 | BHU | 760 | BT | 514 |
PRACTICA 1: A continuación crearemos un marco de datos personalizado con los países y variables que queramos. Por ello, habrá que ayudar del código siguiente y cambiar algunos de los parámetros:
- Para cambiar los países de la tabla (sustituyendo “Country1,” “Country2” por los países en cuestión) deberéis de saber primero los nombres exactos de los paises. Utilizad
unique(codelist_panel$country.name.en)
. - También cambiaremos algunas columnas. Podéis obtener una lista de las columnas con
names(codelist_panel)
.
cc1 <- codelist_panel %>%
filter(country.name.en %in% c("Country 1", "Country 2", "Country 3"), #añadid dos o más países, aseguraros que escribís el nombre de cada país correctamente
year %in% c(1970, 2010)) %>% # cambiad el año
select(country = country.name.en,
iso2c, iso3c, iso3n, cowc, cown, eurostat, imf) #seleccionad otras instituciones
cc1 #imprimid el marco de datos
La función countrycode()
La principal utilidad del paquete countrycode recae en que nos permite equiparar (para posteriormente juntar) datos de países que provienen de bases de datos diferentes. Supongamos, por ejemplo, que tenemos los dos siguientes marcos de datos:
country | code | gdp |
---|---|---|
France | FR | 30000 |
Germany | GE | 35000 |
country | code | lang |
---|---|---|
French Republic | FRA | French |
Federal Republic of Germany | FRG | German |
Como podéis observar, los dos marcos de datos contienen datos de los mismos países: Francia y Alemania. Sin embargo, no hay una manera obvia de juntarlos de forma automática por similitud de celdas. Cada marco de datos se refiere al país de una manera diferente y también utiliza un código diferente.
- Como sólo tenemos dos observaciones, una solución sería juntar los marcos de datos de manera manual usando programas tipo Excel.
- Pero imaginemos que tenemos datos por un período de más de 50 años de todos los países del mundo. Serían aproximadamente 150 * 50 = 7.500 casos, de manera que ajuntarlos de forma manual nos llevaría muchas horas de trabajo.
- Necesitamos una forma automática que nos permita hacer esta operación. Así podríamos, por ejemplo, enlazar de una manera muy rápida una base de datos que funcione con
iso3c
con la base de datos del Banco Mundial, que funciona conwb
. - La función
countrycode()
nos permite juntar marcos de datos con códigos distintos.
Veamos cómo examinar los códigos de un marco de datos. Si recuperamos el marco de datos cc
que hemos creado anteriormente, podemos examinar la codificación de los países según iso2c
de la siguiente manera:
cc$iso2c
## [1] "AF" "AL" "DZ" "AD" "AO" "AG" "AR" "AM" "AU" "AT" "AZ" "BS" "BH" "BD" "BB"
## [16] "BY" "BE" "BZ" "BJ" "BT"
Con la función countrycode()
podemos convertir estas codificaciones en unas otras de manera muy sencilla. Fijaos que dentro de la función hay tres argumentos, separados por comas:
- Como primer argumento de la función indicaremos donde se encuentra el código que queremos transformar. En este ejemplo, indicaríamos el marco de datos y la variable correspondiente:
cc$iso2c
. - Como segundo argumento indicaremos cuál es la nomenclatura de este código.
- Como tercer argumento indicaremos la nomenclatura a la que lo queremos transformar.
countrycode(cc$iso2c, origin = "iso2c", destination = "wb")
## [1] "AFG" "ALB" "DZA" "AND" "AGO" "ATG" "ARG" "ARM" "AUS" "AUT" "AZE" "BHS"
## [13] "BHR" "BGD" "BRB" "BLR" "BEL" "BLZ" "BEN" "BTN"
Fijaos que la función nos ha transformado los códigos de iso2c
, de dos caracteres, a códigos de wb
, de tres caracteres. Con la función countrycode()
también podemos saber, por ejemplo, a qué nomenclatura fao
correspondería a España si supiéramos su nomenclatura iso2c
.
countrycode(c("ES"), "iso2c", "fao")
## [1] 203
PRACTICA 2: Selecciona otro país que no sea España y prueba la conversión de iso2c
a otra nomenclatura que no sea fao
. Puedes ver la lista de países con:
View(distinct(code, country.name.en, iso2c))
Caso práctico 1
Tenemos el marco de datos siguiente, formado por diversas variables. Los códigos de los países se encuentran en 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)
Podemos visualizar el marco de datos que acabamos de crear tecleando 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 |
Ejercicio 2: Queremos transformar los valores de la columna code
del marco de datos md_agr
a iso3n
. No obstante, desconocemos cuál es la nomenclatura utilizada en code
.
- Averigua cuál es la nomenclatura en cuestión. Tendrás que substituir los interrogantes del código y probar diferentes combinaciones hasta que encuentres una que te realice la conversión correctamente.
md_agr %>%
mutate(code = countrycode(code, origin = "????", destination = "iso3n"))
Los objetos codelist
i cldr_examples
El paquete countrycode no solo nos permite modificar los códigos de los países, sino que también nos permite modificar los nombres de los países a otro idioma. Es decir, podemos traducir en castellano, en catalán, en euskera, en suahili o en cualquier idioma los nombres de los países de una base de datos con unas pocas líneas de código. Fijaros en la Tabla cldr_examples
que registra 622 maneras diferentes de denominar los Territorios Franceses del Sur (CLDR responde al nombre de Common Locale Date Repository, un repositorio que registra terminos con centenares de idiomas diferentes).
Reproducid la tabla tecleando cldr_examples
o podéis hacer sample(cldr_examples[,2], 10)
diversas veces para observar varias muestras de los diferentes idiomas que contempla. En la Tabla 3 podéis ver una muestra:
Code | Example |
---|---|
cldr.variant.fa_af | سرزمینهای جنوب فرانسه |
cldr.name.bas | TF |
cldr.name.es_mx | Territorios Australes Franceses |
cldr.variant.nb | De franske sørterritorier |
cldr.short.ru_ua | Французские Южные территории |
cldr.name.ps_pk | د فرانسے جنوبي سیمے |
cldr.variant.mn | Францын өмнөд газар нутаг |
cldr.variant.sr_latn | Francuske Južne Teritorije |
cldr.name.mgo | TF |
cldr.variant.ko_kp | 프랑스 남부 지방 |
cldr.short.om | TF |
cldr.name.dyo | TF |
cldr.variant.th | เฟรนช์เซาเทิร์นเทร์ริทอรีส์ |
cldr.name.ckb | هەرێمە باشووریەکانی فەرەنسا |
cldr.variant.zgh | TF |
cldr.variant.fur | Teritoris meridionâi francês |
cldr.variant.as | দক্ষিণ ফ্ৰান্সৰ অঞ্চল |
cldr.short.qu | Territorios Australes Franceses |
cldr.variant.jgo | TF |
cldr.variant.pl | Francuskie Terytoria Południowe i Antarktyczne |
cldr.short.kk | Францияның оңтүстік аймақтары |
cldr.short.dz | ཕྲནཅ་གི་ལྷོ་ཕྱོགས་མངའ་ཁོངས |
cldr.name.twq | TF |
cldr.short.ee | Anyiehe Franseme nutome |
cldr.name.ksb | TF |
El objeto cldr_examples
es solo una pequeña muestra de lo que contiene el marco de datos codelist
, que es un exhaustivo marco de datos que alberga centenares de codificaciones de países y registros CLDR. Como veis a la tabla anterior, los nombres de países tienen un código de referencia que empieza por cldr
, después figura name
, variant
o short
y a continuación lo que parece una abreviación del nombre del idioma.
PRACTICA 3: Observad el marco de datos codelist
con glimpse(codelist)
. Al principio de la lista os aparecerán algunas variables que ya hemos visto anteriormente. A continuación comenzarán a aparecer las variables que empiezan por cldr
.
- Intentad identificar las variables que corresponden al ruso, el coreano, el japonés y el croata.
- Una vez identificado un idioma, podéis inspeccionar el contenido de la variable utilizando como plantilla los ejemplos siguientes. Solo tenéis que substituir el código que consideréis oportuno.
names(codelist) #si queréis consultar solo los códigos
codelist[,"cldr.name.ca"] #ver nombres en catalán
codelist[,"cldr.name.es"] #ver nombres en castellano
codelist[,"cldr.name.eu"] #ver nombres en euskera
Con lo que hemos aprendido hasta ahora ya podemos crear un marco de datos en cualquier idioma del mundo. Para testarlo, modificaremos el marco de datos cc
para que los nombres de los países nos aparezcan en otro idioma. Lo podemos hacer con la función countrycode()
. El resultado lo podéis ver en la Tabla 4.
eus <- cc #hacemos primero una copia del objeto
eus <- eus %>%
mutate(country = countrycode(country, #marcamos la columna que queremos modificar
origin = "country.name.en", #marcamos el código de la columna de origen
destination = "cldr.name.eu")) #marcamos el código de la columna de destino
eus #observamos el nuevo marco de datos
country | iso2c | iso3c | iso3n | cowc | cown | eurostat | imf |
---|---|---|---|---|---|---|---|
Afganistan | AF | AFG | 4 | AFG | 700 | AF | 512 |
Albania | AL | ALB | 8 | ALB | 339 | AL | 914 |
Aljeria | DZ | DZA | 12 | ALG | 615 | DZ | 612 |
Andorra | AD | AND | 20 | AND | 232 | AD | NA |
Angola | AO | AGO | 24 | ANG | 540 | AO | 614 |
Antigua eta Barbuda | AG | ATG | 28 | AAB | 58 | AG | 311 |
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 |
Bahamak | BS | BHS | 44 | BHM | 31 | BS | 313 |
Bahrain | BH | BHR | 48 | BAH | 692 | BH | 419 |
Bangladesh | BD | BGD | 50 | BNG | 771 | BD | 513 |
Barbados | BB | BRB | 52 | BAR | 53 | BB | 316 |
Bielorrusia | BY | BLR | 112 | BLR | 370 | BY | 913 |
Belgika | BE | BEL | 56 | BEL | 211 | BE | 124 |
Belize | BZ | BLZ | 84 | BLZ | 80 | BZ | 339 |
Benin | BJ | BEN | 204 | BEN | 434 | BJ | 638 |
Bhutan | BT | BTN | 64 | BHU | 760 | BT | 514 |
PRACTICA 4: Realizad el mismo procedimiento pero con otro idioma como se indica a continuación.
- Cread una copia del objeto
cc
con el nombre que queráis. - Introducid el nombre del objeto en la segunda línea de código y proponed un nuevo idioma para el marco de datos.
????? <- cc #creamos una copia del objeto cc
????? <- ????? %>%
mutate(country = countrycode(country,
origin = "country.name.en",
destination = "cldr.?????.???")) #proponed un nuevo idioma
Caso práctico 2
Queremos hacer un estudio sobre la democracia i el covid, pero tenemos datos procedentes de dos fuentes diferentes.
- Los datos de democracia proceden de la base de datos Polity V (Marshall and Gurr 2020).
- Los datos de covid19 proceden del European Centre for Disease Prevention and Control.
Nuestro objetivo es crear un marco de datos único, donde el nombre de los países figure en un idioma diferente al inglés.
Primero descargamos y limpiamos los datos de democracia. Se nos generará la Tabla 5, que podéis imprimir tecleando polity
. Observamos que tenemos dos columnas con códigos de país, una columna con el nombre del país y una con la variable polity2
, que nos mide en un contínuum si un país es una democracia (+10) o no lo es (-10).
polity <- haven::read_spss("http://www.systemicpeace.org/inscr/p5v2018.sav")
polity <- polity %>%
filter(year == last(year)) %>%
select(ccode, scode, country, polity2)
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 |
Y descargamos y limpiamos los datos del covid19. Nos generará la Tabla 6, que podemos imprimir tecleando 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)
DESCARGA: Si no os funciona el código de descarga, descargad el archivo .xlsx manualmente, ubicadlo en vuestro directorio de trabajo y cambiadle el nombre por covid.xlsx. A continuación, cargadlo con covid <- read_xlsx(“covid.xlsx”)
y seguid el código.
- Otra opción es el siguiente código alternativo, que requiere el paquete
readr
.
library(readr) #instalar paquete 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, popData2019, continentExp)
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 |
Ejercicio 3: Examinad los marcos de datos polity
y covid
tal y como aparecen en las tablas 5 y 6:
- Observad las columnas donde aparecen códigos de países. ¿Cuáles son? ¿Hay alguna columna de código de país en el primer marco de datos que sea exactamente igual en el segundo?
- En caso de no coincidir, ¿conoces alguna manera con la que pudiéramos transformar las columnas de un marco de datos para que sean exactamente iguales al otro marco de datos?
qué pensáis que podríamos hacer para tener dos columnas que sean exactamente iguales a cada marco de datos a partir de lo que hemos aprendido hasta ahora.
Seguramente nos hemos fijado que las variables polity$scode
y covid$code
son bastante parecidas. Pero en la primera, Argelia es ALG mientras que en la segunda es DZA. Angola tampoco coincide. Por lo tanto, los marcos de datos polity
y covid
no tienen códigos de la misma nomenclatura. Esto nos supone un problema para unir los dos marcos de datos, puesto que para engancharlos tendríamos que encontrar alguna columna que sea exactamente igual en uno y otro.
Vamos a ver qué posibilidades nos ofrece el paquete countrycode
si miramos el caso de Algeria:
filter(codelist_panel, country.name.en == "Algeria", year == 2010) %>%
gather()
## # A tibble: 48 × 2
## key value
## <chr> <chr>
## 1 country.name.en Algeria
## 2 year 2010
## 3 ar5 MAF
## 4 cctld .dz
## 5 continent Africa
## 6 country.name.de Algerien
## 7 country.name.de.regex algerien
## 8 country.name.en.regex algeria
## 9 cowc ALG
## 10 cown 615
## # … with 38 more rows
Observamos que hay varias columnas donde Argelia está codificado como ALG, pero deducimos que la columna que nos interesa es la p4c
, ya que si tecleamos ?codelist
vemos que responde a p4c: Polity IV character country code. En el caso del segundo marco de datos, vemos que hay varias bases de datos que tienen Argelia codificado como DZA. Tendremos que probar varias combinaciones para encontrar la correcta. El código de partida para unir las dos bases de datos es el siguiente:
polity %>%
mutate(country = countrycode(country, "country.name.en", "cldr.????.????"), #introduir idioma
scode = countrycode(scode, "p4c", "????????")) %>% #introducir código país
inner_join(covid, by = c("scode" = "code")) %>%
rename(country = country.x) %>%
select(-country.y)
EJERCICIO FINAL: Modificad los interrogantes del código anterior y probad de encontrar la combinación que os permita crear un marco de datos parecido al que encontrareis representado en la Tabla 7.
- En la primera parte tenéis que introducir el código de idioma que queráis (no es necesario que sea el que aparece en el ejemplo).
- En la segunda parte tenéis que introducir una nomenclatura de código de país para que el código del primer marco de datos se ajuste al del segundo marco de datos.
- Para decidir cuál es el código de país más apropiado, tenéis que priorizar el que os genere el marco de datos con mas observaciones (el que tenga el mayor numero de filas posible).
ccode | scode | country | polity2 | cases | deaths | popData2019 | continentExp |
---|---|---|---|---|---|---|---|
700 | AFG | Afganistan | -1 | 684 | 21 | 38041757 | Asia |
339 | ALB | Albania | 9 | 42 | 0 | 2880913 | Europe |
615 | DZA | Aljeria | 2 | 102 | 8 | 43053054 | Africa |
540 | AGO | Angola | -2 | 17 | 0 | 31825299 | Africa |
160 | ARG | Argentina | 9 | 1239 | 18 | 44780675 | America |
371 | ARM | Armenia | 7 | 428 | 10 | 2957728 | Europe |
900 | AUS | Australia | 10 | 9 | 0 | 25203200 | Oceania |
305 | AUT | Austria | 10 | 34 | 1 | 8858775 | Europe |
373 | AZE | Azerbaijan | -7 | 339 | 4 | 10047719 | Europe |
692 | BHR | Bahrain | -10 | 0 | 2 | 1641164 | Asia |
211 | BEL | Belgika | 8 | 132 | 10 | 11455519 | Europe |
434 | BEN | Benin | 7 | 0 | 0 | 11801151 | Africa |
439 | BFA | Burkina Faso | 6 | 0 | 0 | 20321383 | Africa |
760 | BTN | Bhutan | 7 | 3 | 0 | 763094 | Asia |
370 | BLR | Bielorrusia | -7 | 801 | 6 | 9452409 | Europe |
771 | BGD | Bangladesh | -6 | 3190 | 37 | 163046173 | Asia |
145 | BOL | Bolivia | 7 | 637 | 25 | 11513102 | America |
346 | BIH | Bosnia-Herzegovina | 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 | Bulgaria | 9 | 0 | 0 | 7000039 | Europe |
811 | KHM | Kanbodia | -4 | 0 | 0 | 16486542 | Asia |
20 | CAN | Kanada | 10 | 472 | 63 | 37411038 | America |
471 | CMR | Kamerun | -4 | 248 | 6 | 25876387 | Africa |
402 | CPV | Cabo Verde | 10 | 30 | 0 | 549936 | Africa |
482 | CAF | Afrika Erdiko Errepublika | 6 | 64 | 1 | 4745179 | Africa |
483 | TCD | Txad | -2 | 2 | 1 | 15946882 | Africa |
155 | CHL | Txile | 10 | 5737 | 192 | 18952035 | America |
710 | CHN | Txina | -7 | 11 | 0 | 1433783692 | Asia |
100 | COL | Kolonbia | 7 | 1604 | 61 | 50339443 | America |
581 | COM | Komoreak | -3 | 0 | 0 | 850891 | Africa |
484 | COG | Kongo | -4 | 17 | 1 | 5380504 | Africa |
94 | CRI | Costa Rica | 10 | 86 | 1 | 5047561 | America |
344 | HRV | Kroazia | 9 | 2 | 0 | 4076246 | Europe |
40 | CUB | Kuba | -5 | 6 | 0 | 11333484 | America |
352 | CYP | Zipre | 10 | 2 | 0 | 875899 | Europe |
316 | CZE | Txekia | 9 | 73 | 0 | 10649800 | Europe |
390 | DNK | Danimarka | 10 | 15 | 0 | 5806081 | Europe |
522 | DJI | Djibuti | 3 | 42 | 0 | 973557 | Africa |
42 | DOM | Dominikar Errepublika | 7 | 393 | 6 | 10738957 | America |
130 | ECU | Ekuador | 5 | 523 | 30 | 17373657 | America |
651 | EGY | Egipto | -4 | 1455 | 36 | 100388076 | Africa |
411 | GNQ | Ekuatore Ginea | -6 | 0 | 0 | 1355982 | Africa |
531 | ERI | Eritrea | -7 | 0 | 0 | 3497117 | Africa |
366 | EST | Estonia | 9 | 11 | 0 | 1324820 | Europe |
529 | ETH | Etiopia | 1 | 170 | 3 | 112078727 | Africa |
860 | TLS | Ekialdeko Timor | 8 | 0 | 0 | 129312 | Asia |
375 | FIN | Finlandia | 10 | 15 | 0 | 5517919 | Europe |
950 | FJI | Fiji | 2 | 0 | 0 | 889955 | Oceania |
220 | FRA | Frantzia | 10 | 545 | 23 | 67012883 | Europe |
481 | GAB | Gabon | 3 | 81 | 1 | 2172578 | Africa |
420 | GMB | Gambia | 4 | 0 | 0 | 2347696 | Africa |
452 | GHA | Ghana | 8 | 157 | 0 | 30417858 | Africa |
255 | DEU | Alemania | 10 | 555 | 26 | 83019213 | Europe |
404 | GNB | Ginea Bissau | 6 | 0 | 0 | 1920917 | Africa |
350 | GRC | Grezia | 10 | 10 | 0 | 10724599 | Europe |
372 | GEO | Georgia | 7 | 9 | 0 | 3996762 | Europe |
90 | GTM | Guatemala | 8 | 355 | 27 | 17581476 | America |
438 | GIN | Ginea | 4 | 0 | 0 | 12771246 | Africa |
110 | GUY | Guyana | 7 | 0 | 0 | 782775 | America |
41 | HTI | Haiti | 5 | 134 | 2 | 11263079 | America |
91 | HND | Honduras | 7 | 425 | 19 | 9746115 | America |
310 | HUN | Hungaria | 10 | 10 | 1 | 9664124 | Europe |
750 | IND | India | 9 | 9996 | 357 | 1366417756 | Asia |
850 | IDN | Indonesia | 9 | 1240 | 36 | 270625567 | Asia |
205 | IRL | Irlanda | 10 | 16 | 4 | 4904240 | Europe |
630 | IRN | Iran | -7 | 2011 | 81 | 82913893 | Asia |
645 | IRQ | Irak | 6 | 1146 | 34 | 39309789 | Asia |
666 | ISR | Israel | 6 | 87 | 0 | 8519373 | Asia |
325 | ITA | Italia | 10 | 202 | 71 | 60550092 | Europe |
437 | CIV | Boli Kosta | 4 | 186 | 3 | 25716554 | Africa |
51 | JAM | Jamaika | 9 | 0 | 0 | 2948277 | America |
663 | JOR | Jordania | -3 | 18 | 0 | 10101697 | Asia |
740 | JPN | Japonia | 10 | 41 | 1 | 126860299 | Asia |
501 | KEN | Kenya | 9 | 105 | 1 | 52573967 | Africa |
690 | KWT | Kuwait | -7 | 683 | 2 | 4207077 | Asia |
703 | KGZ | Kirgizistan | 8 | 36 | 0 | 6415851 | Asia |
705 | KAZ | Kazakhstan | -6 | 239 | 6 | 18551428 | Asia |
812 | LAO | Laos | -7 | 0 | 0 | 7169456 | Asia |
367 | LVA | Letonia | 8 | 3 | 0 | 1919968 | Europe |
450 | LBR | Liberia | 7 | 14 | 0 | 4937374 | Africa |
660 | LBN | Libano | 6 | 20 | 0 | 6855709 | Asia |
570 | LSO | Lesotho | 8 | 0 | 0 | 2125267 | Africa |
620 | LBY | Libia | 0 | 46 | 0 | 6777453 | Africa |
368 | LTU | Lituania | 10 | 6 | 2 | 2759631 | Europe |
212 | LUX | Luxenburgo | 10 | 3 | 0 | 61573 | Europe |
435 | MRT | Mauritania | -2 | 0 | 0 | 4525698 | Africa |
343 | MKD | Ipar Mazedonia | 9 | 125 | 7 | 2083458 | Europe |
580 | MDG | Madagaskar | 6 | 24 | 1 | 26969306 | Africa |
820 | MYS | Malaysia | 7 | 2 | 1 | 31949789 | Asia |
590 | MUS | Maurizio | 10 | 0 | 0 | 126967 | Africa |
553 | MWI | Malawi | 6 | 0 | 0 | 18628749 | Africa |
70 | MEX | Mexiko | 8 | 4883 | 708 | 127575529 | America |
359 | MDA | Moldavia | 9 | 296 | 6 | 4043258 | Europe |
432 | MLI | Mali | 5 | 81 | 2 | 19658023 | Africa |
348 | MNE | Montenegro | 9 | 0 | 0 | 627988 | Europe |
712 | MNG | Mongolia | 10 | 0 | 0 | 3225166 | Asia |
600 | MAR | Maroko | -4 | 18 | 0 | 36471766 | Africa |
775 | MMR | Myanmar (Birmania) | 8 | 3 | 0 | 54045422 | Asia |
541 | MOZ | Mozambike | 5 | 19 | 0 | 30366043 | Africa |
565 | NAM | Namibia | 6 | 0 | 0 | 2494524 | Africa |
790 | NPL | Nepal | 7 | 279 | 0 | 28608715 | Asia |
920 | NZL | Zeelanda Berria | 10 | 0 | 0 | 4783062 | Oceania |
93 | NIC | Nikaragua | 6 | 155 | 9 | 6545503 | America |
475 | NGA | Nigeria | 7 | 409 | 17 | 200963603 | Africa |
436 | NER | Niger | 5 | 0 | 0 | 23310719 | Africa |
385 | NOR | Norvegia | 10 | 13 | 0 | 5328212 | Europe |
210 | NLD | Herbehereak | 10 | 184 | 11 | 17282163 | Europe |
698 | OMN | Oman | -8 | 689 | 1 | 4974992 | Asia |
770 | PAK | Pakistan | 7 | 5834 | 101 | 216565317 | Asia |
95 | PAN | Panama | 9 | 656 | 10 | 424644 | America |
150 | PRY | Paraguai | 9 | 15 | 0 | 7044639 | America |
135 | PER | Peru | 9 | 5087 | 165 | 32510462 | America |
840 | PHL | Filipinak | 8 | 740 | 10 | 108116622 | Asia |
910 | PNG | Papua Ginea Berria | 5 | 0 | 0 | 8776119 | Oceania |
290 | POL | Polonia | 10 | 197 | 23 | 37972812 | Europe |
235 | PRT | Portugal | 10 | 294 | 3 | 10276617 | Europe |
694 | QAT | Qatar | -10 | 1716 | 4 | 2832071 | Asia |
732 | KOR | Hego Korea | 8 | 45 | 0 | 51225321 | Asia |
360 | ROU | Errumania | 9 | 196 | 15 | 19414458 | Europe |
365 | RUS | Errusia | 4 | 8404 | 217 | 114587226 | Europe |
517 | RWA | Ruanda | -3 | 13 | 0 | 12626938 | Africa |
560 | ZAF | Hegoafrika | 9 | 2430 | 48 | 58558267 | Africa |
92 | SLV | El Salvador | 8 | 83 | 4 | 645355 | America |
670 | SAU | Saudi Arabia | -10 | 3717 | 36 | 34268529 | Asia |
626 | SDN | Sudan | -4 | 185 | 17 | 42813237 | Africa |
433 | SEN | Senegal | 7 | 124 | 2 | 16296362 | Africa |
342 | SRB | Serbia | 8 | 66 | 1 | 8772228 | Europe |
451 | SLE | Sierra Leona | 7 | 37 | 0 | 7813207 | Africa |
830 | SGP | Singapur | -2 | 451 | 0 | 5804343 | Asia |
317 | SVK | Eslovakia | 10 | 2 | 0 | 5450421 | Europe |
349 | SVN | Eslovenia | 10 | 2 | 1 | 2080908 | Europe |
520 | SOM | Somalia | 5 | 36 | 0 | 15442906 | Africa |
230 | ESP | Espainia | 10 | 427 | 0 | 46937060 | Europe |
780 | LKA | Sri Lanka | 6 | 10 | 0 | 21323734 | Asia |
525 | SSD | Hego Sudan | 0 | 0 | 0 | 11062114 | Africa |
115 | SUR | Surinam | 5 | 0 | 0 | 581363 | America |
572 | SWZ | Swazilandia | -9 | 27 | 0 | 1148133 | Africa |
380 | SWE | Suedia | 10 | 890 | 78 | 10230185 | Europe |
225 | CHE | Suitza | 10 | 23 | 12 | 8591361 | Europe |
652 | SYR | Siria | -9 | 6 | 0 | 17070132 | Asia |
702 | TJK | Tajikistan | -3 | 73 | 0 | 9321023 | Asia |
510 | TZA | Tanzania | 3 | 0 | 0 | 58005461 | Africa |
800 | THA | Thailandia | -3 | 0 | 0 | 69625581 | Asia |
461 | TGO | Togo | -2 | 21 | 0 | 8082359 | Africa |
52 | TTO | Trinidad eta Tobago | 10 | 0 | 0 | 1394969 | America |
616 | TUN | Tunisia | 7 | 0 | 0 | 11694721 | Africa |
640 | TUR | Turkia | -4 | 922 | 17 | 83429607 | Asia |
696 | ARE | Arabiar Emirerri Batuak | -8 | 603 | 1 | 9770526 | Asia |
500 | UGA | Uganda | -1 | 8 | 0 | 44269587 | Africa |
200 | GBR | Erresuma Batua | 8 | 1003 | 245 | 66647112 | Europe |
369 | UKR | Ukraina | 4 | 525 | 23 | 43993643 | Europe |
165 | URY | Uruguai | 10 | 1 | 0 | 3461731 | America |
2 | USA | Ameriketako Estatu Batuak | 8 | 20614 | 918 | 329064917 | America |
704 | UZB | Uzbekistan | -9 | 148 | 1 | 32981715 | Asia |
101 | VEN | Venezuela | -3 | 106 | 0 | 28515829 | America |
818 | VNM | Vietnam | -7 | 0 | 0 | 96462108 | Asia |
679 | YEM | Yemen | 0 | 36 | 2 | 29161922 | Asia |
490 | COD | Kongoko Errepublika Demokratikoa | -3 | 131 | 6 | 86790568 | Africa |
551 | ZMB | Zambia | 6 | 52 | 0 | 17861034 | Africa |
552 | ZWE | Zimbabwe | 4 | 6 | 0 | 14645473 | Africa |