SWD Challenge | 2019M3: Visualise-moi ça!

Le défi de ce mois-ci consiste à être efficace, ni plus ni moins. C’est-à-dire de démontrer nos compétences à traiter les données fournies pour répondre à des questions spécifiques. Les données pour ce défi, abordent les transactions financières entre les pays ainsi que les raisons de ces dons. Les données brutes sont disponibles sur le site de ADIDATA.

Les 3 questions à répondre sont:

  • Qui a donné?
  • Combien est-ce qu’ils ont donné?
  • Pourquoi est-ce qu’ils ont donné?


IMPORTER

data<- read_csv("AidDataCoreThin_ResearchRelease_Level1_v3.1.csv",
col_names = TRUE) #identifier la première ligne comme nom de colonne
## Parsed with column specification:  
## cols(
## aiddata_id = col_integer(),
## aiddata_2_id = col_character(),
## year = col_integer(),
## donor = col_character(),
## recipient = col_character(),
## commitment_amount_usd_constant = col_integer(),
## coalesced_purpose_code = col_integer(),
## coalesced_purpose_name = col_character()
## )
#OMG!!!154 MB de données! du pur plaisir!



EXPLORER

glimpse(data)
## Observations: 1,561,039  ## Variables: 8  
## $ aiddata_id <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...
## $ aiddata_2_id <chr> NA, NA, NA, NA, NA, NA, NA, NA,...
## $ year <int> 2003, 1990, 1991, 1992, 1992, 1...
## $ donor <chr> "African Development Bank (AFDB...
## $ recipient <chr> "Togo", "Burundi", "Cote d`Ivoi...
## $ commitment_amount_usd_constant <int> 29589911, 9713596, 148139421, 2...
## $ coalesced_purpose_code <int> 24030, 31100, 31120, 31120, 311...
## $ coalesced_purpose_name <chr> "Formal sector financial interm...
summary(data)
##    aiddata_id        aiddata_2_id            year         donor            
## Min. : 1 Length:1561039 Min. :1947 Length:1561039
## 1st Qu.: 57937127 Class :character 1st Qu.:2002 Class :character
## Median : 74387020 Mode :character Median :2007 Mode :character
## Mean : 75387177 Mean :2005
## 3rd Qu.: 94736526 3rd Qu.:2010
## Max. :121508987 Max. :9999
## NA's :126989
## recipient commitment_amount_usd_constant coalesced_purpose_code
## Length:1561039 Min. :-1.664e+09 Min. :10000
## Class :character 1st Qu.: 2.088e+04 1st Qu.:14020
## Mode :character Median : 1.071e+05 Median :22040
## Mean : 4.033e+06 Mean :35878
## 3rd Qu.: 5.923e+05 3rd Qu.:43040
## Max. : 2.141e+09 Max. :99820
## NA's :98
## coalesced_purpose_name
## Length:1561039
## Class :character
## Mode :character
##
##
##
##

Les points importants à considérer pour nettoyer ces données avant de les analyser:

  • Le format des années doit être changé pour numérique
  • Le format de la colonne des dons (commitment_amount_usd_constant) doit aussi être changé pour numérique
  • L’année “9999” doit être retirer, probablement une donnée manquante
  • Il faut aussi faire attention au données manquante des dons pour ne pas causer d’erreurs dans l’analyse
data<-data%>%
mutate(year=as.numeric(year))%>% #changer le format pour numérique
mutate(commitment_amount_usd_constant=as.numeric(commitment_amount_usd_constant))%>% #changer le format pour numérique
filter(!year %in% 9999)%>% #retirer valeur aberhante
filter(!is.na(commitment_amount_usd_constant)) #retirer les NAs

