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.tar.gz (32.3 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-py3-none-any.whl (37.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ekgtools-1.0.tar.gz
  • Upload date:
  • Size: 32.3 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.tar.gz
Algorithm Hash digest
SHA256 5a45165167061a12b967d3bf7c40b929a123d121dd61d82a9916e2b3df8773ab
MD5 4e4dea77e22f075498c1aa07b24e151e
BLAKE2b-256 7f73b66ed7ef6b18a83b2990d126ef8e8d9f8b1e2ca76a85001effa36bc2c1aa

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ekgtools-1.0-py3-none-any.whl
  • Upload date:
  • Size: 37.8 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-py3-none-any.whl
Algorithm Hash digest
SHA256 d9b1ed153297fb77af115ebfc856f5218a8b0204895c22f5eca12c4693b31f9f
MD5 c44ddce1aa8c31c8bd4d98af833d12e9
BLAKE2b-256 4f296f286aae8e72c7b8d22b764a8b1fbedf1a6e16edf0e7d1d814f1edda6f47

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