victory的博客

长安一片月,万户捣衣声

0%

matplotlib | recorded EEG visualization

recorded EEG visualization

在做脑电(EEG)的相关研究时,通常我们需要使用公开的脑电数据集合,公开数据集包含了以及采集好的脑电数据。
我们可以使用python的第三方库matplotlib将数据集中的脑电数据进行可视化。

下面以绘制8个通道的脑电数据为例对脑电数据进行可视化:
注意:实例中使用公开数据集DEAP,详细信息可参考DEAP 官网

示例代码:

import os
import glob
import pickle
import matplotlib.pyplot as plt

# 参数设置
window_size = 1
sampling_rate = 500


# 获取数据文件列表并划分(训练文件/测试文件)
data_dir = "data_preprocessed_python/"
file_list = glob.glob(os.path.join(data_dir, "*"))  # 整个数据集包含32个subject的样本数据
print("len(file_list):", len(file_list))


def get_data_and_label(file_list):
    """
    获得固定窗口大小的数据和对应的标签

    Arrray name         Array shape         Array contents
    ---------------------------------------------------------------------------------------------
    data                40 x 40 x 8064      video/trial x channel x data
    labels              40 x 4              videl/trial x label(valence,arousal,dominance,liking)
    ---------------------------------------------------------------------------------------------
    """
    data = []
    valence_labels = []
    arousal_labels = []

    for file in file_list:
        x = pickle.load(open(file, 'rb'), encoding='latin1')  # type(x):dict {'labels':array(),'data':array()}

        labels = x['labels']
        valence_labels.extend(labels[:, 0])
        arousal_labels.extend(labels[:, 1])

        dat = x['data']
        data.extend(dat[:, :, :window_size * sampling_rate])

    return data

print("开始获取脑电波数据...")
data = get_data_and_label(file_list)
print("脑电波数据已获取,开始绘制脑电波...")
x = range(sampling_rate)
fig, ax = plt.subplots(3, 3)
ax[0][0].plot(x, list(data[0][0]))
ax[0][0].set_title('Fp1')
ax[0][1].plot(x, list(data[0][1]))
ax[0][1].set_title('AF3')
ax[0][2].plot(x, list(data[0][2]))
ax[0][2].set_title('F3')
ax[1][0].plot(x, list(data[0][3]))
ax[1][0].set_title('F7')
ax[1][1].plot(x, list(data[0][4]))
ax[1][1].set_title('FC5')
ax[1][2].plot(x, list(data[0][5]))
ax[1][2].set_title('FC1')
ax[2][0].plot(x, list(data[0][6]))
ax[2][0].set_title('C3')
ax[2][1].plot(x, list(data[0][7]))
ax[2][1].set_title('T7')
ax[2][2].plot(x, list(data[0][8]))
ax[2][2].set_title('CP5')
plt.show()
print("脑电波绘制完成!")

绘制的脑电波: