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.
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")
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")
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.