Introduction
The Athlytics
R package simplifies advanced analysis of
athletic performance and training load using data sourced directly from
the Strava API. It provides functions to fetch Strava data (via the
rStrava
package), calculate key metrics based on sports
science principles, and generate insightful visualizations for training
monitoring.
This vignette covers:
- Installation
- Authentication with the Strava API
- Overview and examples of core analysis functions
Installation
You can install the released version of Athlytics from CRAN (once available) with:
# install.packages("Athlytics")
Alternatively, install the development version from GitHub:
# install.packages('remotes') # If needed
# remotes::install_github('HzaCode/Athlytics')
Authentication with Strava
Athlytics
requires a valid Strava API token to fetch
data. This is handled using the rStrava
package.
-
Create a Strava API Application:
- Go to https://www.strava.com/settings/api.
- Create an application (e.g., “My Athlytics App”).
- Set “Authorization Callback Domain” to
localhost
. - Note your Client ID and Client Secret.
-
Authenticate in R:
- Use
rStrava::strava_oauth()
. - Using
cache = TRUE
is highly recommended to securely store the token and avoid re-authenticating every session.
- Use
# --- Example Authentication Code ---
# (Do not run this block directly in the vignette build)
# Replace with your actual credentials or use environment variables
# app_name <- 'MyAthlyticsApp'
# client_id <- "YOUR_CLIENT_ID"
# client_secret <- "YOUR_SECRET"
# This function performs the OAuth handshake (may open browser)
# stoken <- rStrava::strava_oauth(
# app_name,
# client_id = client_id,
# client_secret = client_secret,
# app_scope = "activity:read_all", # Ensure necessary scopes
# cache = TRUE # IMPORTANT: caches the token
# )
# For the examples below, we assume you have obtained a valid token
# object named 'stoken' in your interactive R session.
# Replace this placeholder line if running interactively:
stoken_placeholder <- "<Replace this string with your actual stoken object>"
# You would use the real 'stoken' object in function calls, e.g.:
# some_data <- calculate_acwr(stoken = stoken, ...)
Important: The following examples use
stoken = stoken_placeholder
and have
eval=FALSE
. You need to replace
stoken_placeholder
with your actual token object
(stoken
) and potentially set eval=TRUE
if
running interactively with a valid, cached token.
Example Analysis Visualizations
These functions generate plots to analyze trends and performance.
1. Load Exposure (Acute vs. Chronic)
Visualizes the relationship between short-term (acute) and long-term (chronic) training load to assess readiness and potential injury risk. Note that TSS/HRSS calculations based on activity summaries are approximations.
# Calculate using approximate TSS for Rides (Requires FTP)
exposure_data_tss <- calculate_exposure(
stoken = stoken_placeholder,
activity_type = "Ride",
load_metric = "tss",
user_ftp = 280, # Example FTP, replace with yours
acute_period = 7,
chronic_period = 28
)
# Plot the result
plot_exposure(exposure_data = exposure_data_tss, risk_zones = TRUE)
# Calculate using approximate HRSS for Runs (Requires Max & Resting HR)
hrss_data <- calculate_exposure(
stoken = stoken_placeholder,
activity_type = "Run",
load_metric = "hrss",
user_max_hr = 190, # Example Max HR
user_resting_hr = 50, # Example Resting HR
acute_period = 7,
chronic_period = 42
)
plot_exposure(exposure_data = hrrss_data, risk_zones = TRUE)
2. ACWR Trend
Tracks the Acute:Chronic Workload Ratio over time, highlighting periods of potentially risky load increases.
# Calculate ACWR using duration for Runs
acwr_data_run <- calculate_acwr(
stoken = stoken_placeholder,
activity_type = "Run",
load_metric = "duration_mins",
acute_period = 7,
chronic_period = 28
)
# Plot the trend
plot_acwr(acwr_data = acwr_data_run, highlight_zones = TRUE)
3. Efficiency Factor (EF) Trend
Monitors aerobic efficiency, typically calculated as output (Pace or Power) divided by input (Heart Rate). Requires activities with both relevant metrics.
# Calculate EF (Pace/HR) for Runs and Rides
ef_data_pacehr <- calculate_ef(
stoken = stoken_placeholder,
activity_type = c("Run", "Ride"),
ef_metric = "Pace_HR"
)
# Plot the trend
plot_ef(ef_data = ef_data_pacehr, add_trend_line = TRUE)
4. Personal Bests (PBs)
Visualizes the progression of estimated best efforts over various distances (currently primarily for running).
Note: Fetching PB data can be slow and API-intensive.
# Calculate PBs for 1k, 5k, 10k Runs
# Limit activities checked for speed
pb_data_run <- calculate_pbs(
stoken = stoken_placeholder,
distance_meters = c(1000, 5000, 10000),
activity_type = "Run",
max_activities = 50 # Limit for example
)
# Plot the progression, highlighting new PBs
plot_pbs(pb_data = pb_data_run)
5. Decoupling Trend
Assesses cardiovascular drift during activities by comparing performance (Pace or Power) in the first half vs. the second half relative to Heart Rate.
Note: Fetching decoupling data now uses direct
Strava API calls via httr
(instead of
rStrava::get_activity_streams
) to obtain detailed activity
streams. This can be very slow and may hit API rate limits more easily,
especially for many activities. Consider using the
max_activities
parameter.
# Calculate Pace/HR decoupling for Runs
# Limit activities checked for speed
decoupling_data_run <- calculate_decoupling(
stoken = stoken_placeholder,
activity_type = "Run",
decouple_metric = "Pace_HR",
max_activities = 20 # Limit for example
)
# Plot the trend
plot_decoupling(decoupling_data = decoupling_data_run, add_trend_line = TRUE)
Further Information
This vignette provides a basic overview. For details on specific
functions, their parameters, and underlying calculations, please consult
the function help pages (e.g., ?calculate_acwr
,
?plot_acwr
) in R.
For bug reports or feature requests, please use the GitHub repository issues tracker: https://github.com/HzaCode/Athlytics/issues