Retrieve

You have to download manually the EEG data from https://physionet.org/pn4/eegmmidb/.

Parse

Go through all subjects from the dataset, read the EDF files and store them into NumPy arrays.

Notes

  • You have to download the dataset yourself, and modify the edf_dir variable.

  • In some subjects, we drop the last 170 samples, to make sure equal number of samples across subjects.


In [1]:
import numpy as np
import pyedflib
import os

In [2]:
eyes_open = np.zeros((109, 64, 9600))
eyes_closed = np.zeros((109, 64, 9600))

Define the directory where dataset is located


In [3]:
edf_dir = '/opt/Temp/physionet.nlm.nih.gov/pn4/eegmmidb/'

Process the baseline file for "eyes open"


In [4]:
for sub_id in range(0, 109):
    subj_prefix = "S{0:03}".format(sub_id + 1)
    subj_dir = "{0}/{1}".format(edf_dir, subj_prefix)
    baseline_eyes_open = "{0}/{1}R01".format(subj_dir, subj_prefix)
    
    f = pyedflib.EdfReader(baseline_eyes_open + ".edf")
    a = f.read_annotation()
    n = f.signals_in_file
    signal_labels = f.getSignalLabels()

    for chan in np.arange(n):
        eyes_open[sub_id, chan, :] = f.readSignal(chan)[0:9600]

Process the baseline file for "eyes closed"


In [5]:
for sub_id in range(0, 109):
    subj_prefix = "S{0:03}".format(sub_id + 1)
    subj_dir = "{0}/{1}".format(edf_dir, subj_prefix)
    baseline_eyes_closed = "{0}/{1}R02".format(subj_dir, subj_prefix)
    
    f = pyedflib.EdfReader(baseline_eyes_closed + ".edf")
    a = f.read_annotation() #baseline_eyes_open + ".edf.event")
    n = f.signals_in_file
    signal_labels = f.getSignalLabels()

    for chan in np.arange(n):
        eyes_closed[sub_id, chan, :] = f.readSignal(chan)[0:9600]

Store files


In [6]:
if not os.path.exists("data/"):
    os.makedirs("data/")

np.save('data/eyes_opened.npy', eyes_open)
np.save('data/eyes_closed.npy', eyes_closed)