1、使用pandas读取数据
一、数听说明
心电数据以csv文件保存,有5条心电数据,每一行为一条,以下图所示,画出了第一条心电图。python
二、代码呈现
使用pandas读取csv文件,将数据保存为二维数组。读取csv文件时要特别注意文件是否包含行索引和列标。数组
目标:读一个 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)
运行结果
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交流群】索引