Thursday, January 17, 2013

Maize trade Part I: Generate the network diagram

It has been several month since my last post, partially due to the fact that my laptop was lost and several deadlines was approaching. Fortunately I will be returning to Taiwan and get a new laptop within a week, and will be updating regularly again.

This post will provide a brief peak of the trade network which will be presented in the new FAO statistical yearbook 2013. The data area available from FAOSTAT (http://faostat3.fao.org/home/index.html#DOWNLOAD) under the "trade" and "detail trade matrix"section.


From the plot we can see that the United States of America is the biggest exporter of maize and Japan is the biggest importer as indicated by the size of the arrow which represents the size of trade. Argentina, Brazil, Hungary and France are also major exporters. This is an improvement from previous analysis and graphics where only bi-lateral relationship or aggregated time series were shown.

Instead of the igraph package, I have used the network package to generate the network this time. The code is much simpler and it  is also more integrated with the sna package for conducting analysis.

## Load required library
library(plyr)
library(network)

## Read in data
maize.df = read.csv("https://dl.dropbox.com/u/18161931/maize_trade.csv", header = TRUE,
    stringsAsFactors = FALSE)

## Present only the top 80% of the value traded to avoid over plotting.
maizeEx.df$cs = cumsum(maizeEx.df$Maize)
maizeFinal.df = subset(maizeEx.df, cs < tail(maizeEx.df$cs, 1) * 0.8)

## Create the network and set the size of arrow
maizeFinal.df$edgeSize = with(maizeFinal.df, Maize/sum(Maize))
maizeFinal.df$arrowSize = ifelse(maizeFinal.df$edgeSize * 30 < 0.5 , 0.5,
    maizeFinal.df$edgeSize * 15)
maize.net = network(maizeFinal.df[, 1:2])

## Plot the network
plot(maize.net, displaylabels = TRUE, label.col = "steelblue",
     edge.lwd = c(maizeFinal.df$edgeSize) * 100,
     arrowhead.cex = c(maizeFinal.df$arrowSize),
     label.cex = 2, vertex.border = "white",
     vertex.col = "skyblue", edge.col = rgb(0, 0, 0, alpha = 0.5))