注释连续数据(Annotating continuous data)

本案例主要介绍如何向原始(Raw)对象添加注释,以及在数据处理的后期阶段如何使用注释。

Raw:原始对象
Annotations:注释

导入工具包

import os
from datetime import datetime
import mnesample_data_folder = mne.datasets.sample.data_path()
sample_data_raw_file = os.path.join(sample_data_folder, 'MEG', 'sample','sample_audvis_raw.fif')
raw = mne.io.read_raw_fif(sample_data_raw_file, verbose=False)
# 只截取60s的数据
raw.crop(tmax=60).load_data()

MNE-Python中的注释是一种存储关于原始对象的时间跨度的短字符串信息的方法。
注释是类似列表的对象,其中每个元素包含三部分信息:起始时间(以秒为单位)、持续时间(也以秒为单位)和描述(文本字符串)。
此外,annotation对象本身也跟踪orig_time,它是一个POSIX时间戳,表示相对于注释开始的真实时间。

通过代码创建注释

如果事先知道要注释的原始对象的跨度,可以通过编程来创建注释,甚至可以将列表或数组传递给Annotations的构造函数来同时注释多个跨度:

my_annot = mne.Annotations(onset=[3, 5, 7],duration=[1, 0.5, 0.25],description=['AAA', 'BBB', 'CCC'])
print(my_annot)
<Annotations | 3 segments : AAA (1), BBB (1), CCC (1), orig_time : None>

注意,orig_time是None,因为我们还没有指定它。在这些情况下,当您将注释添加到原始(Raw)对象时,假设orig_time与记录的第一个样本的时间相匹配,因此将设置orig_time以匹配记录的测量日期(Raw.info['meas_date'])。

raw.set_annotations(my_annot)
print(raw.annotations)# 构建事件戳
meas_date = raw.info['meas_date'][0] + raw.info['meas_date'][1] / 1e6
orig_time = raw.annotations.orig_time
print(meas_date == orig_time)
<Annotations | 3 segments : AAA (1), BBB (1), CCC (1), orig_time : 2002-12-03 19:01:10.720100>
True

由于示例数据来自Neuromag系统,该系统在记录开始之前就开始对样品编号进行计数,因此将my_annot添加到Raw对象还涉及另一个自动更改:偏移量等于第一个记录的样品的时间(raw.first_samp / raw.info [ 'sfreq'])已添加到每个注释的初始值中.

time_of_first_sample = raw.first_samp / raw.info['sfreq']
print(my_annot.onset + time_of_first_sample)
print(raw.annotations.onset)
[45.95597083 47.95597083 49.95597083]
[45.95597088 47.95597088 49.95597088]

如果知道注释的开始时间是相对于其他时间的,则可以在调用set_annotations()之前设置orig_time, 然后开始时间将根据指定的orig_time与raw.info ['meas_date']之间的时差进行调整。这里我们将使用ISO 8601格式的字符串,并将其设置为比raw.info ['meas_date']晚50秒。

time_format = '%Y-%m-%d %H:%M:%S.%f'
new_orig_time = datetime.utcfromtimestamp(meas_date + 50).strftime(time_format)
print(new_orig_time)later_annot = mne.Annotations(onset=[3, 5, 7],duration=[1, 0.5, 0.25],description=['DDD', 'EEE', 'FFF'],orig_time=new_orig_time)raw2 = raw.copy().set_annotations(later_annot)
print(later_annot.onset)
print(raw2.annotations.onset)
2002-12-03 19:02:00.720100
[3. 5. 7.]
[53. 55. 57.]

上述已将注释添加到原始对象中了,可以可视化的原始对象来进行查看:

可视化原始对象

fig = raw.plot(start=2, duration=6)

这三个注释显示为不同颜色的矩形,因为它们具有不同的描述值(沿绘图区域的顶部边缘打印)。在绘图窗口底部可以看到彩色跨度出现在绘图窗口底部的小滚动条中,这有助于快速查看注释在Raw对象中的位置。

交互式注释原始对象

也可以通过在绘图窗口中单击并拖动鼠标以交互方式将注释添加到Raw对象。要做到这一点,首先进入"注释模式",将调出注释窗口。注释控件窗口:

%matplotlib auto
fig.canvas.key_press_event('a')

对注释对象的操作

只要注释对象共享相同的orig_time,就可以通过简单地用+运算符添加来组合注释对象:

new_annot = mne.Annotations(onset=3.75, duration=0.75, description='AAA')
raw.set_annotations(my_annot + new_annot)
raw.plot(start=2, duration=6)

说明:即使共享相同的描述,也可以创建重叠的注释。这在交互注释时是不可能的;
单击并拖动创建与具有相同描述的现有注释重叠的新注释,将导致新旧注释合并。

不用于商业行为,转载请联系后台

若有侵权,请后台留言,管理员即时删侵!

更多阅读

他们想把广告植入你的梦境

EEG伪影详解和过滤工具的汇总(二)

EEG伪影类型详解和过滤工具的汇总(一)

MNE中数据结构Epoch及其创建方法

机器学习算法随机森林判断睡眠类型

上海独创柔性脑机接口何以上榜年度AI“奥斯卡”大奖

利用脑机接口从鸟的脑电波中重现鸟唱歌声

投稿通道

如何让你的工作让更多人知晓和受益?

脑机接口社区就是这样一个连接学界、

企业界和爱好者的平台渠道。

社区鼓励高校实验室、企业或个人在我们平台上分享优质内容。

稿件要求

稿件系个人原创作品,若已在其他平台发表,请明确标注。

