MNE-Python | 开源生理信号分析神器(一)
2021/12/13 14:19:18
本文主要是介绍MNE-Python | 开源生理信号分析神器(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
介绍MNE-Python系列文章,持续更新中…
0. 什么是MNE ?
开门见山地说,MNE是我用过的最强生理信号分析神器(可能是我见识浅薄,大佬勿喷),处理范围涵盖EEG、MEG等各种类型。
MNE本质上就是一个开源的Python第三方库/模块,我认为 MNE官网 首页的介绍就是对MNE最准确的概述,如图:
1. 文章思路
因为MNE的功能实在是很多,基本包括了读取数据集、预处理、分类、可视化等完整流程,所以我不可能全部介绍到。本着授之以鱼不如授之以渔的原则,我决定该系列的第一篇文章思路是:详细介绍一个简单样例demo,展示使用MNE的大致流程。
2. MNE安装
与其他所有的Python第三方库/模块一样,使用 pip install mne
安装即可,不再过多赘述(这里我使用了清华镜像源):
3. MNE 代码实战
先贴一段MNE的代码,如果你之前不了解MNE的话此刻应该比较懵圈,问题不大,接下来我带你逐行分析一下全部代码,Let’s Go ! :
导入MNE相关包
import mne from mne import io from mne.datasets import sample # 数据可视化包 import matplotlib.pyplot as plt
导入数据集
导入数据集有两种方式:
1) 远程下载数据集
在上一步中,我们已经使用 from mne.datasets import sample
导入了sample数据集,注意:这里 sample 是一个数据集的名字!(关于此数据集的介绍放在文末)
然后我们就可以使用data_path() 获取这个数据集里的全部数据:
data_path = sample.data_path()
2) 本地已下载好数据集
# 自定义数据集存放位置 data_path = '/Users/xxx/xxx/MNE-sample-data'
创建数据对象
MNE的数据结构其中之一为raw数据结构,通过以下方式创建raw数据对象:
# 设置相关参数 raw_fname = data_path + '/MEG/sample/sample_audvis_filt-0-40_raw.fif' event_fname = data_path + '/MEG/sample/sample_audvis_filt-0-40_raw-eve.fif' tmin, tmax = -0., 1 event_id = dict(aud_l=1, aud_r=2, vis_l=3, vis_r=4)
# 使用1):preload=False,使用2):preload=True raw = io.Raw(raw_fname, preload=True, verbose=False)
我们通过 print(raw)
,可以发现其核心数据为 n_channels(数据维度)和 times(数据时长):
还可以通过 raw.info
查看raw数据的具体信息:
raw.filter(2, None, method='iir') # 使用iir滤波器进行滤波 events = mne.read_events(event_fname) raw.info['bads'] = ['MEG 2443'] # 设定不良通道 # 通过种类和名字挑选通道 picks = mne.pick_types(raw.info, meg=False, eeg=True, stim=False, eog=False, exclude='bads')
创建 epochs
将数据切分为 epoch 可以方便神经网络进行处理,在MNE中有一个Epochs类,我们能直接通过该类的方法直接从raw数据对象中提取Epochs:
# 创建Epochs类的对象,传入之前设置的参数,(tmin,tmax)为epochs中每个trial的时间长度 epochs = mne.Epochs(raw, events, event_id, tmin, tmax, proj=False, picks=picks, baseline=None, preload=True, verbose=False) labels = epochs.events[:, -1]
提取数据
X = epochs.get_data()*1000 Y = labels
get_data() 返回数据的格式为 (trials, channels, samples),通过 print(X.shape)
输出为(278,61,150):
分别与277.7s(数据时长)/1s(每个trial的时间长度)、通道数(60EEG+1EOG)、采样频率(150Hz)对应。
数据可视化
MNE集成了许多现成的功能函数,只需要简单的一行代码就可以实现许多复杂的功能,来点图片感受一下:
# 分析0-1s内的数据 import matplotlib.pyplot as plt raw.info['bads'] = ['MEG 2443'] picks = mne.pick_types(raw.info, meg=False, eeg=True, stim=False, eog=False, exclude='bads') t_idx = raw.time_as_index([-0., 1.]) data, times = raw[picks, t_idx[0]:t_idx[1]] plt.plot(times,data.T)
# 绘制各通道的功率谱密度 raw.plot_psd() plt.show()
# 绘制SSP矢量图 raw.plot_projs_topomap() plt.show()
4. Sample数据集介绍
数据采集
该数据集是通过位于MGH/HMS/MIT(麻省总医院)的Athinoula A. Martino生物医学成像中心的Neuromag Vectorview系统获得的。同时采集60通道电极帽的MEG(脑磁图)数据。原始MRI(核磁共振)数据集是通过使用MPRAGE序列的西门子1.5 T Sonata扫描仪获取的。
实验设置
在实验中,受试者的左右视野中会出现棋盘图案,同时会伴随出现在左右耳的音调,刺激间隔为750 ms。此外,在受试者的视野中心会随机出现笑脸图案,受试者被要求在笑脸出现后尽快用右手食指按下按键。实验中刺激和响应的对应关系如下:
数据集内容
Sample数据集主要包含两个部分:MEG/sample (MEG/EEG数据)和来自另一位受试者的MRI重建数据 subjects/sample ,我们使用的主要前者,其目录如下:
结束语
Ok,到这里一个MNE的小demo就已经解读完了,或许你已经感受到了MNE的强大和简洁,我会在之后的文章中陆续整理MNE中的各种类和函数,感兴趣的话欢迎点个关注再走呀 ^ _ ^ !!
这篇关于MNE-Python | 开源生理信号分析神器(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型
- 2024-12-23使用python部署一个usdt合约,部署自己的usdt稳定币
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享
- 2024-12-19使用python 把docx转为pdf文件有哪些方法?-icode9专业技术文章分享
- 2024-12-19python怎么更换换pip的源镜像?-icode9专业技术文章分享