This blog is run by Jason Jon Benedict and Doug Beare to share insights and developments on open source software that can be used to analyze patterns and trends in in all types of data from the natural world. Jason currently works as a geospatial professional based in Malaysia. Doug lives in the United Kingdom and is currently Director of Globefish Consultancy Services which provides scientific advice to organisations that currently include the STECF [Scientific, Technical and Economic Committee for Fisheries,] and ICCAT,

Thursday, 1 May 2014

Penang rainfall: is 2014 now catching up?

Key points of post

  • January, February and March 2014 were unusually dry and hot (see post from 12 March 2014);
  • Rainfall in April 2014 has been substantial, and in terms of cumulative rainfall, 2014 is now catching up with other years.

In previous articles we discussed the very dry start to 2014, but how have things progressed since?

A repetitive theme of these articles is how important it is to examine data in different ways, from different ‘vantage’ points,using different styles of plot.

Cumulative rainfall  is plotted in the graph above for selected years for the first five months of the year for the last 10 years. [This means that the rainfall each day is added to the day before and so on]. 2012 and 2009 were both wet years overall up to the end of May; but note that 2012 also had an exceptionally dry January (purple line). 2010 was the driest year out of these 10 for the five month period.

Despite the low rainfall in January and February 2014, relatively high rainfall since the start of April (day 90) has propelled the cumulative total rapidly upwards. It follows that, by December, 2014 could end up anywhere in terms of total rainfall.

We will keep you updated.

The data used for the cumulative rainfall plot is again sourced from the Global Surface Summary of the Day (GSOD) product developed by the Federal Climate Complex at the National Climatic Data Centre (NCDC).

And the R code used to create the above plot is shown below

# Load required libraries 
# Setting work directory
# Reading and reformatting GSOD raw data downloaded from NCDC
dat$yearmoda <- strptime(dat$yearmoda,format="%Y%m%d")
dat$prcp <- as.character(dat$prcp)
dat$prcp1 <-as.numeric(substr(dat$prcp,1,4))
dat$prcpflag <- substr(dat$prcp,5,5)
# Convert precipitation from inches to mms
dat$rain  <- dat$prcp1*25.4
# Remove erronous values
dat$rain[dat$rain > 1000 ] <- NA
dat$year <- as.numeric(format(dat$yearmoda,"%Y"))
dat$month <- as.numeric(format(dat$yearmoda,"%m"))
dat$day <- as.numeric(format(dat$yearmoda,"%d"))
# Getting cumulative sum of rain/year
# Subsetting required period
dat2 <- subset(dat, year >= 2005 & month <= 4 )
# Extracting required columns for transforming data
dat3 <- dat2[, c(25,29)]
# Replace na's with 0's for ddply function
dat3$rain[$rain)] <- 0
dat3 <- ddply(dat3,.(year(date)),transform, cumRain = cumsum(rain))
dat4 <- ddply(dat3,.(date,year(date)),summarize, max = max(cumRain))
dat5 <- dat4[c(diff(as.numeric(substr(dat4$date, 9, 10))) < 0, TRUE), ]
dat5$year <- as.numeric(format(dat5$date,"%Y"))
dat5$month <- as.numeric(format(dat5$date,"%m"))
dat5$day <- as.numeric(format(dat5$date,"%d"))
# Calculate julian day for labeling
dat5$jday <- strptime(dat5$date, "%Y-%m-%d")$yday+1
# Plot cumulative rainfall
plot.title = 'Cumulative Rainfall by Year - January to May (2005-2014)'
plot.subtitle = 'Data source : Federal Climate Complex, Global Surface Summary Of Day Data Version 7'
cr<-  ggplot(dat3, aes(x = yday(date), y = cumRain, color = factor(year(date)))) +
      geom_line(size=0.5,linetype='solid') + geom_point(size=1.5) + theme_bw() +
      ggtitle(bquote(atop(.(plot.title), atop(italic(.(plot.subtitle)), "")))) + theme(plot.title = element_text(face = "bold",size = 16,colour="black")) +
      guides(color = guide_legend(title = "Year", title.position = "top")) +
      scale_x_continuous(breaks=c(0,30,60,90,120,150,180,210,240,270,300,330,360)) +
      xlab("Julian Day") + ylab("Rainfall (mm)\n")+
      theme(panel.border = element_rect(colour = "black",fill=F,size=1),
      panel.grid.major = element_line(colour = "grey",size=0.25,linetype='longdash'),
      panel.grid.minor = element_blank(),
      panel.background = element_rect(fill = "ivory",colour = "black"),
cr <- cr + geom_text(data = subset(dat5, jday > 100 | year == 2014 & jday > 120 ), (aes(x = yday(date), y = max, label = year(date))),size=3,vjust=-0.2, hjust=-0.2)
ggsave(cr, file="Cumulative_RF_Penang.png", width=13, height=7,type = "cairo-png")
Created by Pretty R at