需要原始的EEG数据,无奈该数据是.edf格式,请教X,他仍给我一个用该格式数据的Repository,看了老半天愣是没get到我要的结果,本着坚持不懈的态度,终于找到了方法,话不多说,具体操作方法如下。
读取该格式文件需要用到mne这个包,直接一行pip搞定。
安装包
pip install mne
导入需要的模块
import json
import mne
数据读取
data_path = './dataset/SC4001E0-PSG.edf' # 存放数据的具体位置,需要改成自己数据存放的地方
signal_name = 'EEG Fpz-Cz' # 所选的通道名称
raw_data = mne.io.read_raw_edf(dataset_path, preload=True)
# preload: 如果为True,则数据将被预加载到内存中(这样可以加快数据的索引), 默认为False
raw_data.pick_channels([signal_name])
eeg = raw_data.to_data_frame() # 将读取的数据转换成pandas的DataFrame数据格式
eeg = list(eeg.values[:,1]) #转换成numpy的特有数据格式
此时,所得的eeg即是所需数据的列表形式,你就可以用该数据愉快地玩耍了。
更新2020-9-24
关于通道名称的标签可以用如下代码打印出来
import pyedflib
import numpy as np
f = pyedflib.EdfReader('./dataset/SC4001E0-PSG.edf')
n = f.signals_in_file
print("signal numbers:", n)
signal_labels = f.getSignalLabels()
print("Labels:", signal_labels)
signal_headers = f.getSignalHeaders()
print("Headers:", signal_headers)
输出为:
signal numbers: 7
Labels: ['EEG Fpz-Cz', 'EEG Pz-Oz', 'EOG horizontal', 'Resp oro-nasal', 'EMG submental', 'Temp rectal', 'Event marker']
Headers: [{'label': 'EEG Fpz-Cz', 'dimension': 'uV', 'sample_rate': 100, 'physical_max': 192.0, 'physical_min': -192.0, 'digital_max': 2047, 'digital_min': -2048, 'prefilter': 'HP:0.5Hz LP:100Hz [enhanced cassette BW]', 'transducer': 'Ag-AgCl electrodes'}, {'label': 'EEG Pz-Oz', 'dimension': 'uV', 'sample_rate': 100, 'physical_max': 196.0, 'physical_min': -197.0, 'digital_max': 2047, 'digital_min': -2048, 'prefilter': 'HP:0.5Hz LP:100Hz [enhanced cassette BW]', 'transducer': 'Ag-AgCl electrodes'}, {'label': 'EOG horizontal', 'dimension': 'uV', 'sample_rate': 100, 'physical_max': 1009.0, 'physical_min': -1009.0, 'digital_max': 2047, 'digital_min': -2048, 'prefilter': 'HP:0.5Hz LP:100Hz [enhanced cassette BW]', 'transducer': 'Ag-AgCl electrodes'}, {'label': 'Resp oro-nasal', 'dimension': '', 'sample_rate': 1, 'physical_max': 2047.0, 'physical_min': -2048.0, 'digital_max': 2047, 'digital_min': -2048, 'prefilter': 'HP:0.03Hz LP:0.9Hz', 'transducer': 'Oral-nasal thermistors'}, {'label': 'EMG submental', 'dimension': 'uV', 'sample_rate': 1, 'physical_max': 5.0, 'physical_min': -5.0, 'digital_max': 2500, 'digital_min': -2500, 'prefilter': 'HP:16Hz Rectification LP:0.7Hz', 'transducer': 'Ag-AgCl electrodes'}, {'label': 'Temp rectal', 'dimension': 'DegC', 'sample_rate': 1, 'physical_max': 40.0, 'physical_min': 34.0, 'digital_max': 2731, 'digital_min': -2849, 'prefilter': '', 'transducer': 'Rectal thermistor'}, {'label': 'Event marker', 'dimension': '', 'sample_rate': 1, 'physical_max': 2048.0, 'physical_min': -2047.0, 'digital_max': 2048, 'digital_min': -2047, 'prefilter': 'Hold during 2 seconds', 'transducer': 'Marker button'}]
end