Skip to main content

a package to calculate features from Rr Interval for HRV analyses

Project description

Heart Rate Variability analysis

PyPI version Build Status codecov License: GPL v3 Downloads

hrvanalysis is a Python module for Heart Rate Variability analysis of RR-intervals built on top of SciPy, AstroPy, Nolds and NumPy and distributed under the GPLv3 license.

The development of this library started in July 2018 as part of Aura Healthcare project, in OCTO Technology R&D team and is maintained by Robin Champseix.

alt text

Full documentation : https://aura-healthcare.github.io/hrv-analysis

Website : https://www.aura.healthcare

Github : https://github.com/Aura-healthcare

Version : 1.0.4

Installation / Prerequisites

User installation

The easiest way to install hrv-analysis is using pip :

$ pip install hrv-analysis

you can also clone the repository:

$ git clone https://github.com/Aura-healthcare/hrv-analysis.git
$ cd hrv-analysis
$ uv sync --all-extras

Dependencies

hrvanalysis requires the following:

  • Python (>= 3.5)
  • astropy >= 3.0.4
  • future >= 0.16.0
  • nolds >= 0.4.1
  • numpy >= 1.15.1
  • scipy >= 1.1.0

Note: The package can be used with all Python versions from 3.5 to latest version (currently Python 3.9).

Getting started

Outliers and ectopic beats filtering methods

This package provides methods to remove outliers and ectopic beats from signal for further analysis. Those methods are useful to get Normal to Normal Interval (NN-intervals) from RR-intervals. Please use this methods carefully as they might have a huge impact on features calculation.

from hrvanalysis import remove_outliers, remove_ectopic_beats, interpolate_nan_values

# rr_intervals_list contains integer values of RR-interval
rr_intervals_list = [1000, 1050, 1020, 1080, ..., 1100, 1110, 1060]

# This remove outliers from signal
rr_intervals_without_outliers = remove_outliers(rr_intervals=rr_intervals_list,  
                                                low_rri=300, high_rri=2000)
# This replace outliers nan values with linear interpolation
interpolated_rr_intervals = interpolate_nan_values(rr_intervals=rr_intervals_without_outliers,
                                                   interpolation_method="linear")

# This remove ectopic beats from signal
nn_intervals_list = remove_ectopic_beats(rr_intervals=interpolated_rr_intervals, method="malik")
# This replace ectopic beats nan values with linear interpolation
interpolated_nn_intervals = interpolate_nan_values(rr_intervals=nn_intervals_list)

You can find how to use the following methods, references and more details in the documentation:

  • remove_outliers
  • remove_ectopic_beats

Features calculation

There are 4 types of features you can get from NN-intervals:

Time domain features : Mean_NNI, SDNN, SDSD, NN50, pNN50, NN20, pNN20, RMSSD, Median_NN, Range_NN, CVSD, CV_NNI, Mean_HR, Max_HR, Min_HR, STD_HR

Geometrical domain features : Triangular_index, TINN

Frequency domain features : LF, HF, VLF, LH/HF ratio, LFnu, HFnu, Total_Power

Non Linear domain features : CSI, CVI, Modified_CSI, SD1, SD2, SD1/SD2 ratio, SampEn

As an exemple, what you can compute to get Time domain analysis is :

from hrvanalysis import get_time_domain_features

 # nn_intervals_list contains integer values of NN-interval
nn_intervals_list = [1000, 1050, 1020, 1080, ..., 1100, 1110, 1060]

time_domain_features = get_time_domain_features(nn_intervals_list)

>>> time_domain_features
{'mean_nni': 718.248,
 'sdnn': 43.113,
 'sdsd': 19.519,
 'nni_50': 24,
 'pnni_50': 2.4,
 'nni_20': 225,
 'pnni_20': 22.5,
 'rmssd': 19.519,
 'median_nni': 722.5,
 'range_nni': 249,
 'cvsd': 0.0272,
 'cvnni': 0.060,
 'mean_hr': 83.847,
 'max_hr': 101.694,
 'min_hr': 71.513,
 'std_hr': 5.196}

You can find how to use the following methods, references and details about each feature in the documentation:

  • get_time_domain_features
  • get_geometrical_features
  • get_frequency_domain_features
  • get_csi_cvi_features
  • get_poincare_plot_features
  • get_sampen

Plot functions

There are several plot functions that allow you to see, for example, the Power Spectral Density (PSD) for frequency domain features or Poincaré Plot for non linear domain features:

from hrvanalysis import plot_psd

# nn_intervals_list contains integer values of NN-interval
nn_intervals_list = [1000, 1050, 1020, 1080, ..., 1100, 1110, 1060]

plot_psd(nn_intervals_list, method="welch")
plot_psd(nn_intervals_list, method="lomb")

alt text

from hrvanalysis import plot_poincare

# nn_intervals_list contains integer values of NN-interval
nn_intervals_list = [1000, 1050, 1020, 1080, ..., 1100, 1110, 1060]

plot_poincare(nn_intervals_list)
plot_poincare(nn_intervals_list, plot_sd_features=True)

alt text

You can find how to use methods and details in the documentation:

  • plot_distrib
  • plot_timeseries
  • plot_psd
  • plot_poincare

Here is a high level view of the distinct building blocks of the package:

alt text

References

Here are the main references used to compute the set of features and for signal processing methods:

Heart rate variability - Standards of measurement, physiological interpretation, and clinical use, Task Force of The European Society of Cardiology and The North American Society of Pacing and Electrophysiology, 1996

Signal Processing Methods for Heart Rate Variability - Gari D. Clifford, 2002

Physiological time-series analysis using approximate entropy and sample entropy, Joshua S. Richman, J. Randall Moorman - 2000

Using Lorenz plot and Cardiac Sympathetic Index of heart rate variability for detecting seizures for patients with epilepsy, Jesper Jeppesen et al, 2014

Authors

Robin Champseix - (https://github.com/robinchampseix)

License

This project is licensed under the GNU GENERAL PUBLIC License - see the LICENSE.md file for details

How to contribute

Please refer to How To Contribute

Acknowledgments

I hereby thank Laurent Ribière and Clément Le Couedic, my coworkers who gave me time to Open Source this library. I also thank Fabien Arcellier for his advices on to how build a library in PyPi.

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

hrv_analysis-1.0.5.tar.gz (12.0 MB view details)

Uploaded Source

Built Distribution

hrv_analysis-1.0.5-py3-none-any.whl (40.6 kB view details)

Uploaded Python 3

File details

Details for the file hrv_analysis-1.0.5.tar.gz.

File metadata

  • Download URL: hrv_analysis-1.0.5.tar.gz
  • Upload date:
  • Size: 12.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.4.24

File hashes

Hashes for hrv_analysis-1.0.5.tar.gz
Algorithm Hash digest
SHA256 2539df0d5825313be6faf9a3659accc8e347d5ebb44a66304030b8d7b45385e0
MD5 d9c1f0b86f8e7bf236e86533539e14de
BLAKE2b-256 692870bc34e9ee834e1279e64b729b5ca1a780f34b646c60077bf5f5d2905162

See more details on using hashes here.

File details

Details for the file hrv_analysis-1.0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for hrv_analysis-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 7a9bf92017c501e3e76c02d98435cf5e58959341aa6d5d1dfd73985fe88c87ea
MD5 75ecb857f1f60355199e8b677866f97d
BLAKE2b-256 09237538c6e3327e7d6d5490665e8cb3de01713cf6f38b2c882637e137bc80fb

See more details on using hashes here.

Supported by

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