Heaven we hope is just up the road (Atlas, Coldplay)
Following with the analysis of migration flows, I have done next two visualizations. These charts are called bump charts and are very suitable to represent rankings. This is what I have done:
- Obtaining top 20 countries of the world according to % of migrants respect its population
- To do this, I divide total number of migrants between 1960 and 2009 by the mean population in the same period.
- I do the same to obtain top 20 countries of the world according to % of immigrants.
- In both cases, I only consider countries with population greater than 2 million.
- For these countries, I calculate % of migrants in each decade (60’s, 70’s, 80’s, 90’s and 00’s), dividing total number of migrants by mean population each decade
- I do the same in the case of immigrants.
- Instead of representing directly % of migrants and immigrants, I represent the ranking of countries according these indicators by decade
This is the bump chart of migrants:
And this is the one of immigrants:
Some comments:
- There is a permanent exodus in Puerto Rico: all decades (except 70’s) is located in the top 1 of countries with most migrants respect its population
- Ireland is also living a diaspora although in the 00’s decade has lost some positions
- Albania, Georgia and Bosnia and Herzegovina are gaining positions. Is East Europe gradually becoming uncomfortable?
- Jamaica is also moving up in this sad competition.
- On the other hand, Hong Kong and Israel are persistently leaders as receivers
- Saudi Arabia has presented an impressive growth receiving immigrants since 70’s
- United States does not appear in the immigrants ranking
- Singapore is gaining positions: in the 00’s decade is the third receiver country
- Also in the 00s, Switzerland is the first European country in the ranking, holding the fifth position
I like using rCharts as well as using Enigma data sets, as I have done previously. This is the code:
library(data.table) library(rCharts) library(dplyr) setwd("YOUR WORKING DIRECTORY HERE") populflows = read.csv(file="enigma-org.worldbank.migration-remittances.migrants.migration-flow-c57405e33412118c8757b1052e8a1490.csv", stringsAsFactors=FALSE) population = fread("enigma-org.worldbank.hnp.data-eaa31d1a34fadb52da9d809cc3bec954.csv") population %>% filter(indicator_name=="Population, total") %>% as.data.frame %>% mutate(decade=(year-year%%10)) %>% group_by(country_name, country_code, decade) %>% summarise(population=mean(value)) %>% plyr::rename(., c("country_name"="country")) -> population2 populflows %>% filter(!is.na(total_migrants)) %>% group_by(migration_year, destination_country) %>% summarise(inmigrants = sum(total_migrants)) %>% plyr::rename(., c("destination_country"="country", "migration_year"="decade")) -> inmigrants populflows %>% filter(!is.na(total_migrants)) %>% group_by(migration_year, country_of_origin) %>% summarise(migrants = sum(total_migrants)) %>% plyr::rename(., c("country_of_origin"="country", "migration_year"="decade")) -> migrants # Join of data sets migrants %>% merge(inmigrants, by = c("country", "decade")) %>% merge(population2, by = c("country", "decade")) %>% mutate(p_migrants=migrants/population, p_inmigrants=inmigrants/population) -> populflows2 # Global Indicators populflows2 %>% group_by(country) %>% summarise(migrants=sum(migrants), inmigrants=sum(inmigrants), population=mean(population)) %>% mutate(p_migrants=migrants/population, p_inmigrants=inmigrants/population) %>% filter(population > 2000000) %>% mutate(rank_migrants = dense_rank(desc(p_migrants)), rank_inmigrants = dense_rank(desc(p_inmigrants))) -> global # Migrants dataset global %>% filter(rank_migrants<=20) %>% select(country) %>% merge(populflows2, by = "country") %>% arrange(decade, p_migrants) %>% mutate(decade2=as.numeric(as.POSIXct(paste0(as.character(decade), "-01-01"), origin="1900-01-01"))) %>% plyr::ddply("decade", transform, rank = dense_rank(p_migrants)) -> migrants_rank # Migrants dataset global %>% filter(rank_inmigrants<=20) %>% select(country) %>% merge(populflows2, by = "country") %>% arrange(decade, p_inmigrants) %>% mutate(decade2=as.numeric(as.POSIXct(paste0(as.character(decade), "-01-01"), origin="1900-01-01"))) %>% plyr::ddply("decade", transform, rank = dense_rank(p_inmigrants)) -> inmigrants_rank # Function for plotting plotBumpChart <- function(df){ bump_chart = Rickshaw$new() mycolors = ggthemes::tableau_color_pal("tableau20")(20) bump_chart$layer(rank ~ decade2, group = 'country_code', data = df, type = 'line', interpolation = 'none', colors = mycolors) bump_chart$set(slider = TRUE, highlight = TRUE, legend=TRUE) bump_chart$yAxis(tickFormat = "#! function(y) { if (y == 0) { return '' } else { return String((21-y)) } } !#") bump_chart$hoverDetail(yFormatter = "#! function(y){return (21-y)} !#") return(bump_chart) } plotBumpChart(migrants_rank) plotBumpChart(inmigrants_rank)