前言
本软件设计基于Python编程语言,实现从心电图数据的读取、心电图的绘制、对心电图的操作、相关心电数据的显示以及病症结论的收录及显示。相关算法部分调用自Python专门处理心电数据的第三方库Heartpy。
心电数据的读取
XML解析
由于从老师处得到的心电数据是以XML格式存储的,本文就只介绍如何用Python来解析XML格式的心电数据,至于什么是XML,请自行bd~
可以看到这边收录了几个XML格式的心电数据文件,但是根据文件特性我们不能像打开TXT那样直接使用它。
用浏览器打开是这个样子。
我们调用Python中的LXML库来解析,文件操作用OS和GLOB库。
from lxml import etree#导入lxml库
import os
import glob
path = 'D:\ECG' #设置路径
path_list = os.listdir(path) #获取目录中的内容
path_list.sort(key=lambda x:int(x.split('.')[0])) #整理文件数据及类型
path_file_number = glob.glob('D:\ECG\*.xml') #获取此路径下的所有XML文件并返回一个List
local = 0
sj = open(os.path.join(path,path_list[local]),'rb') #从第一个开始打开文件
tree = etree.parse(sj) #将xml解析为树结构
root = tree.getroot() #获得该树的树根
由于存储的心电数据是基于临床十二导联记录下来的,故XML文件里会有12个类似于<I>,<II>......,<avf>这样的12个节点,我们仅需对这12个节点做操作即可,开头的节点删去。
for child in root[1:2]: #从第二个节点开始操作
lst1 = []
lst1 = child.text
lst1 = lst1.split(" ")
lst1 = lst1[:-1:] #由于发现心电数据中最后一位总是有空格存在,故删掉最后一位。
I = [ int(float(i)) for i in lst1 ] #将心电数据先转化为浮点型再转化为整型,用于绘制心电图
#print(I)
for child in root[2:3]:
lst2 = []
lst2 = child.text
lst2 = lst2.split(" ")
lst2 = lst2[:-1:]
II = [ int(float(i)) for i in lst2 ]
#print(II)
for child in root[3:4]:
lst3 = []
lst3 = child.text
lst3 = lst3.split(" ")
lst3 = lst3[:-1:]
III = [ int(float(i)) for i in lst3 ]
#print(III)
for child in root[4:5]:
lst4 = []
lst4 = child.text
lst4 = lst4.split(" ")
lst4 = lst4[:-1:]
AVF = [ int(float(i)) for i in lst4 ]
#print(AVF)
for child in root[5:6]:
lst5 = []
lst5 = child.text
lst5 = lst5.split(" ")
lst5 = lst5[:-1:]
AVR = [ int(float(i)) for i in lst5 ]
#print(AVR)
for child in root[6:7]:
lst6 = []
lst6 = child.text
lst6 = lst6.split(" ")
lst6 = lst6[:-1:]
AVL = [ int(float(i)) for i in lst6 ]
#