# load packages
pkg <- c('data.table', 'dygraphs', 'fst', 'RMySQL', 'xts')
lapply(pkg, require, char = TRUE)
# load all data
dbc <- dbConnect(MySQL(), group = 'dataOps', dbname = 'cycle_hire_ldn')
dts <- data.table(dbGetQuery(dbc,
"SELECT start_station_id, start_day, start_hour, end_station_id, end_day, end_hour, duration FROM hires"
))
dbDisconnect(dbc)
# save order by start station
setorderv(dts, c('start_station_id', 'start_day', 'start_hour', 'end_station_id', 'end_day', 'end_hour'))
y <- dts[, .N, .(station = start_station_id)]
write.fst(y, 'D:/tmp/fst/idxs')
write.fst(dts, 'D:/tmp/fst/dtss')
# save order by month
setorderv(dts, c('start_day', 'start_station_id', 'start_hour', 'end_station_id', 'end_day', 'end_hour'))
y <- dts[, .N, .(month = substr(start_day, 1, 6))]
write.fst(dts, 'D:/tmp/fst/dtsm')
write.fst(y, 'D:/tmp/fst/idxm')
get_station_data <- function(x, by_station = TRUE, cols = NULL){
y <- read.fst( paste0('D:/tmp/fst/idx', ifelse(by_station, 's', 'm')), as.data.table = TRUE)
if(by_station){
rs <- y[station < x, sum(N)] + 1
re <- y[station <= x, sum(N)]
} else {
if(length(x) == 1){
rs <- y[month < x, sum(N)] + 1
re <- y[month <= x, sum(N)]
} else {
if(x[1] == '.'){
rs <- 1
re <- y[month <= x[2], sum(N)]
} else if(x[2] == '.'){
rs <- y[month < x[1], sum(N)] + 1
re <- y[, sum(N)]
} else {
rs <- y[month < x[1], sum(N)] + 1
re <- y[month <= x[2], sum(N)]
}
}
}
read.fst( paste0('D:/tmp/fst/dts', ifelse(by_station, 's', 'm')), columns = cols, from = rs, to = re, as.data.table = TRUE)
}
# test
y <- as.data.frame(get_station_data(12)[, .N, .(start_day = as.Date(as.character(start_day), '%Y%m%d'))])
y <- xts(y[, -1], order.by = y[, 1])
dygraph(y) %>%
dyLegend(width = 700, show = "always", hideOnMouseOut = FALSE) %>%
dyAxis('y', label = 'Total Number of hires', drawGrid = TRUE) %>%
dyHighlight( highlightCircleSize = 4, highlightSeriesBackgroundAlpha = 0.4, hideOnMouseOut = TRUE, highlightSeriesOpts = list(strokeWidth = 2) ) %>%
# dyRangeSelector( dateWindow = c(Sys.Date() - 61, Sys.Date() - 1), height = 30, strokeColor = 'black' ) %>%
dyRoller(rollPeriod = 7)
Comments
0 B
|👍
/👎
0 B
|👍
/👎