Python-心電預處理

1、使用pandas讀取數據

一、數聽說明

心電數據以csv文件保存,有5條心電數據,每一行爲一條,以下圖所示,畫出了第一條心電圖。python

在這裏插入圖片描述

二、代碼呈現

使用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)

運行結果
在這裏插入圖片描述spa

2、畫心電圖

一、畫一條心電圖

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

在這裏插入圖片描述

二、畫多條心電圖

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


heart_plot(data)

在這裏插入圖片描述

3、心電濾波

濾波的目的是去出噪音,使心電波形更加平滑。這裏用到了第三方庫heartpy(添加連接描述),它是專門用於處理心電數據的python庫。3d

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

在這裏插入圖片描述

4、截取心拍

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波位置,並用點標出。excel

在這裏插入圖片描述
截取心拍code

# 獲取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

最後,對Python感興趣的話,能夠與我一塊兒交流:點擊連接加入羣聊【python交流羣】索引

相關文章
相關標籤/搜索