Other Predictions Trading Visualisations

Dynamic charts with googleVis

0

Dynamic charts are a nice way to visualize patterns over time. With the googleVis package this kind of graph has become easy to create. In this post, I will use the googleVis package to create two interactive moving bubble charts from the Global Terrorism Database (GTD).  

The GTD can after registration be downloaded here

 

The procedure is straightforward. The data only needs to be transformed into a format that gvisMotionChart() can handle. The requirement is to have ident and time-variables in unique combinations. We also need corresponding x- and y-values of each observation (see the Fruits dataframe from gVis for an example). In this way, ggplot2 is a little more convenient to use since it automatically aggregates the data for us.

 

The gvisMotionChart() yields Java-code that can be directly implemented into any website (see below). Depending on the browser and settings the graph can sometimes be a little unstable. 

Code (the data transformation may not be the most efficient way):

 

require(googleVis)
require(plyr)
require(reshape)
require(stats)
gtd<-read.csv("globalterrorismdb_0611dist.csv",header=TRUE,sep=";") ##Create Motion Plot for Attacktypes gtd[,c("iyear","region","attacktype1","nkill")]->gtd.r
ddply(gtd.r,.(attacktype1,iyear))->g1
g1$count<-rep(1,nrow(g1))
g1<-g1[,c("attacktype1","iyear","nkill","count")]

g1$attacktype1<-ifelse(g1$attacktype1==4,4,g1$attacktype)
g1$attacktype1<-ifelse(g1$attacktype1==5,4,g1$attacktype)
g1$attacktype1<-ifelse(g1$attacktype1==6,4,g1$attacktype)
g1$attacktype1<-ifelse(g1$attacktype1==7,5,g1$attacktype)
g1$attacktype1<-ifelse(g1$attacktype1==8,5,g1$attacktype)
g1$attacktype1<-ifelse(g1$attacktype1==9,5,g1$attacktype)

g2<-transform(g1,b=interaction(attacktype1,iyear))
g3<-aggregate(.~b,data=g2[,-(1:2)],sum)
g3$attacktype<-substr(g3$b,start=1,stop=1)
g3$year<-substr(g3$b,start=3,stop=6)
g4<-g3[,-1]
g4<-g4[,c("year","attacktype","nkill","count")]
g4$year<-as.Date(paste(g4$year,"01","01",sep="-"))

g4$attacktype<-ifelse(g4$attacktype==1,"Assasination",g4$attacktype)
g4$attacktype<-ifelse(g4$attacktype==2,"Armed Assault",g4$attacktype)
g4$attacktype<-ifelse(g4$attacktype==3,"Bombing / Explosion",g4$attacktype)
g4$attacktype<-ifelse(g4$attacktype==4,"Hostage Taking / Hijacking",g4$attacktype)
g4$attacktype<-ifelse(g4$attacktype==5,"Other ",g4$attacktype)

M1<-gvisMotionChart(data=g4,idvar="attacktype",timevar="year",xvar="nkill",yvar="count") print(M1,'chart',file="mc1.txt") ##Create Motion Plot for Regions ddply(gtd.r,.(region,iyear))->G1
G1$count<-rep(1,nrow(G1))
G1<-G1[,c("region","iyear","nkill","count")]

G1$region<-ifelse(G1$region==1,1,G1$region)
G1$region<-ifelse(G1$region==2,2,G1$region)
G1$region<-ifelse(G1$region==3,2,G1$region)
G1$region<-ifelse(G1$region==4,3,G1$region)
G1$region<-ifelse(G1$region==5,3,G1$region)
G1$region<-ifelse(G1$region==6,3,G1$region)
G1$region<-ifelse(G1$region==7,3,G1$region)
G1$region<-ifelse(G1$region==8,4,G1$region)
G1$region<-ifelse(G1$region==9,4,G1$region)
G1$region<-ifelse(G1$region==10,5,G1$region)
G1$region<-ifelse(G1$region==11,5,G1$region)
G1$region<-ifelse(G1$region==12,6,G1$region)
G1$region<-ifelse(G1$region==13,3,G1$region)

G2<-transform(G1,b=interaction(iyear,region))
G3<-aggregate(.~b,data=G2[,-(1:2)],sum)
G3$region<-substr(G3$b,start=6,stop=7)
G3$year<-substr(G3$b,start=1,stop=4)
G4<-G3[,-1]
G4<-G4[,c("year","region","nkill","count")]
G4$year<-as.Date(paste(G4$year,"01","01",sep="-"))

G4$region<-ifelse(G4$region==1,"North America",G4$region)
G4$region<-ifelse(G4$region==2,"Latin America",G4$region)
G4$region<-ifelse(G4$region==3,"Asia and Oceania",G4$region)
G4$region<-ifelse(G4$region==4,"Europe",G4$region)
G4$region<-ifelse(G4$region==5,"Africa",G4$region)
G4$region<-ifelse(G4$region==6,"Russia",G4$region)

M2<-gvisMotionChart(data=G4,idvar="region",timevar="year",xvar="nkill",yvar="count")

print(M2,'chart',file="mc2.txt")
You may also like
Toda-Yamamoto implementation in ‘R’
Visualization of long- and short term stock movements

Leave Your Comment

Your Comment*

Your Name*
Your Webpage