Data
Data are acquired from KNMI. They have various sets of data, this page has a selection form which leads to the data used today. The data comes with a header explaining details, unfortunately in Dutch. Of relevance for this post are TG and TN, average and minimum temperature in 0.1 C. Station used is de Bilt, where they got most data.Analysis
It seems under 7 C there is advantage to using winter tires. Temperature varies within the day, but in general the coldest part should be just before dawn which is morning rush hour. Warmest part around noon, with evening rush hour already cooling down. Based on this I decided that days with an average temperature of 7 C or less, or a minimum temperature of 0 C or less benefit from winter tires. In addition I chose the period 1980 to 2013.Result
It seems October is way too early to switch. Second half of November is an appropriate time.Code
library(plyr)library(dplyr)
library(ggplot2)
# data prepared without text heading
r1 <- read.csv('KNMI_20141115.edited.txt')
Sys.setlocale(category = "LC_TIME", locale = "C") # Not NL months
r2 <- mutate(r1,
date = as.Date(format(YYYYMMDD),'%Y%m%d'),
month =factor(months(date,abbreviate=TRUE),
levels=months(as.Date(
paste('2014',
formatC(1:12,digits=2,width=2,flag='0'),
'01',sep='-')),
abbreviate=TRUE)),
yearf=factor(format(date,'%Y')),
yearn=as.numeric(substr(YYYYMMDD,1,4)),
day=format(date,'%e'))
# days number 1 to 365, using numbers from 1901
days <- filter(r2,yearn==1901) %>%
mutate(.,dayno=format(date,'%j') ) %>%
select(.,month,day,dayno)
# select correct years and Months, remove leap day to sync day numbers
# and flag selected days
r3 <- merge(r2,days,all=TRUE) %>%
filter(.,!grepl('0229',YYYYMMDD)) %>%
mutate(.,daynon=as.numeric(dayno)) %>%
filter(.,yearn>1980 & yearn<2014 & month %in% c('Oct','Nov','Dec')) %>%
mutate(.,wt = TN<0 | TG<70 ) %>%
mutate(.,month=factor(month,levels=c('Oct','Nov','Dec')))
# count the days
r4 <- as.data.frame(xtabs(wt ~ dayno,data=r3)/length(unique(r3$yearn)))
r4$daynon <- as.numeric(as.character(r4$dayno))
# plot
mylegend <- select(r3,day,month,daynon,dayno) %>%
unique(.) %>%
filter(.,day ==' 1')
g1 <- ggplot(r4,aes(x=daynon,y=Freq))
g1 + geom_smooth() +
geom_point() +
scale_x_continuous('Date',breaks=mylegend$daynon,labels=mylegend$month) +
ylab('Proportion wintery')
Hi,
ReplyDeleteCan you also add your data file (KNMI_20141115.edited.txt).
Best regards
Hi Eric,
DeleteI don't think I should be hosting these data, since they are not mine. KNMI, which has the ownership, has a good website, so I don't see the added value of hosting it either.