使用wfdb包对MIT-BIH数据集进行处理。
1、读取数据
record方法
使用record方法来读取数据
rdrecord(record_name, sampfrom=0, sampto=None, channels=None,physical=True, pb_dir=None)
参数说明:
record_name: 数据存储的位置
sampfrom: 默认为0
sampto : 数据截取长度;
channels : 选择读取某个通道的数据,默认读取全部通道;
physical : 选择读取数据的类型,True为p_signal,False为d_signal,默认为False;
record = wfdb.rdrecord('data/MIT-BIH/100', sampfrom=0, sampto=25000, channels=[0, ], physical=False)
可调取参数
返回一个record类型的对象,在record对象中一般会调用的参数:
p_signal:模拟信号值(physical = True时可调用)
d_signal:数字信号值(physical = False时可调用)
fs:采样频率
import wfdb
import matplotlib.pyplot as plt
# 读取本地的数据
record = wfdb.rdrecord('D:/深度学习/心电图/Data/mit-bih-arrhythmia-database-1.0.0/101', sampfrom=0, sampto=25000, physical=False, channels=[0, ])
# 采样频率
print("record frequency:" + str(record.fs))
# 截取数据
signal = record.d_signal[0:610]
print('signal shape: ', str(signal.shape))
print('data type', type(signal))
# 绘制波形
plt.plot(signal)
plt.title("ECG signal")
plt.show()
运行结果:
二、注释annatation
rdann方法
使用rdann方法来获取某条数据对应注释
rdann(record_name, extension, sampfrom=0, sampto=None)
参数说明:
record_name: 数据存储的位置
extension:标注文件的格式类型
sampfrom: 默认为0
sampto : 数据截取长度;
可调取参数
chan:保存当前标注的通道,是一个ndarray或者是list
sample:记录每个心拍中R峰位置,是一个ndarray或者是list
symbol:记录的是每个完整ECG信号的类型,一个ECG中有多少个R峰就会有多少个类型,对每个完整ECG信号都进行分类,是一个字符型的ndarray或者是list,其对应wfdb.show_ann_labels()中显示的symbol类型
wfdb.show_ann_labels()
import wfdb
import matplotlib.pyplot as plt
# 读取本地的100号记录,从0到25000,通道0
record = wfdb.rdrecord('D:/深度学习/心电图/Data/mit-bih-arrhythmia-database-1.0.0/101', sampfrom=0, sampto=25000, physical=False, channels=[0, ])
# 截取数据
signal = record.d_signal[0:610]
# 绘制波形
plt.plot(signal)
plt.title("ECG signal")
# 读取annatations
signal_annotation = wfdb.rdann("D:/深度学习/心电图/Data/mit-bih-arrhythmia-database-1.0.0/101", "atr", sampfrom=0, sampto=610)
print('信号通道:',signal_annotation.chan)
print('信号类别:',signal_annotation.symbol)
# 将读取到的annatations的心拍绘制到心电图上
for index in signal_annotation.sample:
plt.scatter(index, signal[index][0], marker="*")
plt.show()