Preprocesamiento de Python-ECG
Uno, usa pandas para leer datos
1. Descripción de los datos
Los datos de ECG se guardan como un archivo csv, hay 5 datos de ECG, uno para cada fila, como se muestra en la figura siguiente, se dibuja el primer ECG.
2. Presentación del código
Utilice pandas para leer el archivo csv y guardar los datos como una matriz bidimensional. Al leer un archivo csv, preste especial atención a si el archivo contiene un índice de fila y un índice de columna.
目标:读一个 excel文件========》数组(10,5600)
第一种情况 没有行索引 没有列标
第二种情况 有行索引 没有列标
第三种情况 没有行索引 没有列标
第四种情况 有行索引 有列索引
作者:周鹏 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)
resultado de la operación
Dos, dibuja un electrocardiograma
1. Dibujar un ECG
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. Dibujar varios ECG
def heart_plot(data):
for i in range(10):
plt.subplot(10, 1, i + 1)
plt.plot(data[i, :])
plt.show()
heart_plot(data)
Tres, filtrado de ECG
El propósito del filtrado es eliminar el ruido y suavizar la forma de onda del ECG. Aquí se usa la biblioteca de terceros heartpy ( agregar descripción del enlace ), que es una biblioteca de Python dedicada al procesamiento de datos de ECG.
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()
Cuatro, intercepta el latido del corazón
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)
Obtenga automáticamente la posición de la onda R y márquela con puntos.
Intercepta el latido del corazón
# 获取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()
¡Dibuja uno de los latidos del corazón
y compártelo hoy!