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.2.0.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.2.0-py3-none-any.whl (38.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ekgtools-1.0.2.0.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.2.0.tar.gz
Algorithm Hash digest
SHA256 68fac4e7a3e3e08ea5a4ab4c5d3884946ea88426445602cc14cbf7a5f2c80b65
MD5 4cdd0f0d8135a5ee14b2feba6337cf1d
BLAKE2b-256 543b5deb999e79738de1fdb06c9ab76e141b212bc57cdbdc1cf082e845637ff2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ekgtools-1.0.2.0-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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f552875a6b4d13ed925a0488bb149cbd1dfc28f9a25e34bf174abb25d266bc3f
MD5 da264e5965a8712de8f38f9e88d29fb9
BLAKE2b-256 1141cd8b91ac389e3bb4c50a81b34c71081b4109f586cc41fa721429643394b4

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