glimpse(data)
## Observations: 1,560,882  
## Variables: 8
## $ aiddata_id <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...
## $ aiddata_2_id <chr> NA, NA, NA, NA, NA, NA, NA, NA,...
## $ year <dbl> 2003, 1990, 1991, 1992, 1992, 1...
## $ donor <chr> "African Development Bank (AFDB...
## $ recipient <chr> "Togo", "Burundi", "Cote d`Ivoi...
## $ commitment_amount_usd_constant <dbl> 29589911, 9713596, 148139421, 2...
## $ coalesced_purpose_code <int> 24030, 31100, 31120, 31120, 311...
## $ coalesced_purpose_name <chr> "Formal sector financial interm...
summary(data) 
##    aiddata_id        aiddata_2_id            year         donor            
## Min. : 1 Length:1560882 Min. :1947 Length:1560882
## 1st Qu.: 57940838 Class :character 1st Qu.:2002 Class :character
## Median : 74388871 Mode :character Median :2007 Mode :character
## Mean : 75391640 Mean :2005
## 3rd Qu.: 94737989 3rd Qu.:2010
## Max. :121508987 Max. :2013
## NA's :126989
## recipient commitment_amount_usd_constant coalesced_purpose_code
## Length:1560882 Min. :-1.664e+09 Min. :10000
## Class :character 1st Qu.: 2.088e+04 1st Qu.:14020
## Mode :character Median : 1.071e+05 Median :22040
## Mean : 4.033e+06 Mean :35877
## 3rd Qu.: 5.921e+05 3rd Qu.:43040
## Max. : 2.141e+09 Max. :99820
##
## coalesced_purpose_name
## Length:1560882
## Class :character
## Mode :character
##
##
##
##



EXPLORER

#Quel est le montant total des dons effectués entre 1947 et 2913?  don<-data%>%
summarise(sum=sum(commitment_amount_usd_constant, na.rm=TRUE))
#Réponse: 6 295 M$

#Quel pays ou organisation est le donneur le plus important?
don<-data%>%
group_by(donor)%>%
summarise(sum=sum(commitment_amount_usd_constant, na.rm=TRUE))
#Réponse: sur les 96 donneurs, les États Unis sont les plus importants après la banque mondiale.

#regrouper toutes les donneurs qui font parti de l'Amérique du Nord
#Quel est le montant donné par l'Amérique du Nord pendant cette période?
don<-data%>%
mutate(donor_cat=donor)%>%
mutate(donor_cat=ifelse(str_detect(donor, "United"), "AM", donor_cat))%>%
mutate(donor_cat=ifelse(str_detect(donor, "Bill"), "AM", donor_cat))%>%
mutate(donor_cat=ifelse(str_detect(donor, "North"), "AM", donor_cat))%>%
mutate(donor_cat=ifelse(str_detect(donor, "Canada"), "AM", donor_cat))%>%
filter(donor_cat=="AM")%>%
summarise(sum=sum(commitment_amount_usd_constant, na.rm=TRUE))%>%
mutate(don_million=sum/1000000000)
#Réponse: 1 156 M$

#Quels sont les principaux pays (environ 20%) qui ont reçu cet argent?
recip_NAM<-data%>%
mutate(donor_cat=donor)%>%
mutate(donor_cat=ifelse(str_detect(donor, "United"), "AM", donor_cat))%>%
mutate(donor_cat=ifelse(str_detect(donor, "Bill"), "AM", donor_cat))%>%
mutate(donor_cat=ifelse(str_detect(donor, "North"), "AM", donor_cat))%>%
mutate(donor_cat=ifelse(str_detect(donor, "Canada"), "AM", donor_cat))%>%
mutate(donor_cat=ifelse(str_detect(donor, "World"), "World", donor_cat))%>%
filter(donor_cat=="AM")%>%
group_by(recipient)%>%
summarise(sum=sum(commitment_amount_usd_constant, na.rm=TRUE))%>%
mutate(don_million=sum/1000000000)%>%
filter(don_million>28)%>%
filter(!recipient %in% "Bilateral, unspecified")
#Réponse: Les receveur le plus important des dons sont Egypt, Israel, Iraq, India, Afghanistan, Pakistan

#Quel est l'utilisation principale de cet argent pour chaque pays?
raison_NAM<-data%>%
filter(recipient %in% c("Egypt", "Israel", "Iraq", "India", "Afghanistan","Pakistan"))%>%
mutate(donor_cat=donor)%>%
mutate(donor_cat=ifelse(str_detect(donor, "United"), "AM", donor_cat))%>%
mutate(donor_cat=ifelse(str_detect(donor, "Bill"), "AM", donor_cat))%>%
mutate(donor_cat=ifelse(str_detect(donor, "North"), "AM", donor_cat))%>%
mutate(donor_cat=ifelse(str_detect(donor, "Canada"), "AM", donor_cat))%>%
filter(donor_cat=="AM")%>%
group_by(recipient, coalesced_purpose_name)%>%
summarise(sum=sum(commitment_amount_usd_constant, na.rm=TRUE))%>%
mutate(don_million=sum/1000000000000)
#Réponses:
#Egypt:Food security programs
#Israel:General budget support
#Iraq:Electrical transmission/distribution
#India:Food security programs
#Afghanistan:Legal and judicial development
#Pakistan:Food security programs

