En el presente documento quiero tratar de analizar como se ve afectada la ecónomica debido a los distintos conflictos que se han producido en el continente africano. Para ello he accedido a un dataset de ACLED (Armed Conflict Location & Event Data Project) en el cual hay información sobre confictos que han sucedido en África desde el año 1997 hasta el 2016. Este dataset provee información sobre el tipo de conflicto, si son protestas, ataques terroristas, si ha habido muertes en el ese conflicto y varios datos más.
Voy a cruzar estos datos con datos del Banco Mundial de esos mismos años, para ver si es clara la posible relación que puede haber entre conflictos y afectación en la economía. Para ello voy a realizar una carga del dataset, limpiar y seleccionar los datos que requiero y cruzarlo con los datos del Banco Mundial para PIB y PIB per capita para los paises seleccionados.
Cargamos los dataset, vamos a cargar el dataset de ACLED desde su web. Vamos a descargar los conflictos desde el año 1997 hasta el año 2016. En vez de read.table he usado read_csv ya que con la read.table este dataset daba error en ciertas líneas y no lo lelgaba a cargar. En con la función read.tabla si indicaba el parámetro fill=TRUE hacía que varias columnas se informarán con datos incorrectos. La función read_csv, no carga las filas problemáticas pero te da un informe de las que no se han cargado, en nuestro caso, han sido 14 líneas sobre un dataset de más de 246K de líneas, por lo que el perderlas no es vital para el tipo de análisis que vamos a realizar. Procedemos a realizar la carga de los datos:
## Parsed with column specification:
## cols(
## .default = col_character(),
## GWNO = col_integer(),
## EVENT_ID_NO_CNTY = col_integer(),
## YEAR = col_integer(),
## TIME_PRECISION = col_integer(),
## INTER1 = col_integer(),
## INTERACTION = col_integer(),
## LATITUDE = col_double(),
## LONGITUDE = col_double(),
## GEO_PRECISION = col_integer(),
## FATALITIES = col_integer()
## )
## See spec(...) for full column specifications.
## Warning in rbind(names(probs), probs_f): number of columns of result is not
## a multiple of vector length (arg 1)
## Warning: 14 parsing failures.
## row # A tibble: 5 x 5 col row col expected actual file expected <int> <chr> <chr> <chr> <chr> actual 1 91280 LONGITUDE a double 27.56061 './data/acled_2016.zip' file 2 91281 LONGITUDE a double 27.56061 './data/acled_2016.zip' row 3 110350 LATITUDE a double -15.65777 './data/acled_2016.zip' col 4 110351 LATITUDE a double -15.65777 './data/acled_2016.zip' expected 5 193642 LONGITUDE a double 31.01736 './data/acled_2016.zip'
## ... ................. ... .............................................................. ........ .............................................................. ...... .............................................................. .... .............................................................. ... .............................................................. ... .............................................................. ........ ..............................................................
## See problems(...) for more details.
Podemos visualizar las líneas donde hemos tenido problemas, que han sido 14:
problems(datos_acled)
## # A tibble: 14 x 5
## row col expected actual
## <int> <chr> <chr> <chr>
## 1 91280 LONGITUDE a double 27.56061
## 2 91281 LONGITUDE a double 27.56061
## 3 110350 LATITUDE a double -15.65777
## 4 110351 LATITUDE a double -15.65777
## 5 193642 LONGITUDE a double 31.01736
## 6 221856 LONGITUDE no trailing characters
## 7 221859 LONGITUDE no trailing characters
## 8 221860 LONGITUDE no trailing characters
## 9 221861 LONGITUDE no trailing characters
## 10 221862 LONGITUDE no trailing characters
## 11 221865 LONGITUDE no trailing characters
## 12 221866 LONGITUDE no trailing characters
## 13 221869 LONGITUDE no trailing characters
## 14 221870 LONGITUDE no trailing characters
## # ... with 1 more variables: file <chr>
Ahora revisamos el dataset:
head(datos_acled)
## # A tibble: 6 x 22
## GWNO EVENT_ID_CNTY EVENT_ID_NO_CNTY EVENT_DATE YEAR TIME_PRECISION
## <int> <chr> <int> <chr> <int> <int>
## 1 615 1ALG 1 04/01/1997 1997 1
## 2 615 1ALG 1 04/01/1997 1997 1
## 3 615 2ALG 2 05/01/1997 1997 1
## 4 615 2ALG 2 05/01/1997 1997 1
## 5 615 3ALG 3 06/01/1997 1997 1
## 6 615 3ALG 3 06/01/1997 1997 1
## # ... with 16 more variables: EVENT_TYPE <chr>, ACTOR1 <chr>,
## # ALLY_ACTOR_1 <chr>, INTER1 <int>, INTERACTION <int>, COUNTRY <chr>,
## # ADMIN1 <chr>, ADMIN2 <chr>, ADMIN3 <chr>, LOCATION <chr>,
## # LATITUDE <dbl>, LONGITUDE <dbl>, GEO_PRECISION <int>, SOURCE <chr>,
## # NOTES <chr>, FATALITIES <int>
Hacemos un summary:
summary(datos_acled)
## GWNO EVENT_ID_CNTY EVENT_ID_NO_CNTY EVENT_DATE
## Min. :404.0 Length:246205 Min. : 1 Length:246205
## 1st Qu.:490.0 Class :character 1st Qu.: 34452 Class :character
## Median :520.0 Mode :character Median : 70305 Mode :character
## Mean :535.8 Mean : 70045
## 3rd Qu.:580.0 3rd Qu.:104639
## Max. :651.0 Max. :140747
##
## YEAR TIME_PRECISION EVENT_TYPE ACTOR1
## Min. :1997 Min. :1.000 Length:246205 Length:246205
## 1st Qu.:2005 1st Qu.:1.000 Class :character Class :character
## Median :2012 Median :1.000 Mode :character Mode :character
## Mean :2010 Mean :1.146
## 3rd Qu.:2014 3rd Qu.:1.000
## Max. :2016 Max. :3.000
##
## ALLY_ACTOR_1 INTER1 INTERACTION COUNTRY
## Length:246205 Min. :1.000 Min. :10.00 Length:246205
## Class :character 1st Qu.:2.000 1st Qu.:13.00 Class :character
## Mode :character Median :3.000 Median :27.00 Mode :character
## Mean :3.765 Mean :28.74
## 3rd Qu.:6.000 3rd Qu.:37.00
## Max. :8.000 Max. :88.00
##
## ADMIN1 ADMIN2 ADMIN3
## Length:246205 Length:246205 Length:246205
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## LOCATION LATITUDE LONGITUDE GEO_PRECISION
## Length:246205 Min. :-34.710 Min. :-17.46 Min. :1.000
## Class :character 1st Qu.: -1.400 1st Qu.: 15.32 1st Qu.:1.000
## Mode :character Median : 4.400 Median : 29.38 Median :1.000
## Mean : 5.163 Mean : 25.12 Mean :1.274
## 3rd Qu.: 11.523 3rd Qu.: 34.38 3rd Qu.:1.000
## Max. : 37.274 Max. : 51.27 Max. :3.000
## NA's :2 NA's :12
## SOURCE NOTES FATALITIES
## Length:246205 Length:246205 Min. : 0.000
## Class :character Class :character 1st Qu.: 0.000
## Mode :character Mode :character Median : 0.000
## Mean : 5.561
## 3rd Qu.: 1.000
## Max. :25000.000
##
Vamos a cargar los datos que requerimos del Banco Mundial usando el paquete WDI. Queremos obtener el PIB y PIB per capita de los paises de África. Para ello le tendremos que pasar como parámetro en country todos los paises de África que queremos cargar en formato ISO-2. El problema es que el dataset de ACLET no ha seguido esta norma y no disponemos de ese formato. Por tanto primero cargaré un dataset que me he bajado de las Naciones Unidas que está en la carpeta data y que dispone de este dato para los distintos paises que queremos cargar de África.
En la carga de los paises, Namibia su código ISO-2 es NA y me lo convertía a vacio (N/A), he tenido que incluir los parámetros a la función read_table para que se cargara correctamente.
data_countries <- read.table("./data/UNSD-countries.csv",sep=";", stringsAsFactors=FALSE, header=TRUE, na.strings="")
Cargamos la líbrería WDI.
# Nos aseguramos que está instalado el paquete y, sino lo instalamos
if(!is.element("WDI", installed.packages()[, 1]))
install.packages("WDI")
# Lo cargamos
library(WDI)
## Loading required package: RJSONIO
Seleccionamos los indices que queremos extraer, que son los del PIB en dolares y el PIB per capita en dolares.
# los indices que nos queremos descargar
indices <- c('NY.GDP.MKTP.CD','NY.GDP.PCAP.CD')
paises <- data_countries$ISO.alpha2.code
datos_wdi <- WDI(country=paises, indicator=indices, start=1997,
end=2016, extra=TRUE)
Vamos a aplicar fitros para quedarnos con los datos que requerimos y uniremos los dataset para poder dibujar la gráfica.
Antes de filtrar por las columnas que queremos Vamos a revisar que columnas de nuestro dataset pueden tener campos que sean de tipo NA.
colSums(is.na(datos_acled))
## GWNO EVENT_ID_CNTY EVENT_ID_NO_CNTY EVENT_DATE
## 0 0 0 0
## YEAR TIME_PRECISION EVENT_TYPE ACTOR1
## 0 0 0 0
## ALLY_ACTOR_1 INTER1 INTERACTION COUNTRY
## 207550 0 0 0
## ADMIN1 ADMIN2 ADMIN3 LOCATION
## 0 196 114809 0
## LATITUDE LONGITUDE GEO_PRECISION SOURCE
## 2 12 0 323
## NOTES FATALITIES
## 17375 0
Parece que tenemos varias columnas vacias. Como podemos ver, no son ninguna de las que nos interesan.
Vamos a cambiar el nombre de las columnas que nos interesan para que sean iguales en los dos dataset
cols <- c('COUNTRY','YEAR','FATALITIES')
cols_low <- c('country','year','fatalities')
# nos quedamos con las columnas que vamos a cambiar el nombre
col_acled <- match(cols, names(datos_acled))
# Cambiamos los nombres para que queden como queremos
names(datos_acled)[col_acled] <- cols_low
Queremos hacer una tabla con los campos “country”, “year”, “fatalities”, y el número de conflictos que tenemos sum_conflics. Lo primero que hacemos es un subset de los datos que nos interesan del dataframe y después agrupamos haciendo un sumatorio.
datos_acled_subset = datos_acled [names(datos_acled) %in% cols_low]
# Agrupo por year y country
gby_year_country <- group_by(datos_acled_subset, year,country)
# Y sobre cada grupo, cuento el número de conflictos y el total de fatalities
datos_agg <- summarize(gby_year_country,
sum_conllicts = n(),
sum_fatalities = sum(fatalities))
#visualizamos los datos
datos_agg <- as.data.frame(datos_agg)
head(datos_agg)
## year country sum_conllicts sum_fatalities
## 1 1997 Algeria 228 6934
## 2 1997 Angola 481 10524
## 3 1997 Benin 2 0
## 4 1997 Botswana 1 0
## 5 1997 Burkina Faso 8 0
## 6 1997 Burundi 433 8500
Vamos a cambiar el nombre a los datos y filtraremos para quedarnos sólo con las columnas que nos interesan:
indices_ing <- c("GDP.Current.USD","GDP.per.capita.Current.USD")
indices_ingl2 <- c("year","country","GDP.per.capita.Current.USD",'GDP.Current.USD',"iso2c","region")
col_wdi <- match(indices, names(datos_wdi))
# Cambiamos los nombres para que queden como queremos
names(datos_wdi)[col_wdi] <- indices_ing
subset_wdi <- datos_wdi[indices_ingl2]
head(subset_wdi)
## year country GDP.per.capita.Current.USD GDP.Current.USD iso2c
## 1 1997 Angola 506.8850 7648377413 AO
## 2 1998 Angola 415.6933 6445041825 AO
## 3 1999 Angola 385.7689 6152922943 AO
## 4 2000 Angola 555.2969 9129594819 AO
## 5 2001 Angola 526.1687 8936063723 AO
## 6 2002 Angola 711.1817 12497346670 AO
## region
## 1 Sub-Saharan Africa (all income levels)
## 2 Sub-Saharan Africa (all income levels)
## 3 Sub-Saharan Africa (all income levels)
## 4 Sub-Saharan Africa (all income levels)
## 5 Sub-Saharan Africa (all income levels)
## 6 Sub-Saharan Africa (all income levels)
Como vamos a unir por país y año vamos a revisar los nombres de los paises para ver si coinciden:
#los asignamos a variables para que emjorar el rendimiento y podamos ordenarlos alfabeticamente
countries_wdi <- unique(subset_wdi$country)
countries_agg <- unique(datos_agg$country)
countries_wdi<-sort(countries_wdi, decreasing =FALSE)
countries_agg<-sort(countries_agg, decreasing =FALSE)
country_index_1<- match(countries_wdi, countries_agg)
country_index_2<- match(countries_agg,countries_wdi)
no_countries_wdi<-countries_wdi[!countries_wdi %in% countries_wdi[!is.na(country_index_1)]]
no_countries_agg<-countries_agg[!countries_agg %in% countries_agg[!is.na(country_index_2)]]
no_countries_wdi
## [1] "Congo, Dem. Rep." "Congo, Rep." "Cote d'Ivoire"
## [4] "Egypt, Arab Rep." "Gambia, The"
no_countries_agg
## [1] "Democratic Republic of Congo" "Egypt"
## [3] "Gambia" "Ivory Coast"
## [5] "Republic of Congo"
Podemos ver cuales son los paises que no coinciden por nombre, vamos a unificar estos nombres con los valores que tenemos en el dataset de ACLED. No son muchos nombres por lo que hacemos el cambio de forma sencilla:
#Como no son muchos vamos a cambiar lso nombres de forma sencilla
subset_wdi$country[subset_wdi$country==no_countries_wdi[1]]<-no_countries_agg[1]
subset_wdi$country[subset_wdi$country==no_countries_wdi[2]]<-no_countries_agg[5]
subset_wdi$country[subset_wdi$country==no_countries_wdi[3]]<-no_countries_agg[4]
subset_wdi$country[subset_wdi$country==no_countries_wdi[4]]<-no_countries_agg[2]
subset_wdi$country[subset_wdi$country==no_countries_wdi[5]]<-no_countries_agg[3]
#Comprobamos que ya casan todos los nombres
match(unique(subset_wdi$country), unique(datos_agg$country))
## [1] 2 5 6 3 4 10 8 35 21 7 11 1 12 14 15 16 18 17 19 13 20 22 24
## [24] 23 25 30 26 28 29 27 31 32 33 34 36 41 38 37 39 49 42 9 44 45 43 46
## [47] 40 47 48
Como podemos ver no hay ningún indice de tipo NA.
Procedemos a unir los dos dataset por año y país:_
datos_join <- merge(datos_agg,subset_wdi,by=c("year","country"))
head(datos_join)
## year country sum_conllicts sum_fatalities
## 1 1997 Algeria 228 6934
## 2 1997 Angola 481 10524
## 3 1997 Benin 2 0
## 4 1997 Botswana 1 0
## 5 1997 Burkina Faso 8 0
## 6 1997 Burundi 433 8500
## GDP.per.capita.Current.USD GDP.Current.USD iso2c
## 1 1612.0093 48177862502 DZ
## 2 506.8850 7648377413 AO
## 3 361.1003 2268301538 BJ
## 4 3065.5273 5020214747 BW
## 5 229.4931 2447669404 BF
## 6 159.1755 972896268 BI
## region
## 1 Middle East & North Africa (all income levels)
## 2 Sub-Saharan Africa (all income levels)
## 3 Sub-Saharan Africa (all income levels)
## 4 Sub-Saharan Africa (all income levels)
## 5 Sub-Saharan Africa (all income levels)
## 6 Sub-Saharan Africa (all income levels)
Vamos a utilizar la librería googlevis para realizar un gráfico de tipo Motion Chart:
# Cargamos la librería
library(googleVis)
##
## Welcome to googleVis version 0.6.2
##
## Please read Google's Terms of Use
## before you start using the package:
## https://developers.google.com/terms/
##
## Note, the plot method of googleVis will by default use
## the standard browser to display its output.
##
## See the googleVis package vignettes for more details,
## or visit http://github.com/mages/googleVis.
##
## To suppress this message use:
## suppressPackageStartupMessages(library(googleVis))
M <- gvisMotionChart(datos_join,
idvar="country", timevar="year",
xvar="sum_conllicts", yvar="GDP.Current.USD",
colorvar="region", sizevar="sum_fatalities",
options=list(width=700, height=600),
chartid="pib_vs_confictos_africa")
# Generamos la página web
#print(M, 'chart')
plot(M)
## starting httpd help server ...
## done
No he conseguido incluir el gráfico en el documento rmd para que se visualice al cargar el HTML. He dado permisos a las carpetas como se indica en la guia de Googlevis. Lo he desplegado en RPUBS (anexo el link al ejercicio desplegado) ya que se supone que desde servidor no debería haber ningún problema, pero no se visualiza. Se ha de ejecutar el código en RStudio para poder visualizarlo y verlo de forma dinámica.
El gráfico que se presenta corresponde al PIB respecto a la suma de conflictos agrupadas por país y año, el tamaño de las burbujas representa los muertos habidos en esos conflictos para ese año. Por conflicto se entiende desde protestas, hasta ataques terroristas.
En la imagen a continuación podemos ver la situación en el año 1997. Paises como Líbia, Argelia, tienen poca conflictividad. Pero hay que tener en cuenta que en esos paises en esas fechas había dictaduras bastante duras. Túnez en esas fechas erá uno de los paises más tranquilos y pácificos de la zona, junto a Egipto dos democrias. Se puede ver que Sierra Leona tenía en ese momento una alta conflictivdad pero no hubo muertes en ese año. Angola por esa época pasaba por una larga guerra civil que duró hasta el año 2002. Ver además la diferencia de PIB de Sur Africa con respecto al resto de los paises de su área.
Situación en 1997
Se puede visuliazar como los conflictos de Eritrea, Angola y Etiopia, que se recrudecierón en el año 1999, parece que mejoran en este año. En Angola el número de conflictos y fallecidos disminuye considerablemnente frente al año 1999 donde había alcanzado su máximo. La variación en el PIB de estos paises no se ha notado de forma considerable ya que de partida es muy baja.
Situación en 2000
Ya hace tres años que la guerra civil en Angola ha finalizado y se ve una aumento considerable del PIB, y una grán disminución de los conflictos y muertes. En esá empoca Angola recibe aportaciones de ayuda internacional para estabilizar el país.
En Etiopía aumentan los conflictos pero disminuye el número de fallecidos. Sur Africa, Argelia y Nigueria tienen una conflictivad similar siendo Argelia la que tiene un número de fallecidos muy alto, del orden de 500, respecto a Sur África que tiene 12 para ese año. Este último duplica el PIB de los otros dos paises.
Situación en 2005
Primavera Árabe. Se puede ver en este caso como los paises del norte del Magreb se ven afectados por la Primavera Árabe y aumenta de forma considerable. Hay que indicar además que en este periodo los antentados en Egypto contra el turismo se recrudecen. Pero esto no parece afectar directamente a su PIB.
En Libía este es un periodo en el que comienza una guerra civil, muere Gadafi en el año 2011 y todavía hoy sigue habíendo un estado de guerra con el país divido en dos facciones. En este caso el PIB se desploma, como es lógico al no haber ningún tipo de gobierno. Comentar el caso de Nigueria, un país de alta conflictividad que sin embargo su PIB es de los más altos del continente. Se debe principalmente a ayudas y la grán cantidad de recursos naturales de los que dispone.
Los paises del Magreb siguen siendo paises con alto nivel de conflictivad y fallecimientos. Sobre todo hay que destacar Egypto y Túnez para los cuales el número de muertes es muy elevado frente al resto de paises. A pesar de ello Egypto es uno de los paises un alto PIB. Nigeria en este año tiene un desplome considerable de su PIB pero no parece debido a un aumento de la confictividad ya que hay más fallecidos en años previos y el PIB crecía.
Situación en 2016
Las siguientes gráficas resumen la situación de conflictos, PIB y fallecidos durante el periodo en los paises de África. Sinceramente esperaba una mayor incidencia en la economía del país (reflejado en el PIB) teniendo en cuenta conflictos y muertes en esos conflictos. Pero viendo paises como Nigeria, Egipto que tienen una alta conflictividad pero están muy por encima del resto del paises en cuestión de PIB.
Esto se ha de deber a factores externos, que no se ven aquí representandos, como son ayudas internacionales, para que estos paises no se desestabilicen, recursos naturales abundantes, como es el caso de Nigeria. Hay que indicar que lo que parece ser clave es conservar un gobierno político, se puede ver en paises como Líbia que se desploman debido al desmenbramiento del país y a Somalia, que empieza a crecer.
Variación conflictos anual
Variación PIB anual
Fallecidos en conflictos
# Terminamos la sesión
sessionInfo()
## R version 3.4.1 (2017-06-30)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 15063)
##
## Matrix products: default
##
## locale:
## [1] LC_COLLATE=Spanish_Spain.1252 LC_CTYPE=Spanish_Spain.1252
## [3] LC_MONETARY=Spanish_Spain.1252 LC_NUMERIC=C
## [5] LC_TIME=Spanish_Spain.1252
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] googleVis_0.6.2 WDI_2.4 RJSONIO_1.3-0 dplyr_0.7.2
## [5] ggplot2_2.2.1 readr_1.1.1
##
## loaded via a namespace (and not attached):
## [1] Rcpp_0.12.12 bindr_0.1 knitr_1.17 magrittr_1.5
## [5] hms_0.3 munsell_0.4.3 colorspace_1.3-2 R6_2.2.2
## [9] rlang_0.1.2 stringr_1.2.0 plyr_1.8.4 tools_3.4.1
## [13] grid_3.4.1 gtable_0.2.0 htmltools_0.3.6 assertthat_0.2.0
## [17] yaml_2.1.14 lazyeval_0.2.0 rprojroot_1.2 digest_0.6.12
## [21] tibble_1.3.4 bindrcpp_0.2 glue_1.1.1 evaluate_0.10.1
## [25] rmarkdown_1.6 stringi_1.1.5 compiler_3.4.1 scales_0.5.0
## [29] backports_1.1.0 jsonlite_1.5 pkgconfig_2.0.1