3 On es produeixen més conflictes internacionals?
3.1 Introducció
On es produeixen més conflictes internacionals? Per respondre a aquesta pregunta, necessitem mapejar els conflictes que s’estan produint en el món. I això ens ho permetrà fer una una base de dades que ofereixi dades sobre violència organitzada. Probablement, la més reconeguda a Europa és la que allotja l’Uppsala Conflict Data Program (UCDP), un programa d’investigació orientat a la recol·lecció de dades i a la recerca quantitativa de conflictes armats.
Les bases de dades que publica l’UCDP es poden dividir en dos tipus. En primer lloc, hi ha un grup de dades que es publiquen desagregades a nivell d’esdeveniment i es publiquen amb relativa freqüència: són la Candidate Events Dataset (CED) i la Georeferenced Event Dataset (GED). En segon lloc, hi ha un segon grup de dades que es publiquen agregades a nivell de conflicte, que es publiquen anualment, i proporcionen informació dels conflictes per estat i any. La més coneguda és la UCDP-PRIO, que segurament haurem vist en moltes estadístiques sobre conflictes que apareixen als mitjans de comunicació i informes com els PRIO Annual Reports.
En aquest apartat, utilitzarem dades del primer grup, ja que ens permetrà visualitzar els esdeveniments de conflicte que s’han produït en el darrer mes de dades. Per a realitzar l’activitat:
Necessitarem eines cartogràfiques digitals. En coherència amb altres assignatures del grau, utilitzarem el programa R. Això ens permetrà escollir un tipus de mapa i l’escala amb què ho volem representar.
Necessitarem la informació de conflictes armats sistematitzada en una base de dades. Aquesta base de dades és la CED (Hegre et al. 2020) d’UCDP, que proporciona informació sobre els esdeveniments de conflictes bruts que s’han produït un mes determinat. La mateixa base de dades té informació geogràfica sobre les coordenades on s’han produït els esdeveniments d’un determinat conflicte.
També necessitarem com interpretar la base de dades. Per això farem ús del llibre de codis i d’informació general sobre els conflictes, més qualitativa, que podrem obtenir de la mateixa web d’UCDP i d’altres págines web.
3.2 El mapa
Les eines cartogràfiques digitals ens les proporciona el programa R. Abans de continuar aquest apartat, és necessari haver-se familiaritzat amb el programa RStudio. Per això és necessari consultar Guia d’RStudio prèviament.
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", "leaflet"))
Un dels paquets que hem de tenir carregats per aquesta activitat és leaflet1, un paquet que ens permet crear mapes. El paquet conté la funció leaflet()
, que és la base per construir mapes. Utilitzarem el codi que veiem a continuació per crear un mapa, que visualitzarem al Viewer de RStudio. A dins de la funció hi indicarem:
1 Per més informació de com utilitzar leaflet podeu consultar leaflet: Create Interactive Web Maps with the JavaScript Leaflet Library (Cheng, Karambelkar, and Xie 2022)
- Les coordenades del mapa amb els arguments
lng
(longitud) ilat
(latitud). - L’escala del mapa amb l’argument
zoom
.
També es pot canviar el mapa base sobre el qual s’està operant. Amb leaflet podem conformar-nos amb el mapa que tenim per defecte o bé seleccionar-ne un altre mitjançant la funció addProviderTiles()
, que posarem en el codi en substitució de addTiles()
. Hi ha varis proveïdors que poden proporcionar aquest mapa base. En aquest enllaç teniu vàries desenes de mapes per escollir. Els tipus de mapes que es poden escollir estan emmagatzemats a l’objecte providers
, que podem consultar si teclegem names(providers)
.
leaflet() |>
addProviderTiles(providers$Esri.NatGeoWorldMap) |>
setView(lng = 138.727424,
lat = 35.362465,
zoom = 11)
3.3 Les dades
La base de dades CED conté informació de tots els esdeveniments relacionats amb violència armada que s’han produït al món en l’últim mes. L’UCDP actualitza les dades aproximadament a meitats de mes pel qual, per exemple, cap al 15 d’octubre de 2023 apareixeran les dades CED del mes de setembre de 2023. Per descarregar les dades del darrer mes, anirem a l’apartat de descàrregues de la web d’UCDP i baixarem l’arxiu CSV (marcat a la imatge següent en vermell) de la CED.
Si premem a l’icona CSV descarregarem un arxiu que es dirà GEDEvent_vXX_X_X.csv, per exemple:
- GEDEvent_v23_0_4.csv
Ens assegurarem que l’arxiu que descarreguem el posem a la carpeta del projecte, de manera que el podem visualitzar des de la finestra ‘Files’ d’RStudio. A continuació, crearem un objecte d’R anomenat ged
que contingui les dades de l’arxiu.
A continuació farem una ullada a l’objecte ged
. El marc de dades que veiem en aquest document correspon als esdeveniments de conflicte que es van produir durant l’abril de 2023. Per tant, s’ha de tenir en compte que aquestes dades no coincidiran amb les que apareguin a RStudio quan s’intenti replicar l’exemple. El codi d’R, no obstant, servirà igual.
Primer introduirem ged
, on tindrem una vista general de les dades. Fixem-nos, per exemple, que l’abril de 2023 es van registrar 1.706 conflictes. El marc de dades té 49 variables. Detectem una variable year
on, efectivament, veiem que totes les observacions s’han registrat el 2023. I detectem que al primer conflicte observat li han assignat el codi 360.
ged
# A tibble: 1,706 × 49
id relid year active_year code_status type_of_violence conflict_dset_id
<dbl> <chr> <dbl> <lgl> <chr> <dbl> <chr>
1 469588 BFO-2… 2023 TRUE Clear 1 360
2 469603 BFO-2… 2023 TRUE Check dyad 1 360
3 469604 BFO-2… 2023 TRUE Clear 1 360
4 469622 RUS-2… 2023 TRUE Clear 1 13243
5 469677 PHI-2… 2023 FALSE Clear 1 14275
6 469742 BRA-2… 2023 TRUE Clear 2 15142
7 469845 BRA-2… 2023 TRUE Clear 2 15142
8 469846 BRA-2… 2023 TRUE Clear 2 15142
9 469849 BRA-2… 2023 TRUE Clear 2 15142
10 469859 AFG-2… 2023 TRUE Clear 1 13637
# ℹ 1,696 more rows
# ℹ 42 more variables: conflict_new_id <dbl>, conflict_name <chr>,
# dyad_dset_id <chr>, dyad_new_id <dbl>, dyad_name <chr>,
# side_a_dset_id <chr>, side_a_new_id <dbl>, side_a <chr>,
# side_b_dset_id <chr>, side_b_new_id <dbl>, side_b <chr>,
# number_of_sources <dbl>, source_article <chr>, source_office <chr>,
# source_date <chr>, source_headline <chr>, source_original <chr>, …
Anem a veure el mateix marc de dades més a fons amb glimpse()
. Aquesta funció permet fer una ullada ràpida a totes les variables i identifica quines són les primeres observacions de cada variable2.
2 Alternativament, també podem fer servir View()
.
glimpse(ged)
Rows: 1,706
Columns: 49
$ id <dbl> 469588, 469603, 469604, 469622, 469677, 469742, 4698…
$ relid <chr> "BFO-2023-1-15175-54", "BFO-2023-1-15175-57.1", "BFO…
$ year <dbl> 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023…
$ active_year <lgl> TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRU…
$ code_status <chr> "Clear", "Check dyad", "Clear", "Clear", "Clear", "C…
$ type_of_violence <dbl> 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ conflict_dset_id <chr> "360", "360", "360", "13243", "14275", "15142", "151…
$ conflict_new_id <dbl> 360, 360, 360, 13243, 14275, 13972, 13972, 13972, 13…
$ conflict_name <chr> "Burkina Faso: Government", "Burkina Faso: Governmen…
$ dyad_dset_id <chr> "15175", "15175", "15175", "14117", "15473", "15142"…
$ dyad_new_id <dbl> 15175, 15175, 15175, 14117, 15473, 15142, 15142, 151…
$ dyad_name <chr> "Government of Burkina Faso - JNIM", "Government of …
$ side_a_dset_id <chr> "78", "78", "78", "57", "154", "772", "772", "772", …
$ side_a_new_id <dbl> 78, 78, 78, 57, 154, 772, 772, 772, 772, 130, 130, 1…
$ side_a <chr> "Government of Burkina Faso", "Government of Burkina…
$ side_b_dset_id <chr> "6716", "6716", "6716", "61", "234", "3176", "3176",…
$ side_b_new_id <dbl> 6716, 6716, 6716, 61, 234, 3176, 3176, 3176, 3176, 2…
$ side_b <chr> "JNIM", "JNIM", "JNIM", "Government of Ukraine", "IS…
$ number_of_sources <dbl> 1, 2, 2, 2, 2, 1, 1, 1, 1, 8, 6, 7, 10, 9, 4, 1, 2, …
$ source_article <chr> "\"@AlerteTemoin,2023-04-03,Zondoma \"", "\"@Danoumi…
$ source_office <chr> "@AlerteTemoin", "@Danoumis_Traore;Sahel Intelligenc…
$ source_date <chr> "2023-04-03", "2023-04-03;2023-04-04", "2023-04-04;2…
$ source_headline <chr> "Zondoma", "#Burkina;Burkina Faso: several terrorist…
$ source_original <chr> NA, "Army", NA, "Daily Kos, Reporting from Ukraine",…
$ where_prec <dbl> 1, 2, 1, 1, 4, 2, 1, 1, 2, 1, 1, 1, 3, 2, 5, 5, 1, 1…
$ where_coordinates <chr> "Bougounam village", "Soum-Bellah village", "Tawori …
$ where_description <chr> "Bougounam, Zondoma", "Soum Bella (Sahel), area of",…
$ adm_1 <chr> "Nord region", "Sahel region", "Est region", "Donets…
$ adm_2 <chr> "Zondoma province", "Soum province", "Tapoa province…
$ latitude <dbl> 13.36259, 14.76129, 12.04667, 48.59244, 7.90000, -10…
$ longitude <dbl> -2.39254, -1.11884, 1.40688, 37.99993, 124.35000, -3…
$ geom_wkt <chr> "POINT (-2.39254 13.36259)", "POINT (-1.11884 14.761…
$ priogrid_gid <dbl> 148676, 150838, 147243, 199876, 141009, 114766, 1161…
$ country <chr> "Burkina Faso", "Burkina Faso", "Burkina Faso", "Ukr…
$ country_id <dbl> 439, 439, 439, 369, 840, 140, 140, 140, 140, 700, 70…
$ region <chr> "Africa", "Africa", "Africa", "Europe", "Asia", "Ame…
$ event_clarity <dbl> 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ date_prec <dbl> 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ date_start <dttm> 2023-04-02, 2023-04-03, 2023-04-03, 2023-04-04, 202…
$ date_end <dttm> 2023-04-02, 2023-04-03, 2023-04-03, 2023-04-04, 202…
$ deaths_a <dbl> 0, 0, 0, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 4, 0, 0, 0…
$ deaths_b <dbl> 7, 10, 0, 0, 3, 0, 0, 0, 0, 6, 2, 1, 6, 2, 0, 24, 2,…
$ deaths_civilians <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0…
$ deaths_unknown <dbl> 0, 0, 0, 0, 0, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1…
$ best <dbl> 8, 10, 0, 8, 3, 2, 1, 1, 1, 7, 2, 1, 6, 6, 4, 24, 2,…
$ high <dbl> 8, 10, 1, 10, 3, 2, 1, 1, 1, 14, 2, 1, 6, 16, 4, 24,…
$ low <dbl> 8, 10, 0, 2, 3, 2, 1, 1, 1, 3, 0, 1, 6, 2, 4, 24, 2,…
$ gwnoa <dbl> 439, 439, 439, 365, 840, NA, NA, NA, NA, 700, 700, 7…
$ gwnob <dbl> NA, NA, NA, 369, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
De nou, recorda que la informació d’aquest exemple no coincidirà amb el marc de dades que estàs reproduint en el teu ordinador, perquè aquest exemple és d’abril de 2023, i tu estaràs treballant amb unes dades més noves. Seguint amb l’exemple que es detalla amb el resultat del codi anterior, fixem-nos amb alguns detalls3.
3 La variable priogrid_gid
conté les dades en format ràster.
- La variable
conflict_name
sembla que conté el nom del conflicte. La primera observació s’ha codificat com a “Burkina Faso: Government”. - Si anem tirant avall, trobem que aquest primer conflicte del marc de dades registra un esdeveniment amb violència que involucrava el govern de Burkina Faso (
side_a
) i JNIM (side_b
), que deduïm que deu ser un grup armat. - El conflicte es va produir al poble de Bougounam (
where_coordinates
iwhere_description
), a la província de Zondoma (adm_2
). - Les coordenades són latitud 13.362590 (
latitude
) i longitud -2.39254 (longitud
). Entrarem a Google Maps i posarem al buscador “13.362590 -2.39254” (ordre invers) per veure el lloc exacte. - Cap al final del marc de dades, veiem que aquest esdeveniment de violència armada no va causar cap mort al govern de Burkina Faso (
deaths_a
), va causar 7 morts a JNIM (deaths_b
) i va causar la mort d’un civil (deaths_civilians
). Els codificacions d’UCDP generen tres estimacions de morts:low
és una estimació a la baixa,high
és una estimació a l’alça ibest
és l’estimació més fiable. En aquest cas, l’estimació de morts és exacta, ja que els codificacions d’UCDP saben del cert que es van produir 8 morts (no a tots ens esdeveniments les estimacions millor, alta i baixa coincideixen).
3.4 El llibre de codis
Una explicació molt més precisa de les dades que tenim ens la donarà el llibre de codis. El llibre de codis és un document annex a una base de dades que conté la informació essencial per interpretar les dades que conté. Normalment, a dins el llibre de codis hi trobem una introducció amb una explicació general de què mesuren les dades i una descripció de les variables.
A la web de UCDP, anirem a l’apartat de descàrregues i baixarem el llibre de codis de la CED.
Si obrim el PDF del llibre de codis i anem a la segona pràctica, veurem un índex del seu contingut:
Les definicions (pàgina 3-4 i Apèndix I) són un element importantíssim en qualsevol base de dades de qualitat. En l’apartat Definitions s’explica per exemple que l’esdeveniment és la unitat d’observació del conjunt de dades, definit com a “an individual incident (phenomenon) of lethal violence occurring at a given time and place”. Per tant, podem esperar que cada una de les 1.704 files contingui un episodi de violència letal ocurreguda en un lloc i un moment concret del temps 4.
A partir de la pàgina 5 comença l’apartat Variables in the UCDP Candidate dataset, on es descriuen totes les variables de la base de dades. Si el llibre de codis està ben fet, la llista de variables que observem al PDF hauria de coincidir amb la llista de variables que hem vist anteriorment mitjançant la funció
glimpse()
.Tots els apartats del llibre de codis són interessants. A Data Collection Methods s’explica quines fonts d’informació s’utilitzen els codificadors de l’UCDP a l’hora de recollir dades dels esdeveniments.
4 Concretament, un esdeveniment és definit com: “An incident where armed force was used by an organised actor against another organized actor, or against civilians, resulting in at least 1 direct death at a specific location and a specific date”.
3.5 Explorar les dades
Ara que ja tenim a mà les dades i el llibre de codis, anem a explorar-ho més a fons. Per això, en aquest apartat coneixerem una mica més a fons les funcions unique()
, sort()
i count()
. La funció unique()
ens permet saber quines categories úniques conté una variable. Combinada amb sort()
, veiem el llistat ordenat per ordre alfabètic. La funció count()
, per la seva banda, ens compta quantes vegades està repetida una categoria en una variable determinada. Anem a veure alguns exemples de com aplicar aquestes funcions al marc de dades ged
:
- Quins conflictes diferents tenim a la base de dades?
- Quines divisions administratives diferents tenim a la base de dades?
- A quins països han succeït més esdeveniments?
count(ged, country, sort = TRUE)
3.6 Mapejar un conflicte internacional
Anem a agrupar tota la informació que hem anat acumulant al llarg dels darrers apartats per mapejar un conflicte internacional. En primer lloc mirarem de mapejar tots els esdeveniments que es van produir en el món en el mes que hem agafat dades. En el cas d’aquest exemple, veurem els conflictes d’abril de 2023.
- Abans de la funció
leaflet()
, introduïm el nom de la base de dadesged
. - Especifiquem una nova funció,
addCircleMarkers()
, i com a arguments indicarem als argumentslng
ilat
el nom dels vectors on es troben les coordenades.
ged |>
leaflet() |>
addTiles() |>
addCircleMarkers(lng = ~longitude,
lat = ~latitude)
Anem a concretar una mica més el mapa. Amb les funcions que hem conegut anteriorment, hem obtingut una llista dels conflictes que tenim a la base de dades. Per exemple, si a la variable conflict_name
tenim un conflicte que s’anomena "Turkey: Kurdistan"
, podem reproduir-lo al mapa.
ged |>
filter(conflict_name == "Turkey: Kurdistan") |>
leaflet() |>
addTiles() |>
addCircleMarkers(lng = ~longitude,
lat = ~latitude)
A continuació, veurem algunes de les opciones que es poden introduir en el mapa:
- Amb
setView()
, es poden modificar les coordenades i l’escala del mapa. - Amb
addProviderTiles()
, es pot modificar el tipus de mapa. - A dins de
addCircleMarkers()
, es pot especificar la mida dels punts, el color i si hi volem vora.
ged |>
filter(conflict_name == "Turkey: Kurdistan") |>
leaflet() |>
setView(lng = 38.727424,
lat = 35.362465,
zoom = 6) |>
addProviderTiles(providers$Esri.NatGeoWorldMap) |>
addCircleMarkers(lng = ~longitude,
lat = ~latitude,
radius = 5,
stroke = T,
color = "black")
A continuació es mostren alguna de les variacions més avançades que es pot fer amb el paquet leaflet.
En el primer exemple, es vol saber les baixes estimades (best
) existents en un conflicte determinat (conflict_name
):
- S’ha creat un nou objecte
ged_confl
on només hi ha les dades del conflicte que es vol observar. - S’ha guardat a l’objecte
pal_num
la paleta de colors de la variable que es vol observar (best
)5. - S’ha definit el tipus de mapa
Esri.NatGeoWorldMap
.
5 Enlloc de “viridis”, es pot canviar el color de la paleta per “magma”, “inferno”, o “plasma”.
ged_confl <- ged |>
filter(conflict_name == "Turkey: Kurdistan")
pal_num <- colorNumeric(palette = "viridis",
domain = ged_confl$best,
reverse = TRUE)
ged_confl |>
leaflet() |>
addProviderTiles(providers$Esri.NatGeoWorldMap) |>
addCircleMarkers(lng = ~longitude,
lat = ~latitude,
popup = ~best,
color = ~pal_num(best),
label = ~best) |>
addLegend(pal = pal_num, #paleta de colors
values = c(min(ged_confl$best):max(ged_confl$best)), #valor mínim i màxim
position = "bottomleft", #posició de la llegenda
title = "Baixes estimades", #títol
opacity = 0.8) #transparència de la llegenda
En el segon exemple, es vol saber els conflictes (conflict_name
) existents en un país (country
) determinat:
- S’ha creat un nou objecte
ged_ctr
on només hi ha les dades del país que es vol observar. - S’ha guardat a l’objecte
pal_fact
la paleta de colors de la variable que es vol observar (conflict_name
)6. - S’ha definit el tipus de mapa
CartoDB.Voyager
.
6 Es poden veure altres colors de paleta en aquesta web.
ged_ctr <- ged |>
filter(country == "Cameroon")
pal_fact <- colorFactor(palette = "Dark2", domain = ged_ctr$conflict_name)
ged_ctr |>
leaflet() |>
addProviderTiles(providers$CartoDB.Voyager) |>
addCircleMarkers(lng = ~longitude,
lat = ~latitude,
popup = ~conflict_name,
color = ~pal_fact(conflict_name),
label = ~conflict_name) |>
addLegend(position = "bottomright", pal = pal_fact,
values = c(unique(ged_ctr$conflict_name)),
opacity = 0.6)
3.7 Aprendre més
Si vols practicar la creació de mapes amb altres paquets d’R, altres bases de dades o altres geometries, pots provar amb els següents exercicis:
- Amb paciència, pots replicar el procés amb la GED dataset, que també trobaràs a la mateixa pàgina d’UCDP. Tingues en compte que l’arxiu té un nom diferent i que el nom de les variables pot canviar, pel qual hauràs de consultar el llibre de codis.
- Disputes interestatals de la base de dades Correlates of War
- Disputes interestatals amb el paquet leaflet
- Polígons amb les dades del Quality of Government Institute