Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # 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)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement