Python-心电预处理

   日期:2020-11-03     浏览:154    评论:0    
核心提示:Python-心电预处理一、使用pandas读取数据1、数据说明2、代码呈现二、画心电图一、使用pandas读取数据1、数据说明2、代码呈现在这里插入代码片二、画心电图

Python-心电预处理

  • 一、使用pandas读取数据
    • 1、数据说明
    • 2、代码呈现
  • 二、画心电图
    • 1、画一条心电图
    • 2、画多条心电图
  • 三、心电滤波
  • 四、截取心拍

一、使用pandas读取数据

1、数据说明

心电数据以csv文件保存,有5条心电数据,每一行为一条,如下图所示,画出了第一条心电图。

2、代码呈现

使用pandas读取csv文件,将数据保存为二维数组。读取csv文件时要特别注意文件是否包含行索引和列标。

目标:读一个  excel文件========》数组(105600)

第一种情况 没有行索引 没有列标

第二种情况 有行索引 没有列标

第三种情况 没有行索引 没有列标

第四种情况 有行索引 有列索引

作者:周鹏 2020-10-26
"""

############################################################
# 第一种情况 没有行索引 没有列标
filename1 = "data1.csv"
data1 = pd.read_csv(filename1, header=None).values
print("第一种情况:", data1.shape)

# 第二种情况 有行索引 没有列索标
filename2 = "data2.csv"
data2 = pd.read_csv(filename2, index_col=0, header=None).values
print("第二种情况:", data2.shape)

# 第一种情况 没有行索引 有列索标
filename3 = "data3.csv"
data3 = pd.read_csv(filename3).values
print("第三种情况:", data3.shape)

# 第一种情况 有行索引 有列索标
filename4 = "data4.csv"
data4 = pd.read_csv(filename4, index_col=0).values
print("第四种情况:", data4.shape)

运行结果

二、画心电图

1、画一条心电图

import matplotlib.pyplot as plt
import pandas as pd

""" 任务1:数据切片 每一个人数据长度:(1,5600) 任务2:画出心电 作者:周鹏 2020-10-26 """

filename = "data1.csv"
data = pd.read_csv(filename, header=None).values

#################################################
# 任务1:数据切片shape
data1 = data[0, :]  # 取出第一条心电数据
print("第一个人的数据长度:", data1.shape)


# 任务2:数据显示
plt.title("the first one")
plt.plot(data1)
plt.xlabel("current/mv")
plt.ylabel("time/s")
plt.show()

2、画多条心电图

def heart_plot(data):
    for i in range(10):
        plt.subplot(10, 1, i + 1)
        plt.plot(data[i, :])
    plt.show()


heart_plot(data)

三、心电滤波

滤波的目的是去出噪音,使心电波形更加平滑。这里用到了第三方库heartpy(添加链接描述),它是专门用于处理心电数据的python库。

import heartpy as hp
import pandas as pd
import matplotlib.pyplot as plt

""" 高通滤波 低通滤波 带通滤波 作者:周鹏 2020-10-26 """
filename = "data1.csv"
data = pd.read_csv(filename, header=None).values
data = hp.scale_data(data)

data1 = data[0, :]

# 高通滤波 >0.75hz
data1_high = hp.filter_signal(data1, cutoff=0.75, sample_rate=500.0, order=3, filtertype='highpass')
# 低通滤波 <15hz
data1_low = hp.filter_signal(data1, cutoff=15, sample_rate=500.0, order=3, filtertype='lowpass')
# 带通滤波 [0.75, 15]
data1_band = hp.filter_signal(data1, cutoff=[0.75, 15], sample_rate=500.0, order=3, filtertype='bandpass')

plt.subplot(4, 1, 1)
plt.title("origial dada")
plt.plot(data1)
plt.subplot(4, 1, 2)
plt.title("data_high")
plt.plot(data1_high)
plt.subplot(4, 1, 3)
plt.title("data_low")
plt.plot(data1_low)
plt.subplot(4, 1, 4)
plt.title("data_band")
plt.plot(data1_band)
plt.show()

四、截取心拍

import heartpy as hp
import pandas as pd
import matplotlib.pyplot as plt

""" 截取心拍 作者:周鹏 2020-10-26 """
filename = "data1.csv"
data = pd.read_csv(filename, header=None).values[0, :]


data = hp.scale_data(data)

# 自动获取R波位置
working_data, measures = hp.process(data, 500.0)
hp.plotter(working_data, measures)

自动获取R波位置,并用点标出。


截取心拍

# 获取R波对应的下标
peaklists = working_data['peaklist']
# 去头去尾 因为头尾数据不一定是完整的
peaklists = peaklists[1:-1]
print("所有R波对应的下标:", peaklists)

# 获取心拍

for i in peaklists:
    tem_data = data[i - 150:i + 150]
    plt.plot(tem_data)
    title = str(i)
    plt.title(title)
    plt.show()

画出其中一个心拍
今天就分享这些内容!

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服