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

Uploaded Python 3

File details

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

File metadata

  • Download URL: ekgtools-1.0.1.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.1.tar.gz
Algorithm Hash digest
SHA256 072b9b37136c96a39efbc66b4da61fc5cb9c897853dcc43fa2863c2ac41a03a7
MD5 93c4ea09cbfb902243e92ba4c77305c3
BLAKE2b-256 88c77d457e8c64b4c93044091ddd557ded1ea6252e512746a047e5e08ef4e5f4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ekgtools-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 37.9 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-py3-none-any.whl
Algorithm Hash digest
SHA256 9ba30b2a5710fd2484feff79d6007bff600044163d9ffca89c0100299834d770
MD5 d1faf0b18714c80445fb616e273ae93b
BLAKE2b-256 555f256a91ba71be4dd22929b1e3b608e93516bce1567a3a35819f7af8608cf7

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