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交流羣】索引