一.读取数据
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)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/14521.html