要分析資料, 就要先了解資料的成份, 這個資料庫是從PhysioNet來的, 是MIT與醫院合作錄的ECG心電圖資料, 其中Apnea指的就是呼吸睡眠中止症, 當新陳代謝症後群的病人睡眠時, 呼吸中止會造成ECG心率有明顯的變化, 於是MIT就 與醫院合作錄製ECG心率, 並由醫生來標示哪些地方是呼吸中止的地方。
MIT每年都會出一個醫學題目開放給所有人挑戰,鼓勵學習電腦科學的人才能將分析醫學數據,進而了解疾病的發生原因, 而這個資料庫就是2000年時出的題目, 詳細說明可以參考這篇文章:
The Apnea-ECG Database
或
官方連結
那資料下載下來後裡面有幾個副檔名:
a01.dat 資料檔
a01.hea 表頭檔
a01.qrs ECG的QRS波標示點
a01.apn 呼吸中止的標示點
要解析這些檔案, 就要使用wfdb的工具, 本來是以C語言來開發, 近年來由於python的流行, 也發展出幾個python的module:
pip install wfdb
pip install pywfdb (python 2.7)
pip install pyECG
那要分析a01這個訊號, 就要先看 a01.hea
a01 1 100 2957000
a01.dat 16 200 12 0 -12 5827 0 ECG
上面代表什麼意思呢?就是a01這個訊號只有1組, 以100Hz的取樣率取得, 總共錄了2957000個samples也就是29570秒,約8.2個小時, 而a01.dat資料檔以format 16的格式編碼 200 ADC units per millivolt, ADC(訊號振幅)為12-bit的解析度,checksum為5827, 基準點為0的ECG訊號。
依照上面的表頭檔資訊, 鍵入相對應的function:
import wfdb
import numpy as np
record = wfdb.rdrecord(record_name='a01', sampfrom=0, sampto=1000,channels=None, physical=True, pb_dir=None, m2s=True, smooth_frames=True, ignore_skew=False, return_res=16, force_channels=True, channel_names=None, warn_empty=False)
wfdb.plot_wfdb(record, title='Record a01 from Physionet Kaggle Apnea ECG')
display(record.__dict__)
即可得到a01資料裡10秒的ECG資料, 如下圖:
這篇有點難, 看不懂可以跳過!