Skip to main content

ecg-checker

Check the label-curation quality of GE MUSE ECG exports — verify presence/missingness of 35 ECG header attributes (3 classes) and compute a curation score (0-100), optionally rendering the 12-lead waveform. Use for LYDUS data quality assessment of ECG-derived labels before large-scale analysis.

Zur Installation springen

Quellinformationen

Repository
28sungmin/m4-add-skills
Letzte Quellaktivität
14. Juli 2026 um 04:58
Erkannte Sprache von SKILL.md
Englisch
Sterne
0
Forks
0

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
3 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
ecg-checker
description
Check the label-curation quality of GE MUSE ECG exports — verify presence/missingness of 35 ECG header attributes (3 classes) and compute a curation score (0-100), optionally rendering the 12-lead waveform. Use for LYDUS data quality assessment of ECG-derived labels before large-scale analysis.
tier
community
category
lydus
parameters
{"ecg_path":{"description":"Path to a single GE MUSE ECG export file (.tsv/.csv). Tab separator recommended (label values may contain commas).","type":"string"},"encoding":{"description":"File encoding. GE MUSE Korean exports use cp949; UTF-8 exports use 'utf-8'.","default":"cp949","type":"string"},"threshold":{"description":"Curation score below which the ECG record is flagged as risky for research.","default":85,"type":"integer"}}
# LYDUS ECG Checker Verifies the **label-curation quality of GE MUSE ECG data** by parsing the embedded header attributes of a single ECG export, checking which of 35 attributes are present vs missing, and assigning a **curation score (0-100)**. A low score means the record has many missing labels and may cause trouble in large-scale analysis. ## When to Use This Skill - Filtering ECG records by label completeness before a large-scale ECG study - Applying consistent missing-value criteria to GE MUSE–derived ECG data - Quick per-file curation scoring of an ECG export (LYDUS Smart Curation) ## Attribute Classes (35 checked) The reference schema lists 38 GE MUSE attributes; the checker evaluates **35** across three nesting levels: | Class | Where | Count | Attributes | |-------|-------|-------|------------| | class1 | top-level columns | 12 | AlsUnitNo, Examdt, VentricularRate, PRInterval, QRSDuration, QTInterval, QTCorrected, PAxis, RAxis, TAxis, Diagnosis, RestingECG.Diagnosis.DiagnosisStatement | | class2 | `Waveform` dict keys | 9 | WaveformType, WaveformStartTime, NumberofLeads, SampleType, SampleBase, SampleExponent, HighPassFilter, LowPassFilter, ACFilter | | class3 | `Waveform.LeadData[0]` keys | 14 | LeadByteCountTotal, LeadTimeOffset, LeadSampleCountTotal, LeadAmplitudeUnitsPerBit, LeadAmplitudeUnits, LeadHighLimit, LeadLowLimit, LeadID, LeadOffsetFirstSample, FirstSampleBaseline, LeadSampleSize, LeadOff, BaselineSway, LeadDataCRC32 | The `Waveform` column holds a Python-literal structure; the checker parses `literal_eval(Waveform)[1]` (the rhythm waveform) and its `LeadData[0]` (first lead). ## Scoring ``` curation_score = int( present / (present + missing) * 100 ) # 0-100 ``` An attribute is **present** if its value is not `None` and not the string `"nan"`; otherwise **missing**. Records scoring below the threshold (default 85) are flagged. This version checks **presence/missingness only** — data type/range validation is described in the reference but not implemented in v1.0.3. ## SQL Support **Not applicable.** Operates on raw GE MUSE ECG export files (TSV), not a QUIQ table. ## How to Run `scripts/ecg_checker.py` is a **headless** refactor of the original PyQt5 GUI, exposing the same scoring logic without a display. (The original GUI is not vendored — see PROVENANCE.yaml for the source repo.) ```python from scripts.ecg_checker import get_curation_score, format_report result = get_curation_score("/path/to/ecg.tsv", encoding="cp949") print(format_report(result, threshold=85)) # result["curation_score"], result["missing"], result["by_class"], result["present"] ``` Or as a CLI: ```bash python scripts/ecg_checker.py --ecg_path /path/to/ecg.tsv --encoding cp949 --threshold 85 ``` ### Optional: render the 12-lead ECG image ```python from scripts.ecg_checker import load_ecg, render_ecg_png png_path = render_ecg_png(load_ecg("/path/to/ecg.tsv")) # needs ecg_plot, numpy ``` Decodes the base64 `WaveFormData` of the 8 recorded leads and derives III/aVR/aVL/aVF to form a normalized 12-lead plot. ## Critical Notes 1. **Tab-separated input.** GE MUSE label values may contain commas, so a comma-delimited file mis-parses. Use tab (`\t`) — the default in `load_ecg`. 2. **Encoding.** GE MUSE Korean exports are `cp949`; the original GUI hardcodes this. UTF-8 exports need `encoding="utf-8"`. 3. **Single file per run.** v1.0.3 scores one ECG record at a time (the first data row). Multi-file batch analysis and aggregate visualization are planned but not yet implemented. 4. **Scale discrepancy.** The abstract mentions a 1,000,000-point scale, but the shipped code computes a **0-100** score; this skill follows the code. The reference README uses threshold 85; the original GUI splash text says 90 — this skill defaults to 85 and exposes it as a parameter. 5. **Headless only.** This slimmed skill ships just `ecg_checker.py` (importable, identical class lists and score formula). The original PyQt5 GUI is not vendored (it needs a display and is out of scope). Waveform parsing was made defensive (missing/unparseable `Waveform` → those attributes counted missing rather than crashing). ## References - LYDUS-ECG-Checker: https://github.com/Impku/LYDUS-ECG-Checker - Cho SW, Han S, Hong N. "ECG-Checker" v1.0.3, Bonecentriq (Yonsei University), 2022. - GE MUSE ECG data format (38-attribute reference schema in repo README).
Auf GitHub ansehen