Skip to main content

ECG XML parsing, fast loading, and plotting utilities for research pipelines

Project description

ekgtools

Utilities for working with multi-format ECG waveforms in research and production settings.

Features

  • Unified parser interface for Philips iECG, GE MUSE, ELI, WFDB, and MIMIC records.
  • Centralised configuration with per-call overrides for filter settings and signal scaling.
  • ECGDataset that reads from local storage or S3/MinIO buckets with transparent caching.
  • Plotting helpers for rapid visual inspection of 12-lead rhythms.

Installation

pip install ekgtools

Python 3.10+ is required. Install the appropriate PyTorch/TorchVision wheels for your platform separately if needed.

Quick Start

Parse an ECG file

from ekgtools.parser import ECGParser

parser = ECGParser(
    path="/data/ecg/philips_001.xml",
    config_overrides={
        "bandpass_lower": 1.0,
        "bandpass_higher": 40.0,
        "median_filter_size": 3,
    },
)

ecg = parser.float_array        # (12, n_samples)
metadata = parser.text_data     # demographics & machine measurements

Local datasets for PyTorch

import pandas as pd
from torch.utils.data import DataLoader

from ekgtools.dataset import ECGDataset

df = pd.read_csv("/data/labels.csv")

dataset = ECGDataset(
    directory="/data/ecg",
    df=df,
    filename_column="filename",
    label_column="label",
    specify_leads=["I", "II", "V1", "V2", "V3", "V4", "V5", "V6"],
    fast=True,
)

loader = DataLoader(dataset, batch_size=32, shuffle=True, num_workers=4)

signals, labels, complete = next(iter(loader))

Stream from S3 with caching

from ekgtools.dataset import ECGDataset
from ekgtools.s3 import S3Setup

s3 = S3Setup(
    bucket="ecg-data",
    prefix="records",
    endpoint_url="https://minio.example.com",
    access_key_id="ACCESS",
    secret_key="SECRET",
    region_name="us-east-1",
    use_ssl=True,
)

dataset = ECGDataset(
    directory="public/12lead",   # prefix under the bucket
    df=df,
    filename_column="filename",
    label_column="label",
    storage="s3",
    s3_setup=s3,
    cache_dir="~/.cache/ekgtools",
)

Plotting helpers

import numpy as np
from ekgtools.plot import plot

signals = np.random.randn(12, 5000)
fig = plot(signals, sample_rate=500)
fig.savefig("preview.png", dpi=200)

Configuration

Default values live in ekgtools/config.py and can be overridden per parser invocation via config_overrides. To reuse overrides across multiple parsers:

from ekgtools.config import resolve_config

custom_config = resolve_config(overrides={"bandpass_lower": 0.67})
parser = ECGParser(path, config=custom_config)

Development

pip install -e .[dev]
pytest

License

MIT

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

ekgtools-1.0.1.1.tar.gz (32.4 kB view details)

Uploaded Source

Built Distribution

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

ekgtools-1.0.1.1-py3-none-any.whl (38.0 kB view details)

Uploaded Python 3

File details

Details for the file ekgtools-1.0.1.1.tar.gz.

File metadata

  • Download URL: ekgtools-1.0.1.1.tar.gz
  • Upload date:
  • Size: 32.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for ekgtools-1.0.1.1.tar.gz
Algorithm Hash digest
SHA256 ae7783ac2b88ad1ecca387620fddfb9007e4a03ca1d32699886622899a15c1b6
MD5 d011c0b4595de97c4c50e084c6684b5f
BLAKE2b-256 786ee59f7eb183cbeb5b4756215f4f98ea5fbdfe1e21a30b1f81c064194b3d1b

See more details on using hashes here.

File details

Details for the file ekgtools-1.0.1.1-py3-none-any.whl.

File metadata

  • Download URL: ekgtools-1.0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 38.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for ekgtools-1.0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 66a451960029c764e496117460e1a6f9417ff8db225d7dc6c54c33664d6f81b0
MD5 f767bb38a8713ff06307fc7d420e84cb
BLAKE2b-256 51c13e0352aa9aa8be4882a9609c60384993d3454ff447e4ef261fef199784a5

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