Contact Information: - Priyanka (priyankaigit@gmail.com)

Problem Statement
“Is the met data suitable to predict energy output at the site?”

PowerCurve<-read.csv("PowerCurve.csv")
SiteData  <-read.csv("SiteData.csv")
SiteEnergy<-read.csv("SiteEnergy.csv")
WindData  <-read.csv("WindData.csv")

UNIVARIATE ANALYSIS

Wind Time Series Data: WindData

# plot(WindData$NW_spd_2m,WindData$NW_dir_2m, xlab="Speed(m/s)", ylab="Direction") 

# plot(WindData$NW_spd_10m,WindData$NW_dir_10m, xlab="Speed(m/s)", ylab="Direction") 

# plot(WindData$NW_spd_50m,WindData$NW_dir_50m, xlab="Speed(m/s)", ylab="Direction") 

library(reshape2)
WindData.melted<-melt(WindData[,c("Time", "NW_spd_2m", "NW_spd_10m", "NW_spd_50m")])
## Using Time as id variables
library(ggplot2)
ggplot(WindData.melted) + 
  geom_density(aes(x = value, color = variable))  + 
  labs(x = "Speed(m/s)", y = "Frequency")

The density plot of of the wind speeds shows that there are very few instances of high wind speeds and many occurrences of the low speeds.

Site Energy Production Data: SiteEnergy
This file has public records for Logan Wind Energy’s monthly energy production.

plot(SiteEnergy$Energy.MWh,ylab="Monthly Energy Production (MwH)", xlab="Year",type="l") 

wind.ts<-ts(SiteEnergy$Energy.MWh, frequency = 12, start = (2007-1))
plot(decompose(wind.ts))

There is quite a bit of seasonality in the data and almost no trend.

Site Characteristics Data: SiteData

Turbine’s Power Curve: PowerCurve
A wind turbine’s power curve shows the idealized relationship between incoming wind and the amount of power produced.

paste("Correlation of Turbine Power Curve: ", 
      cor(PowerCurve$WindSpeed.ms,PowerCurve$Power.kW) )
## [1] "Correlation of Turbine Power Curve:  0.218298480435487"
plot(PowerCurve$WindSpeed.ms,PowerCurve$Power.kW, 
     xlab="Wind Speed(m/s)", ylab="Power (kW)", type="l") 

For winds between 5 (or nearly 3) - 15 m/s , power generated by it is directly proportional or linearly related to the wind speed.


Analysis

1. Transform

Transform an appropriate hourly wind speed using the power curve to get hourly energy production

# Binning the Windspeed variable
WindData.melted$value2<-floor(WindData.melted$value) + 
           floor(WindData.melted$value%%floor(WindData.melted$value)/0.25 + 1)*0.25 

WindData.melted$value2<-ifelse(is.na(WindData.melted$value2),0,WindData.melted$value2)

names(WindData.melted)[4]<-c("WindSpeed.ms")

energy.prod<-merge(WindData.melted,PowerCurve,by = "WindSpeed.ms",all.x=T,all.y=F)
energy.prod<-energy.prod[,-6]
energy.prod<-energy.prod[order(energy.prod$Time),]

# plot(energy.prod$Power.kW,ylab="Monthly Energy Production (MwH)", type="l") 

library(ggplot2)
ggplot(energy.prod) + 
  geom_density(aes(x = Power.kW, color = variable))  + 
  labs(x = "Speed(m/s)", y = "Frequency")

2. Aggregate

Aggregate hourly energy production to the monthly level

energy.prod$date<-as.Date(energy.prod$Time)
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following object is masked from 'package:base':
## 
##     date
energy.prod<-energy.prod[isoyear(energy.prod$date)>=2007,]

library(lubridate)
energy.prod$ym<-format(energy.prod$date,"%Y-%m")

agg.energy<-aggregate(energy.prod$Power.kW, by=list(energy.prod$ym), FUN=sum, na.rm=TRUE)

names(agg.energy)<-c("ym","Power.MWh")

3. Compare

Compare modelled monthly energy to the publicly reported observed energy

energy.final<-merge(agg.energy,SiteEnergy,by.x="ym",by.y="Month")
energy.final2<-melt(energy.final[,1:3])
## Using ym as id variables
ggplot(energy.final2) + 
  geom_density(aes(x = value, color = variable))  + 
  labs(x = "Energy Produced/Reported", y = "Frequency")

Energy.MWh is what is reported to be produced and Power.MWh is the calculated value based on the available information.