Предварительная обработка Python-ЭКГ

Во-первых, используйте панды для чтения данных

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

Нарисуйте одно из сердцебиений
Вставьте описание изображения сюдаи поделитесь им сегодня!

рекомендация

отblog.csdn.net/weixin_42693217/article/details/109410371