VISUALISER

Pour répondre à ces 3 questions, j’ai choisi de me concentrer sur le regroupement de donateurs qui ont le plus donné soit l’Amérique du Nord. Une fois qu’on sait qu’ils ont donné 1 150M$ pour la période à l’étude, c’est plus facile de se concentrer sur les receveurs principaux. J’a choisi de représenter visuellement les pays qui ont reçu 20% de cet argent. Pour répondre à la dernière question, j’ai annoté le graphique pour y indiquer l’utilisation principale de cet argent pour chaque pays receveur. Voici comment j’ai fait et ce que ça donne:

don<-data%>%
mutate(donor_cat=donor)%>%
mutate(donor_cat=ifelse(str_detect(donor, "United"), "AM", donor_cat))%>%
mutate(donor_cat=ifelse(str_detect(donor, "Bill"), "AM", donor_cat))%>%
mutate(donor_cat=ifelse(str_detect(donor, "North"), "AM", donor_cat))%>%
mutate(donor_cat=ifelse(str_detect(donor, "Canada"), "AM", donor_cat))%>%
filter(donor_cat=="AM")%>%
filter(recipient %in% c("Egypt", "Israel", "Iraq", "India", "Afghanistan","Pakistan"))%>%
group_by(recipient)%>%
summarise(sum=sum(commitment_amount_usd_constant, na.rm=TRUE))%>%
mutate(don_million=sum/1000000000)

#Graphique
gg<- ggplot(recip_NAM, aes(x=reorder(recipient, -don_million), y=don_million, fill = recipient))
gg<- gg + geom_bar(stat="identity", width = .1)
gg<- gg + geom_point(size=6, color="#A60067") gg<- gg + coord_flip()
#Ajuster les couleurs et les axes
gg<- gg + scale_y_continuous(breaks=seq(0,150,10), limits = c(0, 150),position = "top")
gg<- gg + scale_fill_manual(values=c("#A9A9A9", "#A9A9A9", "#A9A9A9", "#A9A9A9", "#A9A9A9", "#A9A9A9", "#A9A9A9", "#A9A9A9", "#A9A9A9", "#A9A9A9", "#A9A9A9"))
#Titres, étiquettes et légendes
gg<-gg + labs(x = NULL,
y = NULL,
title =NULL,
subtitle = NULL)
gg<-gg +theme(plot.title = element_blank(),
plot.subtitle = element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_text(hjust=0, size=14, color="#8B8B8B", face="bold"))
gg<-gg +theme(legend.position = "none")
gg<-gg +annotate(geom="text", x=1, y=66, label="62.6M$ pour les programmes de sécurité alimentaire",
color="#8B8B8B", size=4, hjust=0) gg<-gg +annotate(geom="text", x=2, y=48, label="45.1M$ pour l'appui budgétaire général",
color="#8B8B8B", size=4, hjust=0)
gg<-gg +annotate(geom="text", x=3, y=47, label="43.6M$ pour la transmission/distribution d'électricité",
color="#8B8B8B", size=4, hjust=0)
gg<-gg +annotate(geom="text", x=4, y=45, label="41.5M$ pour les programmes de sécurité alimentaire",
color="#8B8B8B", size=4, hjust=0)
gg<-gg +annotate(geom="text", x=5, y=39, label="36.0M$ pour le développement juridique et judiciaire",
color="#8B8B8B", size=4, hjust=0)
gg<-gg +annotate(geom="text", x=6, y=38, label="35.1M$ pour les programmes de sécurité alimentaire",
color="#8B8B8B", size=4, hjust=0)
#adapter le thème du graphique selon les besions:
gg<-gg +theme(panel.border = element_blank(),
panel.background = element_rect(fill = "#FFFFFF", colour = "#FFFFFF"),
plot.background = element_rect(fill = "#FFFFFF", colour = "#FFFFFF"),
panel.grid.major.y = element_blank(),
panel.grid.major.x = element_blank(),
panel.grid.minor = element_blank(),
axis.line.x = element_blank(),
axis.ticks.x = element_blank(),
axis.line.y = element_blank(),
axis.ticks.y = element_blank())

Publicités

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.