稿件一经录取,便提供稿费!

投稿通道

微信扫码,备注:投稿+姓名+单位

微信交流群,请扫码上方微信

(备注:姓名+单位+专业/领域行业)

QQ交流群:913607986

你的每一次在看,我都很在意!

脑电分析系列[MNE-Python-12]| 注释连续数据相关推荐

  1. 脑电分析系列[MNE-Python-5]| Python机器学习算法随机森林判断睡眠类型

    案例介绍 本案例通过对多导睡眠图(Polysomnography,PSG)数据进行睡眠阶段的分类来判断睡眠类型. 训练:对Alice的睡眠数据进行训练: 测试:利用训练结果对Bob的睡眠数据进行测试, ...

  2. 脑电分析系列[MNE-Python-21]| Python协方差矩阵处理脑电数据

    今天主要介绍一下MNE中如何用协方差矩阵来处理脑电数据的. MNE中的许多方法,包括源估计和一些分类算法,都需要根据记录进行协方差估计. 在本教程中,我们将介绍传感器协方差计算的基础知识,并构建一个噪 ...

  3. 脑电分析系列[MNE-Python-6]| Python读取.set文件和.locs文件

    本案例主要介绍如何读取eeglab示例文件.set以及.locs文件. .set文件记录的是采集的信息,主要内容包括通道数,事件数,开始时间与结束时间等. .locs文件记录的是电极位置信息. 知识点 ...

  4. 脑电分析系列[MNE-Python-2]| MNE中数据结构Raw及其用法简介(更新)

    Raw对象主要用来存储连续型数据,核心数据为n_channels和times,也包含Info对象. 下面可以通过几个案例来说明Raw对象和相关用法. Raw结构查看: # 引入python库 impo ...

  5. 脑电分析系列 | MNE-Python汇总

    1 脑电分析系列MNE-Python教程 [MNE-1]| MNE-Python详细安装与使用(更新) [MNE-2]| MNE中数据结构Raw及其用法简介(更新) [MNE-3]| MNE中数据结构 ...

  6. 脑电分析工具MNE教程

    资料来源:脑电分析系列 | MNE-Python汇总 目录 1.安装与使用 2.数据结构Raw 3.Epoch 4.Evoked 5.案例 (1)导入工具库 (2)加载数据 (3)测试数据 (4)提取 ...

  7. 脑电分析系列[MNE-Python-19]| 可视化Evoked数据

    在前面我们介绍过Evoked的数据结构以及如何创建Evoked对象: 脑电分析系列[MNE-Python-4]| MNE中数据结构Evoked及其对象创建 Evoked potential(EP)诱发 ...

  8. 脑电分析系列[MNE-Python-11]| 信号空间投影SSP 应用

    信号空间投影(SSP) 在前面一篇分享(脑电分析系列[MNE-Python-10]| 信号空间投影SSP数学原理)中提到,投影矩阵将根据您试图投射出的噪声种类而变化.信号空间投影(SSP)是一种通过比 ...

  9. 脑电分析系列 | eeglab汇总

    1 脑电分析系列eeglab教程 eeglab教程系列(1)-安装教程 eeglab教程系列(2)-加载.显示数据 eeglab教程系列(3)-绘制脑电头皮图 eeglab教程系列(4)-绘制通道光谱 ...

  10. Python-EEG工具库MNE中文教程(12)-注释连续数据

    目录 注释连续数据(Annotating continuous data) 通过代码创建注释 可视化原始对象 交互式注释原始对象 对注释对象的操作 本分享为脑机学习者Rose整理发表于公众号:脑机接口 ...

最新文章

  1. 04:sqlalchemy操作数据库 不错
  2. jQuery学习---------认识事件处理
  3. 009-对象—— 构造方法__construct析构方法__destruct使用方法 PHP重写与重载
  4. Python Tornado
  5. 教学目标四个维度_挖掘教材 预设目标 思本归真—— 记临安区初二英语教学研讨会...
  6. 深入解析MySQL分区(Partition)功能
  7. Android官方开发文档Training系列课程中文版:键盘输入处理之控制输入法的显示方式
  8. python读取大文件csv_实现读取csv文件,文件里面是有限个百分数成绩(99.6、76.8等等...
  9. 【Dart学习】-- Dart之泛型
  10. 人机协同、数据驱动,云时代SOC的演进之路
  11. CentOS下部署Hadoop高性能集群
  12. python -----class(类)中的object是什么意思?
  13. 通过Wi-Fi将iPhone与Mac同步的教程
  14. 非参数统计的Python实现—— Kruskal-Wallis 单因素方差分析
  15. vm虚拟机怎么访问本地硬盘
  16. Scrum 敏捷开发 笔记
  17. 7个步骤建立可用的机器学习模型
  18. 关于Docker时的权限问题解决dial unix /var/run/docker.sock: connect: `permission denied`
  19. 浪漫的七夕表白简单代码(简单的小代码)
  20. SQL语句执行顺序及书写建议

热门文章

  1. 解决android模拟器不能访问网络的问题
  2. 问题解决:jmeter+java+beanshell : org.apache.jorphan.util.JMeterException: Error invoking bsh method: eva
  3. 异常检测——局部异常因子(Local Outlier Factor ,LOF)算法
  4. 如何匹配包含特定字符串的属性?
  5. 如何克隆到非空目录?
  6. 如何在yaml中表示一个空字段
  7. 免费超高速卡片式病人基本信息列表控件
  8. python c扩展
  9. GNU make manual 翻译(五十七)
  10. 01--swift之基本运算符