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.

Inserte la descripción de la imagen aquí

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文件========》数组(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)

resultado de la operación
Inserte la descripción de la imagen aquí

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()

Inserte la descripción de la imagen aquí

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)

Inserte la descripción de la imagen aquí

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()

Inserte la descripción de la imagen aquí

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.

Inserte la descripción de la imagen aquí
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
Inserte la descripción de la imagen aquíy compártelo hoy!

Supongo que te gusta

Origin blog.csdn.net/weixin_42693217/article/details/109410371
Recomendado
Clasificación