Deep Learning × ECG (2) :利用WFDB包读取心律失常ECG数据

本篇主要介绍使用 WFDB工具包 对 ECG数据 进行操作,能够直接读取心电信号数据。

WFDB包可以直接获取ECG心拍类型,读取心电记录,读取R峰等等以及利用matplotlib绘制心电信号波形。

WFDB 包 是目前处理生理信号数据最常用的包之一。

文章目录

  • 1. 安装wfdb包
  • 2. 显示所有的心跳类型
  • 3. 读取心拍记录,并画出图像
    • 3.1 读取ECG数据
    • 3.2 获取R峰位置,截取心拍

1. 安装wfdb包

如果你已经安装了Anaconda 和 Pycharm,可以直接在终端下,执行如下命令:

pip install wfdb

安装完成后,使用以下命令检查是否安装成功。

import wfdb
print(wfdb.__version__)

显示版本号,即安装成功
Deep Learning × ECG (2) :利用WFDB包读取心律失常ECG数据_第1张图片

2. 显示所有的心跳类型

import wfdb
#显示心跳类型
wfdb.show_ann_labels()

打印结果:

    label_store symbol                                    description
0             0                              Not an actual annotation
1             1      N                                    Normal beat
2             2      L                  Left bundle branch block beat
3             3      R                 Right bundle branch block beat
4             4      a                Aberrated atrial premature beat
5             5      V              Premature ventricular contraction
6             6      F          Fusion of ventricular and normal beat
7             7      J              Nodal (junctional) premature beat
8             8      A                   Atrial premature contraction
9             9      S     Premature or ectopic supraventricular beat
10           10      E                        Ventricular escape beat
11           11      j                 Nodal (junctional) escape beat
12           12      /                                     Paced beat
13           13      Q                            Unclassifiable beat
14           14      ~                          Signal quality change
16           16      |                     Isolated QRS-like artifact
18           18      s                                      ST change
19           19      T                                  T-wave change
20           20      *                                        Systole
21           21      D                                       Diastole
22           22      "                             Comment annotation
23           23      =                         Measurement annotation
24           24      p                                    P-wave peak
25           25      B              Left or right bundle branch block
26           26      ^                      Non-conducted pacer spike
27           27      t                                    T-wave peak
28           28      +                                  Rhythm change
29           29      u                                    U-wave peak
30           30      ?                                       Learning
31           31      !                       Ventricular flutter wave
32           32      [      Start of ventricular flutter/fibrillation
33           33      ]        End of ventricular flutter/fibrillation
34           34      e                             Atrial escape beat
35           35      n                   Supraventricular escape beat
36           36      @  Link to external data (aux_note contains URL)
37           37      x             Non-conducted P-wave (blocked APB)
38           38      f                Fusion of paced and normal beat
39           39      (                                 Waveform onset
40           40      )                                   Waveform end
41           41      r       R-on-T premature ventricular contraction

3. 读取心拍记录,并画出图像

这边我们使用的是 MITBIH数据库中 采样率为 360Hz 的 ECG数据,链接:https://physionet.org/content/mitdb/1.0.0/

参数介绍:

首先,先看下其中编号为100的头文件:
Deep Learning × ECG (2) :利用WFDB包读取心律失常ECG数据_第2张图片
第一行:100 表示编号,2 表示是双导联的,360 表示采样率为360Hz, 650000 表示该记录下的点数;

第二行和第三行:表示的是两个导联的数据说明;因为是双导联的,两个导联分别是MLII导联 和 V5导联。

Q:这里稍微解释下:650000个点是怎么算的?
A:因为360Hz的数据记录时间是30分钟,采样率是360Hz,意思就是说1s采样360个点,那就是648000个点;但可能前后会有噪声,官方就采取了650000个点;这也是没问题的,采样率不变。


3.1 读取ECG数据

相关参数的解释已经在代码中标注了;其中,因为650000个数据点实在太多了,这里我们只取前1000个点作为演示。

import wfdb
import matplotlib.pyplot as plt

record = wfdb.rdrecord('D:/ECG-Data/MIT-BIH-360/100', # 文件所在路径
                       sampfrom=0, # 读取100这个记录的起点,从第0个点开始读
                       sampto=1000, # 读取记录的终点,到1000个点结束
                       physical=False, # 若为True则读取原始信号p_signal,如果为False则读取数字信号d_signal,默认为False
                       channels=[0, 1]) # 读取那个通道,也可以用channel_names指定某个通道;如channel_names=['MLII']

# 转为数字信号
signal = record.d_signal[0:1000]

# 绘制波形
plt.plot(signal)
plt.title("ECG Signal")
plt.show()

绘制的图形:
Deep Learning × ECG (2) :利用WFDB包读取心律失常ECG数据_第3张图片
大家可以看到,绘制的图片有蓝色和黄色两种颜色,说明把两通道的数据都画出来了;如果大家只需要一个通道的,可以用channel_names参数指定通道数即可。

例如,指定MLII通道;

import wfdb
import matplotlib.pyplot as plt

record = wfdb.rdrecord('D:/ECG-Data/MIT-BIH-360/100', # 文件所在路径
                       sampfrom=0, # 读取100这个记录的起点,从第0个点开始读
                       sampto=1000, # 读取记录的终点,到1000个点结束
                       physical=False, # 若为True则读取原始信号p_signal,如果为False则读取数字信号d_signal,默认为False
                       channel_names=['MLII']) # 读取那个通道,也可以用channel_names指定某个通道;如channel_names=['MLII']

# 转为数字信号
signal = record.d_signal[0:1000]

# 绘制波形
plt.plot(signal)
plt.title("ECG Signal")
plt.show()

绘制的就是单通道的了。
Deep Learning × ECG (2) :利用WFDB包读取心律失常ECG数据_第4张图片

3.2 获取R峰位置,截取心拍

每个心拍记录中的 annotation 是有标注R峰位置的。目前,截取各个心拍的方法主要是根据 R峰 的位置分别向前、向后取一段距离为一个心拍;本节主要是 wfdb的使用,下一节介绍心拍截取、小波去噪等预处理方式。

import wfdb
import matplotlib.pyplot as plt

record = wfdb.rdrecord('D:/ECG-Data/MIT-BIH-360/100', # 文件所在路径
                       sampfrom=0, # 读取100这个记录的起点,从第0个点开始读
                       sampto=1000, # 读取记录的终点,到1000个点结束
                       physical=False, # 若为True则读取原始信号p_signal,如果为False则读取数字信号d_signal,默认为False
                       channel_names=['MLII']) # 读取那个通道,也可以用channel_names指定某个通道;如channel_names=['MLII']

# 转为数字信号
signal = record.d_signal[0:1000]

# 绘制波形
plt.plot(signal)
plt.title("ECG Signal")


# 读取annatations
signal_ann = wfdb.rdann("D:/ECG-Data/MIT-BIH-360/100", "atr", sampfrom=0, sampto=1000)

# 将读取到的annatations的心拍绘制到心电图上
for index in signal_ann.sample:
    plt.scatter(index, signal[index][0], marker="*")

# 并打印出改心拍标注的类型
print(signal_ann.symbol)
plt.show()

数据展示:
Deep Learning × ECG (2) :利用WFDB包读取心律失常ECG数据_第5张图片
打印的数据类型:
Deep Learning × ECG (2) :利用WFDB包读取心律失常ECG数据_第6张图片

你可能感兴趣的:(Deep,Learning,×,ECG,深度学习,数据库,python)