library(tidyverse)
library(maps)
library(lubridate)
library(geosphere)
theme_set(theme_light())
caribou<- tidytuesdayR::tt_load("2020-06-23")
##
## Downloading file 1 of 2: `locations.csv`
## Downloading file 2 of 2: `individuals.csv`
Ind<- caribou$individuals
Loc<- caribou$locations
Ind %>% summarize(across(sex:study_site,list(~mean(!is.na(.)))))
## # A tibble: 1 x 6
## sex_1 life_stage_1 pregnant_1 with_calf_1 death_cause_1 study_site_1
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 0.234 0.0664 0.294 0.189 1
Ind %>%
count(study_site,
deploy_on_longitude,
deploy_on_latitude,
sort=T) %>%
ggplot(aes(deploy_on_longitude,
deploy_on_latitude,
size= n))+
geom_point(color="deepskyblue4")
Here we have an outlayer below 30 degree latitude
Ind %>%
filter(deploy_on_latitude>40) %>%
count(study_site,
deploy_on_longitude,
deploy_on_latitude,
sort=T) %>%
ggplot(aes(deploy_on_longitude,
deploy_on_latitude,
size= n,
color= study_site))+
geom_point(color="deepskyblue4")+
labs(x="Longitude",
y="Latitude")+
scale_size_continuous(guide=F)
much better!
Loc %>%
ggplot(aes(longitude,
latitude,
color= study_site))+
geom_point()
A lot of points!!
Let’s take just one animal track and explore his seasonal movement
ExampleAnimal<-Loc %>%
arrange(timestamp) %>%
filter(animal_id== sample(unique(animal_id),1))
ExampleAnimal %>%
mutate(quarter= as.Date(floor_date(timestamp, "quarter"))) %>%
ggplot(aes(longitude,
latitude,
color= factor(floor_date(timestamp, "quarter"))))+
geom_path()+
labs(title = "Path of one caribou over time",
color="Quarter",
caption = "Source: BC Ministry of Environment (2014)")+
theme(legend.position="bottom")+
facet_wrap(~ quarter)
locations_time<- Loc %>%
group_by(animal_id) %>%
mutate(last_lat= lag(latitude),
last_long= lag(longitude),
hours= as.numeric(difftime(timestamp,
lag(timestamp),
unit= "hours")),
km= distHaversine(cbind(longitude, latitude),
cbind(last_long, last_lat))/1000,
kph= km/ hours) %>%
ungroup()
locations_time %>%
filter(hours <=8,
hours >=.5) %>% # just take the data with tracks between 0.5 and 8 hours
ggplot(aes(kph))+
geom_histogram(fill="deepskyblue4")+
scale_x_log10(labels= scales::comma)+
labs(title= "On average, how fast caribou travel?",
caption = "Source: BC Ministry of Environment (2014)",
y="",
x="Km/h")
by_animal<-
locations_time %>%
filter(hours <=8,
hours >=.5) %>% # just take the data with tracks between 0.5 and 8 hours
group_by(animal_id, study_site) %>%
summarise(start= min(timestamp),
end= max(timestamp),
num_points= n(),
avg_speed= mean(kph[hours<=8], na.rm=T)) %>%
ungroup() %>%
arrange(desc(num_points)) %>%
filter(num_points>=10)
by_animal %>%
ggplot(aes(num_points, avg_speed))+
geom_point(color="deepskyblue4")+
scale_x_log10()+
expand_limits(y=0)+
labs(y = "Average speed",
x= "Observations by Caribou",
title = "Caribou Average Speed",
caption = "Source: BC Ministry of Environment (2014)")
library(moveVis)
library(move)
data("move_data", package = "moveVis") # move class object
# if your tracks are present as data.frames, see df2move() for conversion
Loc2<- Loc %>%
filter(animal_id=="GR_C15") %>%
as.data.frame()
Locq<- df2move(Loc2,
proj = "+init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0",
x = "longitude", y = "latitude",
time = "timestamp", track_id = "animal_id")
# align move_data to a uniform time scale
m <- align_move(Locq, res = 1, unit = "days")
# create spatial frames with a OpenStreetMap watercolour map
frames <- frames_spatial(m, path_colours = c("red"),
map_service = "osm",
map_type = "watercolor",
alpha = 0.5) %>%
add_labels(x = "Longitude",
y = "Latitude") %>% # add some customizations, such as axis labels
add_northarrow() %>%
add_scalebar() %>%
add_timestamps(m,
type = "label")
## Checking temporal alignment...
## Processing movement data...
## Approximated animation duration: ˜ 14.4s at 25 fps for 360 frames
## Retrieving and compositing basemap imagery...
## Assigning raster maps to frames...
## Creating frames...
frames[[100]] # preview one of the frames, e.g. the 100th frame
# animate frames
animate_frames(frames, out_file = "moveVis.gif")
## Rendering animation...
## Approximated animation duration: ˜ 14.4s at 25 fps for 360 frames
##
Frame 1 (0%)
Frame 2 (0%)
Frame 3 (0%)
Frame 4 (1%)
Frame 5 (1%)
Frame 6 (1%)
Frame 7 (1%)
Frame 8 (2%)
Frame 9 (2%)
Frame 10 (2%)
Frame 11 (3%)
Frame 12 (3%)
Frame 13 (3%)
Frame 14 (3%)
Frame 15 (4%)
Frame 16 (4%)
Frame 17 (4%)
Frame 18 (5%)
Frame 19 (5%)
Frame 20 (5%)
Frame 21 (5%)
Frame 22 (6%)
Frame 23 (6%)
Frame 24 (6%)
Frame 25 (6%)
Frame 26 (7%)
Frame 27 (7%)
Frame 28 (7%)
Frame 29 (8%)
Frame 30 (8%)
Frame 31 (8%)
Frame 32 (8%)
Frame 33 (9%)
Frame 34 (9%)
Frame 35 (9%)
Frame 36 (10%)
Frame 37 (10%)
Frame 38 (10%)
Frame 39 (10%)
Frame 40 (11%)
Frame 41 (11%)
Frame 42 (11%)
Frame 43 (11%)
Frame 44 (12%)
Frame 45 (12%)
Frame 46 (12%)
Frame 47 (13%)
Frame 48 (13%)
Frame 49 (13%)
Frame 50 (13%)
Frame 51 (14%)
Frame 52 (14%)
Frame 53 (14%)
Frame 54 (15%)
Frame 55 (15%)
Frame 56 (15%)
Frame 57 (15%)
Frame 58 (16%)
Frame 59 (16%)
Frame 60 (16%)
Frame 61 (16%)
Frame 62 (17%)
Frame 63 (17%)
Frame 64 (17%)
Frame 65 (18%)
Frame 66 (18%)
Frame 67 (18%)
Frame 68 (18%)
Frame 69 (19%)
Frame 70 (19%)
Frame 71 (19%)
Frame 72 (20%)
Frame 73 (20%)
Frame 74 (20%)
Frame 75 (20%)
Frame 76 (21%)
Frame 77 (21%)
Frame 78 (21%)
Frame 79 (21%)
Frame 80 (22%)
Frame 81 (22%)
Frame 82 (22%)
Frame 83 (23%)
Frame 84 (23%)
Frame 85 (23%)
Frame 86 (23%)
Frame 87 (24%)
Frame 88 (24%)
Frame 89 (24%)
Frame 90 (25%)
Frame 91 (25%)
Frame 92 (25%)
Frame 93 (25%)
Frame 94 (26%)
Frame 95 (26%)
Frame 96 (26%)
Frame 97 (26%)
Frame 98 (27%)
Frame 99 (27%)
Frame 100 (27%)
Frame 101 (28%)
Frame 102 (28%)
Frame 103 (28%)
Frame 104 (28%)
Frame 105 (29%)
Frame 106 (29%)
Frame 107 (29%)
Frame 108 (30%)
Frame 109 (30%)
Frame 110 (30%)
Frame 111 (30%)
Frame 112 (31%)
Frame 113 (31%)
Frame 114 (31%)
Frame 115 (31%)
Frame 116 (32%)
Frame 117 (32%)
Frame 118 (32%)
Frame 119 (33%)
Frame 120 (33%)
Frame 121 (33%)
Frame 122 (33%)
Frame 123 (34%)
Frame 124 (34%)
Frame 125 (34%)
Frame 126 (35%)
Frame 127 (35%)
Frame 128 (35%)
Frame 129 (35%)
Frame 130 (36%)
Frame 131 (36%)
Frame 132 (36%)
Frame 133 (36%)
Frame 134 (37%)
Frame 135 (37%)
Frame 136 (37%)
Frame 137 (38%)
Frame 138 (38%)
Frame 139 (38%)
Frame 140 (38%)
Frame 141 (39%)
Frame 142 (39%)
Frame 143 (39%)
Frame 144 (40%)
Frame 145 (40%)
Frame 146 (40%)
Frame 147 (40%)
Frame 148 (41%)
Frame 149 (41%)
Frame 150 (41%)
Frame 151 (41%)
Frame 152 (42%)
Frame 153 (42%)
Frame 154 (42%)
Frame 155 (43%)
Frame 156 (43%)
Frame 157 (43%)
Frame 158 (43%)
Frame 159 (44%)
Frame 160 (44%)
Frame 161 (44%)
Frame 162 (45%)
Frame 163 (45%)
Frame 164 (45%)
Frame 165 (45%)
Frame 166 (46%)
Frame 167 (46%)
Frame 168 (46%)
Frame 169 (46%)
Frame 170 (47%)
Frame 171 (47%)
Frame 172 (47%)
Frame 173 (48%)
Frame 174 (48%)
Frame 175 (48%)
Frame 176 (48%)
Frame 177 (49%)
Frame 178 (49%)
Frame 179 (49%)
Frame 180 (50%)
Frame 181 (50%)
Frame 182 (50%)
Frame 183 (50%)
Frame 184 (51%)
Frame 185 (51%)
Frame 186 (51%)
Frame 187 (51%)
Frame 188 (52%)
Frame 189 (52%)
Frame 190 (52%)
Frame 191 (53%)
Frame 192 (53%)
Frame 193 (53%)
Frame 194 (53%)
Frame 195 (54%)
Frame 196 (54%)
Frame 197 (54%)
Frame 198 (55%)
Frame 199 (55%)
Frame 200 (55%)
Frame 201 (55%)
Frame 202 (56%)
Frame 203 (56%)
Frame 204 (56%)
Frame 205 (56%)
Frame 206 (57%)
Frame 207 (57%)
Frame 208 (57%)
Frame 209 (58%)
Frame 210 (58%)
Frame 211 (58%)
Frame 212 (58%)
Frame 213 (59%)
Frame 214 (59%)
Frame 215 (59%)
Frame 216 (60%)
Frame 217 (60%)
Frame 218 (60%)
Frame 219 (60%)
Frame 220 (61%)
Frame 221 (61%)
Frame 222 (61%)
Frame 223 (61%)
Frame 224 (62%)
Frame 225 (62%)
Frame 226 (62%)
Frame 227 (63%)
Frame 228 (63%)
Frame 229 (63%)
Frame 230 (63%)
Frame 231 (64%)
Frame 232 (64%)
Frame 233 (64%)
Frame 234 (65%)
Frame 235 (65%)
Frame 236 (65%)
Frame 237 (65%)
Frame 238 (66%)
Frame 239 (66%)
Frame 240 (66%)
Frame 241 (66%)
Frame 242 (67%)
Frame 243 (67%)
Frame 244 (67%)
Frame 245 (68%)
Frame 246 (68%)
Frame 247 (68%)
Frame 248 (68%)
Frame 249 (69%)
Frame 250 (69%)
Frame 251 (69%)
Frame 252 (70%)
Frame 253 (70%)
Frame 254 (70%)
Frame 255 (70%)
Frame 256 (71%)
Frame 257 (71%)
Frame 258 (71%)
Frame 259 (71%)
Frame 260 (72%)
Frame 261 (72%)
Frame 262 (72%)
Frame 263 (73%)
Frame 264 (73%)
Frame 265 (73%)
Frame 266 (73%)
Frame 267 (74%)
Frame 268 (74%)
Frame 269 (74%)
Frame 270 (75%)
Frame 271 (75%)
Frame 272 (75%)
Frame 273 (75%)
Frame 274 (76%)
Frame 275 (76%)
Frame 276 (76%)
Frame 277 (76%)
Frame 278 (77%)
Frame 279 (77%)
Frame 280 (77%)
Frame 281 (78%)
Frame 282 (78%)
Frame 283 (78%)
Frame 284 (78%)
Frame 285 (79%)
Frame 286 (79%)
Frame 287 (79%)
Frame 288 (80%)
Frame 289 (80%)
Frame 290 (80%)
Frame 291 (80%)
Frame 292 (81%)
Frame 293 (81%)
Frame 294 (81%)
Frame 295 (81%)
Frame 296 (82%)
Frame 297 (82%)
Frame 298 (82%)
Frame 299 (83%)
Frame 300 (83%)
Frame 301 (83%)
Frame 302 (83%)
Frame 303 (84%)
Frame 304 (84%)
Frame 305 (84%)
Frame 306 (85%)
Frame 307 (85%)
Frame 308 (85%)
Frame 309 (85%)
Frame 310 (86%)
Frame 311 (86%)
Frame 312 (86%)
Frame 313 (86%)
Frame 314 (87%)
Frame 315 (87%)
Frame 316 (87%)
Frame 317 (88%)
Frame 318 (88%)
Frame 319 (88%)
Frame 320 (88%)
Frame 321 (89%)
Frame 322 (89%)
Frame 323 (89%)
Frame 324 (90%)
Frame 325 (90%)
Frame 326 (90%)
Frame 327 (90%)
Frame 328 (91%)
Frame 329 (91%)
Frame 330 (91%)
Frame 331 (91%)
Frame 332 (92%)
Frame 333 (92%)
Frame 334 (92%)
Frame 335 (93%)
Frame 336 (93%)
Frame 337 (93%)
Frame 338 (93%)
Frame 339 (94%)
Frame 340 (94%)
Frame 341 (94%)
Frame 342 (95%)
Frame 343 (95%)
Frame 344 (95%)
Frame 345 (95%)
Frame 346 (96%)
Frame 347 (96%)
Frame 348 (96%)
Frame 349 (96%)
Frame 350 (97%)
Frame 351 (97%)
Frame 352 (97%)
Frame 353 (98%)
Frame 354 (98%)
Frame 355 (98%)
Frame 356 (98%)
Frame 357 (99%)
Frame 358 (99%)
Frame 359 (99%)
Frame 360 (100%)
## Finalizing encoding... done!