Skip to main content

Convenience functions for analysis of lactate-intensity curves.

Project description

PyPI - Version GitHub Actions Workflow Status GitHub License

forthebadge forthebadge

lactate-thresholds

A Python package to analyze lactate values and corresponding thresholds. Typically useful in a context when used to determine workout zones.

Test out the UI here.

Installation

pip install lactate_thresholds
# OR
uv add lactate_thresholds
# OR 
# install command for whatever package manager you use

Basic usage

You will need a dataframe that holds your measurement values. Let's start by importing an example dataframe.

import lactate_thresholds as lt
from lactate_thresholds.data import example_data_cycling

df = example_data_cycling()
df
   step  length  intensity  rel_power  heart_rate  lactate_4  lactate_8  cadence  rpe
0     1       8        100        1.3         113        1.0        1.0      102    6
1     2       8        140        1.8         126        1.0        1.0      100    7
2     3       8        180        2.3         137        0.9        0.9      100   10
3     4       8        220        2.8         151        1.0        1.0       98   12
4     5       8        260        3.3         168        1.9        1.9       98   16
5     6       8        300        3.8         181        3.3        3.8       94   18
6     7       8        340        4.3         190        6.4        7.5       92   19

Note that the only cols required are step, length, intensity, heart_rate and lactate. If your columns are not correctly named (in this example the lactate column is missing), you can specify the correct name in the following steps.

results = lt.determine(df, lactate_col='lactate_8')

The above determine function is a convenience function that runs (in the following order):

  • lactate_thresholds.clean_data(df)
  • lactate_thresholds.interpolate(df_clean)
  • lactate_thresholds.methods.determine_ltp(df_clean, df_interpolated)
  • lactate_thresholds.methods.determine_mod_dmax(df_clean, df_interpolated)
  • lactate_thresholds.methods.determine_loglog(df_clean, df_interpolated)
  • lactate_thresholds.methods.determine_obla(df_interpolated, 2)
  • lactate_thresholds.methods.determine_obla(df_interpolated, 4)
  • lactate_thresholds.methods.determine_baseline(df_clean, df_interpolated, 0)
  • lactate_thresholds.types.LactateThresholdResults.calc_lt1_lt2_estimates()

The returned object is an instance of LactateThresholdResults which looks more or less like:

class LactateThresholdResults(BaseModel):
    clean_data: pd.DataFrame
    interpolated_data: pd.DataFrame
    ltp1: LactateTurningPoint | None = None
    ltp2: LactateTurningPoint | None = None
    mod_dmax: ModDMax | None = None
    loglog: LogLog | None = None
    baseline: BaseLinePlus | None = None
    obla_2: OBLA | None = None
    obla_4: OBLA | None = None
    lt1_estimate: ThresholdEstimate | None = None
    lt2_estimate: ThresholdEstimate | None = None

Plotting

Some basic plotting functionalities implemented in Altair are present, most notably:

  • lactate_thresholds.plot.lactate_intensity_plot
  • lactate_thresholds.plot.heart_rate_intensity_plot

For example:

lactate intensity plot

Zone calculation

Basic zone calculations (yet to be verified) are available at:

  • lactate_thresholds.zones.seiler_3_zones
  • lactate_thresholds.zones.seiler_5_zones
  • lactate_thresholds.zones.friel_7_zones_running

Streamlit app

There is a minimal streamlit app built in that you can use to interactively analyse your data.

The app is available through a script. Run it as follows (to be tested after first deploy to pypi):

pipx install lactate_thresholds
lt_app

# OR
uv tool install lactate_thresholds
lt_app

Note that a Dockerfile is also available that runs the streamlit app.

streamlit app

Acknowledgements

A big shout out to lactater that most definitely served as a strong inspiration for this package.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lactate_thresholds-0.3.8.tar.gz (452.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lactate_thresholds-0.3.8-py3-none-any.whl (15.4 kB view details)

Uploaded Python 3

File details

Details for the file lactate_thresholds-0.3.8.tar.gz.

File metadata

  • Download URL: lactate_thresholds-0.3.8.tar.gz
  • Upload date:
  • Size: 452.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.5.7

File hashes

Hashes for lactate_thresholds-0.3.8.tar.gz
Algorithm Hash digest
SHA256 8a4354a51dc15eaed4b59fb02882a61c5b1948320d917362643d2ee39ff718d7
MD5 131cb1a7e44f7b05278fea716240f7c6
BLAKE2b-256 7dd279c96dec52a7a0e69b4fe6015186bfa7e06089be499ffc63aaf365829b04

See more details on using hashes here.

File details

Details for the file lactate_thresholds-0.3.8-py3-none-any.whl.

File metadata

File hashes

Hashes for lactate_thresholds-0.3.8-py3-none-any.whl
Algorithm Hash digest
SHA256 a6a27e9ae0c1208d977ff894fb67dc35a409dd9778d48aa10754ad2094f811ca
MD5 eef590d5ea092dac389bd27bb692dced
BLAKE2b-256 419e13e0263abc2d6b8e5f331e43aa09c695e413a18aedeae69638e5879e3453

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page