目的
以牺牲深度为代价进行入门学习,简易学习基本方法
开始
导入相关库:
# License: BSD-3-Clause
# Copyright the MNE-Python contributors.
import numpy as np
import mne
加载数据
MNE-Python数据结构式基于fif格式的,但是对于其他格式也有阅读方法,如https://mne.tools/stable/documentation/implementation.html#data-formats的Supported data formats部分所示。MNE提供了一个示例数据集,可供学习之用。
现在下载示例数据集开始学习,在以下代码中,导入了一个已经经过滤波的raw示例:
sample_data_folder = mne.datasets.sample.data_path()
sample_data_raw_file = (
sample_data_folder / "MEG" / "sample" / "sample_audvis_filt-0-40_raw.fif"
)
raw = mne.io.read_raw_fif(sample_data_raw_file)
Opening raw data file /home/circleci/mne_data/MNE-sample-data/MEG/sample/sample_audvis_filt-0-40_raw.fif…
Read a total of 4 projection items:
PCA-v1 (1 x 102) idle
PCA-v2 (1 x 102) idle
PCA-v3 (1 x 102) idle
Average EEG reference (1 x 60) idle
Range : 6450 … 48149 = 42.956 … 320.665 secs
Ready.
输出是这样的,返回了一个储存示例数据的位置,然后给出了读取数据的具体成分信息和时间长度。
这里它告诉我们,在文件中有四个“projection item(投影项)”和记录的数据;这些是SSP projectors,用于去除MEG信号中的环境噪声,还有一个用于对EEG通道进行均值参考。这些将后面讨论。
除了加载过程中显示的信息外,你还可以通过打印Raw对象来了解它的基本细节。通过打印它的info属性(一个在Raw、epoch和Evoked对象中保留的字典类对象)可以获得更多信息。info中包含channel locations, applied filters, projectors等内容。
print(raw)
print(raw.info)
<Raw | sample_audvis_filt-0-40_raw.fif, 376 x 41700 (277.7 s), ~3.3 MB, data not loaded>
<Info | 14 non-empty values
bads: 2 items (MEG 2443, EEG 053)
ch_names: MEG 0113, MEG 0112, MEG 0111, MEG 0122, MEG 0123, MEG 0121, MEG …
chs: 204 Gradiometers, 102 Magnetometers, 9 Stimulus, 60 EEG, 1 EOG
custom_ref_applied: False
dev_head_t: MEG device -> head transform
dig: 146 items (3 Cardinal, 4 HPI, 61 EEG, 78 Extra)
highpass: 0.1 Hz
hpi_meas: 1 item (list)
hpi_results: 1 item (list)
lowpass: 40.0 Hz
meas_date: 2002-12-03 19:01:10 UTC
meas_id: 4 items (dict)
nchan: 376
projs: PCA-v1: off, PCA-v2: off, PCA-v3: off, Average EEG reference: off
sfreq: 150.2 Hz
raw对象有几个内置的绘图方法。如下是使用compute_psd显示每个传感器类型的功率谱密度(PSD)。在交互式Python session中,图是允许稍微自由编辑的。
raw.compute_psd(fmax=50).plot(picks="data", exclude="bads", amplitude=False)
raw.plot(duration=5, n_channels=30)
当然,如果要用jupyter等写代码,请魔术命令%matplotlib
一下方便绘图。
预处理
MNE-Python支持多种预处理方法和技术,如maxwell滤波、信号空间投影、独立分量分析、滤波、降采样等。在这里,我们将通过ICA分析来clean up我们的数据(简单版)。
ICA即独立成分分析。它的基本思想是将复杂的观测数据分解成多个独立的成分,每个成分都代表数据中的一个源或者生成过程。
ICA 的工作原理类似于解开信号混叠的拼图。假设我们有多个不同的信号源同时混合在一起,通过 ICA,我们可以将混合后的信号分解为多个相互独立的成分。这些成分在统计上是相互独立的,并且每个成分都包含了数据中某个特定的信号源的信息。因此,ICA 可以帮助我们从复杂的观测数据中提取出有用的信息,比如识别出不同脑区域的活动或者分离出不同的生理信号。
# set up and fit the ICA
# 这里就ICA了20个成分,这只是生成一个ICA算子
ica = mne.preprocessing.ICA(n_components=20, random_st