Har jeg trent så mye som jeg tror (raskeR)?

En kikk på treningsdata fra de siste årenes pusting og pesing rundt med overvåkningsdingser festa til kroppen.

Eivind Hageberg https://suppe-og-analyse.netlify.app
2019-10-05

Inspirert av forrige artikkels kikk på tider fra de 19 løpene jeg har deltatt i de siste årene, begynte jeg å lure på hvordan treningsøktene mine ser ut. Jeg har de siste årene løpt rundt med både div. treningsapper på smarttelefonen med GPS-utstyr, og pulsmåler. For tida er det Runtastic jeg bruker, etter en avsløring fra Forbrukerrådet om Runkeepeers datapraksis for noen år siden. Kan en få tak i dataene sine fra en slik app? Og er det i så fall mulig å si noe om:

Dataene

Ja, data kan man få tak i - viser det seg at svaret er. Med en dump fra Runtastic-sida får en ut masse informasjon, inkludert

Jeg tok ut en dump per 22. september 2019. I utgangspunktet er - eller føles - mye av disse dataene nokså personsensitive. Her er både posisjonsdata, pulsfrekvenser og notater om hva jeg tenkt på etter treningsøkta. Med 292 oppføringer er også mengden temmelig overveldende. Jeg begynner derfor med et utvalg av de oppsummerende dataene - med 10 variabler

glimpse(df)
Rows: 292
Columns: 10
$ start_time      <dbl> 1526840757000, 1540752043000, 1542223614000,…
$ end_time        <dbl> 1526842946000, 1540754401000, 1542225937000,…
$ duration        <int> 2187889, 2356854, 2323585, 2165512, 4937730,…
$ pause_duration  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83250…
$ distance        <int> 6596, 7094, 7187, 6456, 13608, 19025, 7212, …
$ average_speed   <dbl> 10.853202, 10.835800, 11.135000, 10.732612, …
$ max_speed       <dbl> 13.39172, 15.59690, 14.89338, 15.88270, 13.4…
$ duration_per_km <int> 331699, 332232, 323303, 335426, 362855, 3631…
$ pulse_avg       <int> 144, 0, 0, 153, 148, 154, 157, 161, 162, 0, …
$ pulse_max       <int> 159, 0, 0, 182, 170, 175, 180, 181, 183, 0, …

Første utfordring er å finne ut hva tida og alt det andre her måles i. Etter litt roting oppdaget jeg at dette er lagret som antall tusendeler (millisekund?) siden 1. januar 1970. Distanses måles i meter.

En ekstra spennende øvelse her er jo at vi får sett nærmere på tid og datoer i R - en øvelse i seg selv. lubridate-pakken ser ut til å smøre arbeidet litt i et tidyverse-rammeverk, heldigvis:

df = mutate(df, 
            start_time = as.POSIXct(start_time/1000, origin="1970-01-01"),
            end_time = as.POSIXct(end_time/1000, origin="1970-01-01"),
         year = year(start_time),
         month = month(start_time),
         week = week(start_time),
         duration_sec = round(duration/1000, 0),
         duration_min = duration_sec/60,
         duration_lubridate = as.duration(as.period(duration_sec, unit = "seconds")),
         distance = distance / 1000, #konverterer distanse i meter til kilometer
         duration_per_km_lubridate = as.duration(as.period(round(duration_per_km/1000, 0), unit = "seconds")),
         duration_per_km = (duration_per_km/1000)/60,
         puls_sone_snitt = cut(pulse_avg, breaks = c(0, 126, 141, 155, 170, 184, 210), labels = c("0", "Sone 1", "Sone 2", "Sone 3", "Sone 4", "Sone maks")),
         puls_sone_maks = cut(pulse_max, breaks = c(0, 126, 141, 155, 170, 184, 210), labels = c("0", "Sone 1", "Sone 2", "Sone 3", "Sone 4", "Sone maks"))
         )

Hvordan har jeg trent de siste årene?

Så hva er det vi har i disse 292 observasjonene her? For det første er antallet treningsaktiviteter forskjellig over årene. Den første registrerte aktiviteten kom i slutten av september 2015. I 2015 registrerte jeg 35 aktiviteter i appen, 2016 opp mot 65, før det var litt lavere igjen i 2017. Det er ingen registreringer mellom slutten av august 2017 og mars 2018. I 2018 kom jeg over 80 registrerte aktiviteter.

ggplot(data = df) + 
  geom_bar(aes(x = year)) + 
  labs(x = "År", y = "Antall", title = "Flest aktiviteter i 2018", subtitle = "Men 2019 er enda ikke over!")

For å få en bedre forståelse av hva som ligger bak dette, er det greit å se på hvordan antallet aktiviteter varierer med tiden innafor et år: Er det sesongvariasjoner eller stabilitet i det som er registrert? Og kan jeg huske spesifikke hendelser som forklarer fall eller økning i aktivitet?

ggplot(data = temp) + 
  geom_line(aes(x = as.integer(month), y = antall, colour = as.factor(year))) +
  scale_x_continuous(limits = c(1, 12), breaks = 1:12, minor_breaks = NULL) + 
  scale_y_continuous(limits = c(0, 12), breaks = seq(from = 1, to = 12, by = 3), minor_breaks = NULL) + 
  labs(x = "Måned", y = "Antall", colour = "År", title = "Løpshistorikk - et sammensurium", subtitle = "Diverse ting skjer - og da blir det mindre løping")

