Python-mne库使用教程
一.读取数据
mne库支持多种数据格式的读取,这里我来写一点我的样例。一个是从csv读取数据,一个是读取EDF(信息较为多)里的数据。
1.从csv读取数据
csv读取的话只有电压值很多信息是没有的。
#因为数据为22导,将取出的数据放入列表,因为mne的raw需要这个格式
for j in range(1,23):data = pd.read_csv(data_path, usecols=[str(j)])list1 = data.values.tolist()final_list = list(chain.from_iterable(list1))data1.append(final_list)#需要与电极名相匹配的名字,我这里使用的是与 standard_1020相匹配的名字
ch_names = ['Fz', 'FC3', 'FC1', 'FCz', 'FC2', 'FC4', 'C5', 'C3', 'C1', 'Cz', 'C2', 'C4', 'C6', 'CP3', 'CP1', 'CPz','CP2', 'CP4', 'P1', 'Pz', 'P2', 'POz']#电极类型源代码可找支持的数据(这个不填写也有默认值,因为我们是只读数据所以需要根据电极信息 自行设置)
ch_types = ['eeg', 'eeg', 'eeg', 'eeg', 'eeg', 'eeg', 'eeg', 'eeg', 'eeg', 'eeg', 'eeg', 'eeg', 'eeg', 'eeg', 'eeg','eeg', 'eeg', 'eeg', 'eeg', 'eeg', 'eeg', 'eeg']#采样频率
sfreq = 100 # Hz#组成info
info = mne.create_info(ch_names, sfreq, ch_types)#组成原始数据
raw = mne.io.RawArray(data1, info)#电极信息
montage = mne.channels.make_standard_montage("standard_1020")
raw.set_montage(montage)
2.从EDF读取数据
EDF里保存的信息较多
#直接读取EDF文件
raw = mne.io.read_raw_edf(r"C:\Users\Administrator\PycharmProjects\EEG\0000249.EDF")#需要一个电极名
ch_names=['Fp1' 'Fp2' 'F7' 'F3' 'Fz' 'F4' 'F8' 'T7' 'C3' 'Cz' 'C4' 'T8' 'P7' 'P3''Pz' 'P4' 'P8' 'O1' 'O2']#电极信息,有俩种用法一个是导入自己的电极图,一个是引用官方的图
locs_info_path = "Standard-10-20-Cap19.locs"
montage = mne.channels.read_custom_montage(locs_info_path)#这里根据读取的电极名字要和edf读取的电极名一致,否则需要修改(而且因为给的edf只有18导因此,生成的也就18导的电极了)
montage = mne.channels.read_custom_montage(locs_info_path)
new_chan_names = np.loadtxt(locs_info_path,dtype=str,usecols=3)
old_chan_names = raw.info["ch_names"]
chan_names_dict = {old_chan_names[i]:new_chan_names[i] for i in range(18)}#更新数据的电极名字(不是标准名无法运行)
raw.rename_channels(chan_names_dict)
#输入电极位置信息
raw.set_montage(montage)
这个可以用来修改你的电极类型
#用来修改电极类型(对于已经存在的类型我们需要这么修改)
chan_types_dict = {'P8':"eog",'O1':"eog"}
raw.set_channel_types(chan_types_dict)
当然mne库也可以使用更多的读取方式,这是在Python 脑电数据处理中文手册所写的其他读取方式。
# MNE-Python中对多种格式的脑电数据都进⾏了⽀持:
# *** 如数据后缀为.set (来⾃EEGLAB的数据)
# 使⽤mne.io.read_raw_eeglab()
# *** 如数据后缀为.vhdr (BrainVision系统)
# 使⽤mne.io.read_raw_brainvision()
# *** 如数据后缀为.edf
# 使⽤mne.io.read_raw_edf()
# *** 如数据后缀为.bdf (BioSemi放⼤器)
# 使⽤mne.io.read_raw_bdf()
# *** 如数据后缀为.gdf
# 使⽤mne.io.read_raw_gdf()
# *** 如数据后缀为.cnt (Neuroscan系统)
# 使⽤mne.io.read_raw_cnt()
# *** 如数据后缀为.egi或.mff
# 使⽤mne.io.read_raw_egi()
# *** 如数据后缀为.data
# 使⽤mne.io.read_raw_nicolet()
# *** 如数据后缀为.nxe (Nexstim eXimia系统)
# 使⽤mne.io.read_raw_eximia()
# *** 如数据后缀为.lay或.dat (Persyst系统)
# 使⽤mne.io.read_raw_persyst()
# *** 如数据后缀为.eeg (Nihon Kohden系统)
# 使⽤mne.io.read_raw_nihon()
二.可视化数据
这里我介绍几个常用的函数
1.查看信息
#观察数据信息
print(raw.info)
2.原始数据波形图
#生成的原始数据波形图
raw.plot(duration=5, n_channels=32, clipping=None)
plt.show()
3.原始数据功率谱图
#原始数据功率谱图(如果有多种类型的channel_type有个图)
raw.plot_psd(average=True)
plt.show()
4.电极位置图
#电极位置图
raw.plot_sensors(ch_type='eeg', show_names=True)
plt.show()
5.原始数据拓扑图
#原始数据拓扑图
raw.plot_psd_topo()
plt.show()
三.滤波
1.环境滤波
#陷波滤波
raw = raw.notch_filter(freqs=(60))Setting up band-stop filter from 59 - 61 Hz
FIR filter parameters
---------------------
Designing a one-pass, zero-phase, non-causal bandstop filter:
- Windowed time-domain design (firwin) method
- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation
- Lower passband edge: 59.35
- Lower transition bandwidth: 0.50 Hz (-6 dB cutoff frequency: 59.10 Hz)
- Upper passband edge: 60.65 Hz
- Upper transition bandwidth: 0.50 Hz (-6 dB cutoff frequency: 60.90 Hz)
- Filter length: 845 samples (6.602 sec)
2.高低通滤波
raw = raw.filter(l_freq=0.1, h_freq=30)Filtering raw data in 1 contiguous segment
Setting up band-pass filter from 0.1 - 30 Hz
FIR filter parameters
---------------------
Designing a one-pass, zero-phase, non-causal bandpass filter:
- Windowed time-domain design (firwin) method
- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation
- Lower passband edge: 0.10
- Lower transition bandwidth: 0.10 Hz (-6 dB cutoff frequency: 0.05 Hz)
- Upper passband edge: 30.00 Hz
- Upper transition bandwidth: 7.50 Hz (-6 dB cutoff frequency: 33.75 Hz)
- Filter length: 4225 samples (33.008 sec)
四.去伪迹
1.去坏段
fig = raw.plot(duration=5, n_channels=22, clipping=None)
fig.canvas.key_press_event('a')
plt.show()#若无法打开添加下列代码
#import matplotlib
#matplotlib.use('TkAgg')
2.去坏道
# 坏道标记
raw.info['bads'].append('FC5')
# 打印出当前的坏道
print(raw.info['bads'])
3.坏道值重建
raw = raw.interpolate_bads()Interpolating bad channelsAutomatic origin fit: head of radius 95.0 mm
Computing interpolation matrix from 29 sensor positions
Interpolating 1 sensors
进⾏信号重建后会默认把坏掉的'bads'标记去掉
4.独立成分分析(ICA)
#绘制ICA成分地形图
ica = mne.preprocessing.ICA(n_components=12, random_state=97, max_iter=800)
ica.fit(inst=raw)
ica.plot_components()
plt.show()
#ICA分析,这个是单独拿成分出来
ica = mne.preprocessing.ICA(n_components=12, random_state=97, max_iter=800)
ica.fit(inst=raw)
ica.plot_properties(raw,picks=[1,5])
五.结束语
mne库这只是开始和基础的用法,其中参考了mne官方文档和Python脑电数据处理中文手册,后面的操作较难暂时先不展示了如果看的人多我就继续更新。
Python-mne库使用教程相关推荐
- 基于JUPYTER的python主流库新手教程(上)
基于JUPYTER的python主流库新手教程(上) 作者:二马传奇 0. 基本测试 for i in range(5):print(i,end=",") 0,1,2,3,4, 1 ...
- [转载] python标准库系列教程(三)——operator库详细教程
参考链接: Python中的Inplace运算符| 2(ixor(),iand(),ipow()等) python进阶教程 机器学习 深度学习 长按二维码关注 进入正文 Python基础学习:oper ...
- Python itertools库详细教程
前言 库的学习地址:https://pymotw.com/2/itertools/ 库的官网地址:https://docs.python.org/2/library/itertools.html 在P ...
- python pyusb库使用教程【在window10系统上操作USB】(操作Intel Realsense D435)
发现位置:usb之python(pyusb) pypi:pyusb 1.0.2 Libraries.io教程 :pyusb Release 1.0.2 github教程:Programming wit ...
- python添加库详细教程_Python 中如何自动导入缺失的库?|python基础教程|python入门|python教程...
https://www.xin3721.com/eschool/pythonxin3721/ 在写 Python 项目的时候,我们可能经常会遇到导入模块失败的错误:ImportError: No mo ...
- python标准库使用教程_Python标准库概览
总结 这个部分讲了一些常用的python库的方法.一下子也记不住,不过基本都自己敲了代码试了试. os模块 os模块介绍了一些操作系统级别的方法 os.getcwd():得到当前工作目录 os.chd ...
- 【python第三方库安装教程】
python库的安装 最近在学python的时候遇到了一些安装第三方库的问题,下面来记录一下我的解决过程. 1.MyQR库安装 2.jieba库安装 3.wordcloud库安装 在正式说库之前先解决 ...
- python标准库模块教程_Python标准库之Sys模块使用详解
sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. 处理命令行参数 在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称. 使用sy ...
- python做数据处理软件_程序员用于机器学习编程的Python 数据处理库 pandas 入门教程...
入门介绍 pandas适合于许多不同类型的数据,包括: · 具有异构类型列的表格数据,例如SQL表格或Excel数据 · 有序和无序(不一定是固定频率)时间序列数据. · 具有行列标签的任意矩阵数据( ...
- python的pandas包使用教程_「Python」pandas入门教程
pandas适合于许多不同类型的数据,包括: 具有异构类型列的表格数据,例如SQL表格或Excel数据 有序和无序(不一定是固定频率)时间序列数据. 具有行列标签的任意矩阵数据(均匀类型或不同类型) ...
最新文章
- MyBatis框架学习 DAY_02:使用XML配置文件/多参数问题 / FOREACH /IF / #{}和${} / 创建SSM框架流程
- 全球及中国煤炭工业市场产量规模与十四五发展战略报告2022版
- 异常org.xml.sax.SAXParseException; lineNumber: 5; columnNumber: 11; 注释中不允许出现字符串 --。的原因...
- 关于AJAX访问数据库不能及时获得更新数据的问题
- OpenGL渲染纹理和平面反射
- 【终极办法】windows下安装完MySQL,为什么cmd不识别命令?
- 选择排序法对数组进行排序
- mysql查看现在使用的引擎_mysql查看当前库使用的引擎及简单操作
- JS类库——Image
- mysql优化方法_mysql优化方案总结
- windows扫雷的模拟实现(C语言)
- 如何提高团队的研发效率呢?
- css中调整高度充满_css实现div的高度填满剩余空间
- 逆水寒官方网站服务器,《逆水寒》2019年7月4日更新公告
- 微商相册一直显示服务器偷懒,微商励志图片
- 微星迫击炮B550M MORTAR WIFI 插三根内存不开机、黑屏、蓝屏、BIOS报错
- 笔记本电脑wlan+开启移动热点+手机转圈圈【已解决】
- android波浪动画简书,Android Path绘制贝塞尔曲线波浪动画
- 华为手机设置信息服务器地址,手机设置里服务云服务器地址
- WebDAV之葫芦儿·派盘+人升
热门文章
- ssh连接远程服务器报错:ssh_exchange_identification: read: Connection reset by peer
- 【GANs学习笔记】目录
- 引入echarts 报错xAxis “0“ not found
- openfeign远程调用接口报错:feign.codec.DecodeException: Error while extracting response for type
- Spring MVC学习
- 使用python爬取google翻译的语音
- 将硬盘转换成GPT分区格式
- 来自Java程序员的Python新手入门小结
- linux如何查看mac地址_查看mac地址 linux_linux查看mac地址
- cta 音频测试_CTA测试介绍.pdf