running

Desde hace unos años, soy aficionado a eso que ahora se llama running, y que de toda la vida de Dios se ha llamado salir a correr. Como buen aficionado a los datos, pues empleo una app en el móvil para monitorizar todas mis actividades (en mi caso Runkeeper).

Bueno, pues no hace demasiado acabé en una página que visualizaba las rutas que la gente realiza a la hora de salir a correr. Recopilaba datos de las webs de todas estas apps deportivas y creaba una especie de mapas de calor. El artículo en cuestión es "Where People Run in Major Cities" y lo podéis leer aquí (link). Ese artículo, por cierto, se basaba en otro anterior, "Running traces" (link). Sobre el tema también hay otros intentos, igual algo más ambiciosos, como "Running paths in Amsterdam" (link) que pueden servir para entender algo más la cosa y sin duda como inspiración.

El caso es que me planteé hacer lo mismo pero con mis propias salidas. El enlace al código en R viene en la página anterior (pero bueno, este es el enlace directo). Como veis es muy sencillito, aunque yo le tuve que hacer algún cambio y añadí alguna línea más para que el resultado final fuera algo más bonito. El código le tenéis al final de esta página, y el resultado del experimento quedó tal que así:


Personalmente, más que satisfecho. Se aprecia muy bien las zonas que más piso.


CÓDIGO
library(plotKML)
library(ggplot2)
library(ggmap)

# GPX files downloaded from Runkeeper
files <- list.files("C:/Users/IHC/Documents/MIO/Runkeeper/allRoutes", pattern="*.gpx")
filenames <- paste("C:/Users/IHC/Documents/MIO/Runkeeper/allRoutes", files, sep="/")

# Consolidate routes in one drata frame
index <- c()
latitude <- c()
longitude <- c()
for (i in 1:length(filenames)) {
 
  route <- readGPX(filenames[i])
  location <- route$tracks[[1]][[1]]
 
  index <- c(index, rep(i, dim(location)[1]))
  latitude <- c(latitude, location$lat)
  longitude <- c(longitude, location$lon)
}
routes <- data.frame(cbind(index, latitude, longitude))

# Map the routes
ids <- unique(index)
plot(routes$longitude, routes$latitude, type="n", axes=FALSE, xlab="", ylab="", main="", asp=1)
for (i in 1:length(ids)) {
  currRoute <- subset(routes, index==ids[i])
  lines(currRoute$longitude, currRoute$latitude, col="#00000020")
}

# Plot over map of Torrelavega
TorreMap <- qmap(location = 'torrelavega', zoom = 14, maptype = 'watercolor', source = 'stamen')

TorreMap +
  geom_path(aes(x = longitude, y = latitude, group = factor(index)),
            colour="#1E2B6A", data = routes, alpha=0.3)