Litt overraskende for meg her er at det ikke er noen særlig tydelig sesongvariasjon. I stedet er det diverse livshendelser som plasserer treninga i baksetet.

Hvor langt har jeg løpt?

Over disse øktene har jeg totalt løpt 2484 kilometer. Det er langt - litt lengre enn fra Oslo til Roma. Medianløpet er på 7,5 kilometer, det lengste løpet på 42,2 km (maraton!) - men 50 % av løpene er på mellom 6,5 kilometer og 10,2 kilometer. Histogrammet viser at det er langt flest løp på ca. 7 kilometer, fulgt av 10 og 6 kilometer. Dette er ikke spesielt ulikt for de ulike årene. I 2018 klarte jeg å løpe noe flere lengre løp, slik at medianen lå nærmere 10 kilometer.

Hvor fort har jeg løpt?

Det raskeste jeg har løpt er 3 min 20 sek på kilometeren. Medianhastigheten er 6 min per kilometer. For det meste har jeg løpt (i gjennomsnitt) på mellom 5 minutt og 30 sekund og 6 minutt og 30 sekund per kilometer. Fordelinga er ganske pen og symmetrisk. De konsistent raskeste tidene kom i 2018, hvor jeg også trente mer spesifikt mot å løpe raskere på ti-kilometer. 2019 har vært litt treigere, men ikke egentlig fullt så varierende som 2015-2017. Riktignok har vi ikke kommet helt inn i vintersesongen enda, noe som nok godt kan ha noe med dette å gjøre.

Hva med pulsen da?

For en god del av turene mangler puls-data: For 92 av turene er gjennomsnittspulsen satt til 0, og for 76 er den manglende. Hovedforklaringa på manglende pulsdata er dermed Runtastic-bruken - jeg brukte Runkeeper og Polar-system før dette, og trodde jeg hadde fått importert over dataene. Men tydeligvis ikke. Det er heller ikke slik at dette dekker alle turene i denne perioden. I noen tilfeller har jeg i lite motiverte perioder løpt uten pulsutstyr. Men også alle løp jeg har deltatt i, har jeg etterregistrert i appen - og noen ganger har pulsutstyret feila eller gått tom for batteri. Og det er svinvanskelig å bytte batteri på polar-utstyret uten å ødelegge noe.

Det gir oss 124 turer med pulsdata. Hvordan ser disse ut? Median-pulsen ligger på 152, 50 % av turene ligger mellom 148 og 156, og maks gjennomsnittlig puls er på 181. 2019-dataene har mer variasjon i pulsen. Hva vil dette si, siden puls er relativt til makspuls og hvilepuls? At det meste av treningen har foregått i pulssone 2, for fetbrenning, men også noe i aerob sone.

Makspulsen er derimot på 176 i snitt, og ligger i 50 % av tilfellene mellom 170 og 180. Den høyest målte pulsen er 199. Det vil si at jeg i de fleste løpene har vært oppe i pulssone 4, anaerob sone.

Hvor mye trening har jeg fått i meg?

I følge Helsedirektoratet bør voksne være i fysisk aktivitet i 150 minutter moderat intensitet i uka, eller 75 minutter med høy intensitet. Høy intensitet tilsvarer løping.

temp = group_by(df, year, week) %>%
  summarise(antall_minutter = sum(duration_min, na.rm = TRUE)) %>%
  ungroup()

temp = left_join(expand(temp, year, week = 1:52), temp) %>%
  mutate(yearweek = ifelse(nchar(week) == 1, paste0(0, week), week),
         yearweek = paste0(year, yearweek),
         id = seq_along(yearweek),
         treningsdose = as.factor(ifelse(antall_minutter >= 75, "Over 75 min", "Under 75 min"))
         )

qplot(data = df, x = duration_min, binwidth = 5) + 
  labs(x = "Varighet i minutter", y = "Antall", title = "50 % av turene ligger mellom 40 og 60 minutter")
ggplot(data = temp) + 
  geom_bar(aes(x = treningsdose)) + 
  labs(x = "Trening i over eller under 75 minutter i uka?", y = "Antall", title = "To av tre uker med trening er over Helsedirektoratets anbefaling", subtitle = "Men de fleste mangler data")
ggplot(data = temp, aes(x = id, y = antall_minutter)) + 
  geom_point(aes(colour = treningsdose)) + 
  geom_smooth() +
  geom_hline(aes(yintercept = 75)) + 
  labs(x = "Tid", y = "Trening per uke (minutter)")

Figurene viser altså at av de ukene hvor jeg har trent, så har to av tre vært over Helsedirektoratets anbefaling for høyere intensitet. Trendlinja ligger solid over den anbefalte mengden, men dypper seg faretruende nær undersida i det siste. Og for mange uker har jeg ikke trent, og da bør jeg ha dekka inn aktivitetskravet på anna vis, med 150 minutter moderat aktivitet i uka i stedet (altså 25 minutters gange hver dag).

Hvor ofte har jeg klart målet om tre ganger i uka?

Jeg liker egentlig å tro at jeg trener ca. 3 ganger i uka. Hvor ofte har det vært tilfelle her? Ikke veldig ofte - men mer enn ingenting:

Er løpsdeltakelse noe jeg trener mot?

eller noe jeg blir motivert til å trene av? Eller begge deler?

ggplot(data = temp) + 
  geom_point(aes(x = dato, y = distanse_km, colour = treningsform))

Det er vanskelig å si. Løpene er mer lagt til vår og høst, enn at de i seg selv påvirker treningsinnsatsen betydelig.