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.
ECGDatasetthat 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a45165167061a12b967d3bf7c40b929a123d121dd61d82a9916e2b3df8773ab
|
|
| MD5 |
4e4dea77e22f075498c1aa07b24e151e
|
|
| BLAKE2b-256 |
7f73b66ed7ef6b18a83b2990d126ef8e8d9f8b1e2ca76a85001effa36bc2c1aa
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9b1ed153297fb77af115ebfc856f5218a8b0204895c22f5eca12c4693b31f9f
|
|
| MD5 |
c44ddce1aa8c31c8bd4d98af833d12e9
|
|
| BLAKE2b-256 |
4f296f286aae8e72c7b8d22b764a8b1fbedf1a6e16edf0e7d1d814f1edda6f47
|