mne-python学习之一 入门介绍
mne-python学习之一 入门介绍
mne-python是一款开源的用于EEG/EMG分析、处理和显示的软件。遵循BSD-license协议,由Harvard大学牵头,社区共同开发。主要功能包括:EEG/MEG信号的预处理和去噪,源估计,时频分析,统计测试,功能性连接,机器学习,传感器和源的可视化等等。
mne支持了大部分常见的原始数据格式,默认的(以及自带的sample data)采用的是一种.fif格式,但同时它也支持如.vhdr,.edf,.bdf,.cnt,.egi,.set等格式。
Homepage介绍里给了一段20行的py代码进行原始数据的读取和源估计。
>>> import mne
>>> raw = mne.io.read_raw_fif('raw.fif') # load data
>>> raw.info['bads'] = ['MEG 2443', 'EEG 053'] # mark bad channels
>>> raw.filter(l_freq=None, h_freq=40.0) # low-pass filter
>>> events = mne.find_events(raw, 'STI014') # extract events and epoch data
>>> epochs = mne.Epochs(raw, events, event_id=1, tmin=-0.2, tmax=0.5,
>>> reject=dict(grad=4000e-13, mag=4e-12, eog=150e-6))
>>> evoked = epochs.average() # compute evoked
>>> evoked.plot() # butterfly plot the evoked data
>>> cov = mne.compute_covariance(epochs, tmax=0, method='shrunk')
>>> fwd = mne.read_forward_solution(fwd_fname, surf_ori=True)
>>> inv = mne.minimum_norm.make_inverse_operator(
>>> raw.info, fwd, cov, loose=0.2) # compute inverse operator
>>> stc = mne.minimum_norm.apply_inverse(
>>> evoked, inv, lambda2=1. / 9., method='dSPM') # apply it
>>> stc_fs = stc.morph('fsaverage') # morph to fsaverage
>>> stc_fs.plot() # plot source data on fsaverage's brain 可以看到mne-python的使用是比较方便和直观的,可以完成商业软件中很多的功能。只需比较少的python代码就可以完成很多功能。下面是Homepage给的一些截图。
这只是mne-python众多功能中很小的一小部分,个人感觉效果还是很不错的。
tutorial推荐使用的终端是ipython,因为它提供了比较友好的交互界面以及代码高亮,实时结果显示,代码补全等功能,比较适合于代码量比较小的科学计算。
我们以.vhdr文件为例,其他的文件格式只是api不同,处理的流程大同小异。
首先,我们打开一个.vhdr的文件,这里我们只考虑了EEG信号:
import mne
raw_fname='C:/Users/sw/mne_data/MIDTdata/7777.vhdr' #原始数据文件名
raw=mne.io.read_raw_brainvision(raw_fname) #读取数据文件可以简单看一下原始数据的一些信息:
这样就完成了导入原始数据的工作。这里注意一点,mne在导入数据后如果要做一些简单的波形展示,通道信息输出等可以不需要保存,如果我们需要对原始数据进行去伪迹以及进一步分析的话,就需要我们先将原始数据的全部或部分进行保存才可以继续进行。这也比较好理解,为了原始数据的“干净”。
如上图,为了分析方便,我们先将数据全部保存下来,具体应用时可以选择要保存的时间段和通道。然后我们可以重新打开刚刚保存的数据。
然后就可以进行数据的分析和处理了。首先来看看数据长什么样。
这个就是各个通道的数据,可以通过滑轮以及鼠标左键进行缩放和移动,算是简单但是比较实用吧。如果数据中的某些通道在采集时出现问题或者不需要某些通道的数据,可以通过raw.info['bads']这个列表来加以排除,类似这样:raw.info['bads']+=['EEG 053']。
入门就到这里吧,具体的处理算法还需要慢慢探索。
mne-python学习之一 入门介绍相关教程