Prétraitement Python-ECG
Premièrement, utilisez des pandas pour lire des données
1. Description des données
Les données ECG sont enregistrées sous forme de fichier csv, il y a 5 données ECG, une pour chaque ligne, comme indiqué dans la figure ci-dessous, le premier ECG est dessiné.
2. Présentation du code
Utilisez pandas pour lire le fichier csv et enregistrer les données sous forme de tableau à deux dimensions. Lors de la lecture d'un fichier csv, faites particulièrement attention à ce que le fichier contienne un index de ligne et un index de colonne.
目标:读一个 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)
résultat de l'opération
Deux, dessinez un électrocardiogramme
1. Dessinez 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. Dessinez plusieurs 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)
Trois, filtrage ECG
Le but du filtrage est d'éliminer le bruit et de rendre la forme d'onde ECG plus fluide. La bibliothèque tierce heartpy ( ajouter une description de lien ) est utilisée ici , qui est une bibliothèque python dédiée au traitement des données 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()
Quatre, intercepte le rythme cardiaque
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)
Obtenez automatiquement la position de l'onde R et marquez-la avec des points.
Intercepter le rythme cardiaque
# 获取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()
Dessinez l'un des battements de cœur
et partagez-les aujourd'hui!