当前位置:   article > 正文

脑电分析系列[MNE-Python-14]| Epoch对象中的元数据(metadata)

mne python epoch

本案例演示使用Epochs元数据。关于Epochs数据结构:可以查看文章

脑电分析系列[MNE-Python-2]| MNE中数据结构Epoch及其创建方法

有时候使用mne的metadata属性来存储相关数据特别有用,metadata使用pandas.DataFrame来封装数据。其中每一行对应一个epoch,每一列对应一个epoch的元数据属性。列必须包含字符串、整数或浮点数。

在该数据集中,受试者在屏幕上看到单个单词,并记录每个单词对应的脑电图活动。我们知道每个epoch显示哪个单词,以及关于这个单词的额外信息(例如,单词频率)。

  1. #导入工具
  2. import mne
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. #加载数据
  6. path = mne.datasets.kiloword.data_path() + '/kword_metadata-epo.fif'
  7. epochs = mne.read_epochs(path)

从上面打印的信息可以知道该数据集中有960个样本数据。

epochs.metadata[:10]

  1. # 元数据以panda.DataFrame的形式存储数据
  2. # 获取前10条记录
  3. print(epochs.metadata.head(10))

我们可以使用该元数据属性来选择epoch的子集。这使用了Pandas中的pandas.DataFrame.query()方法。任何有效的查询字符串都将起作用。下面,我们将绘制两个图进行比较:

  1. av1 = epochs['Concreteness < 5 and WordFrequency < 2'].average()
  2. av2 = epochs['Concreteness > 5 and WordFrequency > 2'].average()
  3. joint_kwargs = dict(ts_args=dict(time_unit='s'),
  4. topomap_args=dict(time_unit='s'))
  5. av1.plot_joint(show=False, **joint_kwargs)
  6. av2.plot_joint(show=False, **joint_kwargs)
  7. plt.show()

  1. words = ['film', 'cent', 'shot', 'cold', 'main']
  2. epochs['WORD in {}'.format(words)].plot_image(show=False)
  3. plt.show()

  1. """
  2. 注意,传统的epoch子选择仍然有效。
  3. 传统的选择epoch的MNE方法将取代丰富的元数据查询。
  4. """
  5. epochs['cent'].average().plot(show=False, time_unit='s')
  6. plt.show()

下面将展示一个更复杂的示例,该示例利用每个epoch的元数据。我们将在元数据对象中创建一个新列,并使用它生成许多试验子集的平均值。

  1. metadata = epochs.metadata
  2. is_concrete = metadata["Concreteness"] > metadata["Concreteness"].median()
  3. metadata["is_concrete"] = np.where(is_concrete, 'Concrete', 'Abstract')
  4. is_long = metadata["NumberOfLetters"] > 5
  5. metadata["is_long"] = np.where(is_long, 'Long', 'Short')
  6. epochs.metadata = metadata
  1. """
  2. 现在我们可以快速提取(并绘制)数据的子集。例如,看按单词长度和具体程度划分的单词:
  3. """
  4. query = "is_long == '{0}' & is_concrete == '{1}'"
  5. evokeds = dict()
  6. for concreteness in ("Concrete", "Abstract"):
  7. for length in ("Long", "Short"):
  8. subset = epochs[query.format(length, concreteness)]
  9. evokeds["/".join((concreteness, length))] = list(subset.iter_evoked())
  10. # 为了进行实际的可视化,下面存储了许多共享参数。
  11. style_plot = dict(
  12. colors={"Long": "Crimson", "Short": "Cornflowerblue"},
  13. linestyles={"Concrete": "-", "Abstract": ":"},
  14. split_legend=True,
  15. ci=.68,
  16. show_sensors='lower right',
  17. legend='lower left',
  18. truncate_yaxis="auto",
  19. picks=epochs.ch_names.index("Pz"),
  20. )
  21. fig, ax = plt.subplots(figsize=(6, 4))
  22. #绘制诱发响应
  23. mne.viz.plot_compare_evokeds(evokeds, axes=ax, **style_plot)
  24. plt.show()

下面比较不同字母长度(字母个数)单词所得到的诱发响应。比较长度为4、5、6、7或8个字母的单词:

  1. letters = epochs.metadata["NumberOfLetters"].unique().astype(int).astype(str)
  2. evokeds = dict()
  3. for n_letters in letters:
  4. evokeds[n_letters] = epochs["NumberOfLetters == " + n_letters].average()
  5. style_plot["colors"] = {n_letters: int(n_letters)
  6. for n_letters in letters}
  7. style_plot["cmap"] = ("# of Letters", "viridis_r")
  8. del style_plot['linestyles']
  9. fig, ax = plt.subplots(figsize=(6, 4))
  10. mne.viz.plot_compare_evokeds(evokeds, axes=ax, **style_plot)
  11. plt.show()

最后,对于字母的具体性与连续长度之间的相互作用:

  1. evokeds = dict()
  2. query = "is_concrete == '{0}' & NumberOfLetters == {1}"
  3. for concreteness in ("Concrete", "Abstract"):
  4. for n_letters in letters:
  5. subset = epochs[query.format(concreteness, n_letters)]
  6. evokeds["/".join((concreteness, n_letters))] = subset.average()
  7. style_plot["linestyles"] = {"Concrete": "-", "Abstract": ":"}
  8. fig, ax = plt.subplots(figsize=(6, 4))
  9. mne.viz.plot_compare_evokeds(evokeds, axes=ax, **style_plot)
  10. plt.show()

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

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

更多阅读

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

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

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

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

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

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

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

投稿通道

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

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

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

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

稿件要求

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

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

投稿通道

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

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

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

QQ交流群:913607986

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/261725
推荐阅读
相关标签
  

闽ICP备14008679号