脑电数据的预处理包括:
1、数据读取
2、坏道插值
3、数据滤波或陷波
4、伪迹去除
5、数据重采样
MNE(MNE-Python)是一个用于处理脑电(EEG)、磁图(MEG)和其他神经科学数据的Python库。它提供了丰富的功能,包括数据加载、预处理、分析和可视化,旨在帮助研究人员和神经科学家更轻松地进行脑电数据的处理和分析。在本文中,我们使用mne来对不同的格式的脑电数据集进行数据读取。
一、csv格式
import pandas as pd
import mne
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv(r'C:\Users\17927\Desktop\2023072509_eeg.csv', skiprows=0, usecols=range(1, 15))
sfreq = 128
ch_names = ['F3','FC5','AF3','F7','T7','P7','O1','O2','P8','T8','F8','AF4','FC6','F4']
eeg_data = pd.DataFrame(data)
info = mne.create_info(ch_names=ch_names, sfreq=sfreq, ch_types=ch_types)
montage = mne.channels.make_standard_montage('standard_1020')
info.set_montage(montage)
raw = mne.io.RawArray(eeg_data, info)
scalings = {'eeg': 50}
raw.load_data()
raw.plot(scalings='auto')
plt.show(block=True)
二、mat格式
import matplotlib.pyplot as plt
import mne
from scipy.io import loadmat
data = loadmat("E:/EEG/Preprocessed_EEG/1_20131027.mat")
ch_names = ['Fp1','Fpz','Fp2','AF3','AF4','F7','F5','F3','F1','Fz','F2','F4','F6'
,'F8','FT7','FC5','FC3','FC1','FCz','FC2','FC4','FC6','FT8','T7','C5'
,'C3','C1','Cz','C2','C4','C6','T8','TP7','CP5','CP3','CP1','CPz','CP2'
,'CP4','CP6','TP8','P7','P5','P3','P1','Pz','P2','P4','P6','P8','PO7'
,'PO5','PO3','POz','PO4','PO6','PO8','CB1','O1','Oz','O2','CB2']
for key in data.keys():
if key == '__header__' or key == '__version__' or key == '__globals__':
pass
else:
montage = mne.channels.make_standard_montage('standard_1020')
info = mne.create_info(ch_names = ch_names,ch_types = ['eeg' for _ in range(62)], sfreq = 200 )
info.set_montage(montage)
raw = mne.io.RawArray(data[key], info)
scalings = {'eeg': 50}
raw.load_data()
raw.plot(scalings='auto')
plt.show(block=True)
三、npy格式
import matplotlib.pyplot as plt
import mne
import numpy as np
data = np.load("C:/Users/86157/Desktop/数据集/2023072420.npy")
sfreq = 128
ch_names = ['F3','FC5','AF3','F7','T7','P7','O1','O2','P8','T8','F8','AF4','FC6','F4']
ch_types = ['eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg']
info = mne.create_info(ch_names=ch_names, sfreq=sfreq, ch_types=ch_types)
montage = mne.channels.make_standard_montage('standard_1020')
info.set_montage(montage)
raw = mne.io.RawArray(data[0], info)
raw.load_data()
raw.plot(scalings =50, duration=20)
plt.show(block=True)