library(dplyr)
## Warning: package 'dplyr' was built under R version 3.5.1
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(forecast)
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following object is masked from 'package:base':
## 
##     date
load("track_all.rdata")
 colnames(track_all)[1] <- "Name"
meta <- read.csv("EleMetaDat.csv", stringsAsFactors = F)
track_all <- left_join(track_all, meta[,1:2], by = c('Name'))
## Warning: Column `Name` joining factor and character vector, coercing into
## character vector
myele <- "Lisa"
start <- ymd_hms("2017-05-31 23:59:59")
end <- ymd_hms("2017-09-01 00:00:00")

track = track_all %>%
  select(name = Name, x=X, y=Y, timestamp=Fixtime, sex=Sex) %>%
  mutate_if(is.factor, as.character) %>%
  mutate(timestamp = ymd_hms(timestamp)) %>%
  filter(name == myele, timestamp > start, 
         timestamp < end) %>%
  group_by(name) %>%
  arrange(timestamp) %>%
  distinct()

res = list()
i=1

repeat {

  res[[i]] = track %>%
  transmute(
    time_diff = difftime(timestamp, lag(timestamp, i), units="mins"),
    x_diff = x - lag(x, i),
    y_diff = y - lag(y, i),
  ) %>% 
  na.omit()

  if (min(res[[i]]$time_diff) > 60*96 | i > 500)
    break
  
  i=i+1
}
nhours = 50
  
df = bind_rows(res) %>%
  filter(time_diff < 60*nhours) %>%
  mutate(hour = cut(as.numeric(time_diff)/60,breaks = seq(0,nhours,2)))

png("test.png", width = 2000, height = 2000)
ggplot(df, aes(x=x_diff,y=y_diff)) +
  stat_density_2d(geom = "polygon", aes(fill = stat(nlevel))) + 
  scale_fill_viridis_c() +
  facet_wrap(~hour)
dev.off()
## quartz_off_screen 
##                 2
knitr::include_graphics("test.png")

df %>%
  group_by(hour) %>%
  summarize(
    mean(x_diff),
    mean(y_diff),
    sd(x_diff),
    sd(y_diff),
    cor(x_diff, y_diff)
  ) %>%
  knitr::kable(digits=3)