Basic IO Functions

Examples

API

Save and Load Utilities

embci.io.base.create_data_dict(data, label='default', sample_rate=500, suffix=None)[source]

Create a data_dict that can be saved by function save_trials().

Parameters
datandarray | array list | instance of mne.Raw[Array] | dict

1-3d array with a shape of [[num_trial x] num_channel x] window_size

labelstr

Action name, data label. Char - is not suggested in label.

sample_rateint

Sample rate of data, default set to 500Hz.

suffixstr

Currently supported formats are MATLAB-style ‘.mat’(default), MNE-style ‘.fif[.gz]’ and raw text ‘.csv’.

Returns
data_dictdict

{‘data’: dict, ‘label’: str, ‘sample_rate’: int, …}

embci.io.base.find_data_info(username)[source]

Count all saved data files under user’s directory that match a pattern: ${DIR_DATA}/${username}/${label}-${num}.${suffix}[.gz]

Returns
(label_dict, filename_dict, summary string)

Examples

>>> find_data_info('test')
({
    'left': [0, 1, 2, 5, 8, 9, 10],
    'right': [2, 3, 4, 5],
    'thumb_cross': [1, 2, 3, 4, 5]
}, {
    'left': ['/path/to/left-0.mat', '/path/to/left-1.fif', ...],
    'right': ['/path/to/right-2.h5', '/path/to/right-3', ...],
    'thumb_cross': [...]
}, 'There are 3 actions with 16 records.\n')
embci.io.base.save_trials(username, data_dict, suffix='mat', summary=False)[source]

Save trials of data into ${DIR_DATA}/${username}/${label}-${num}.${suffix}

Parameters
usernamestr
data_dictdict

created by function create_data_dict(data, label, format, sample_rate)

suffixstr

Currently supported formats are MATLAB-style ‘.mat’(default), MNE-style ‘.fif[.gz]’ and raw text ‘.csv’. Format setting in data_dict will overwrite this argument.

summarybool

Whether to print summary of currently saved data, default False.

Examples

>>> data = np.random.rand(8, 1000) # 8chs x 4sec x 250Hz data
>>> save_trials('test', create_data_dict(data, 'random_data', 250))
(8, 1000) data saved to ${DIR_DATA}/test/random_data-1.mat
>>> raw = mne.io.RawArray(data, mne.create_info(8, 250))
>>> save_trials('test', create_data_dict(raw, format='fif.gz'))
(8, 1000) data saved to ${DIR_DATA}/test/default-1.fif.gz
embci.io.base.save_chunks(fn, data_dict, suffix='mat', append=False)[source]

Save chunks of data into ${DIR_DATA}/${username}/${label}-${num}.${suffix}

Parameters
fnstr or file-like
data_dictdict

created by function create_data_dict(data, label, format, sample_rate)

suffixstr

Currently supported formats are MATLAB-style ‘.mat’(default), HDF5-style ‘.h5’ and raw text ‘.csv’. Format setting in data_dict will overwrite this argument.

summarybool

Whether to print summary of currently saved data, default False.

Examples

>>> data = np.random.rand(8, 1000) # 8chs x 4sec x 250Hz data
>>> save_trials('./test', create_data_dict(data, 'random_data', 250))
(8, 1000) data saved to ${DIR_DATA}/test/random_data-1.mat
>>> raw = mne.io.RawArray(data, mne.create_info(8, 250))
>>> save_trials('test', create_data_dict(raw, format='fif.gz'))
(8, 1000) data saved to ${DIR_DATA}/test/default-1.fif.gz
embci.io.base.save_action(username, reader, action_list=['relax', 'grab'])[source]

Guidance on command line interface to save data with label to ${DIR_DATA}/${username}/${action}-*.mat

Parameters
usernamestr
readerReader

Instance of embci.io.readers.BaseReader, repersenting a stream from which data will be read.

embci.io.base.load_data(username, pick=None, summary=True)[source]

Load all data files under directory ${DIR_DATA}/${username}

Parameters
usernamestr
pickstr | list or tuple of str | regex pattern | function

load data files whose label name: equal to | inside | match | return True by appling pick

summarybool

whether to print summary of currently saved data, default False.

Returns
outtuple

(data_array, label_list)

data_arrayndarray

3D array with a shape of n_samples x num_channel x window_size

label_listlist

String list with a length of n_samples. Each element indicate label(action name) of corresponding data sample.

Examples

>>> data, label = load_data('test')
>>> len(data), label
(5, ['default', 'default', 'default', 'right', 'left'])
>>> _, _ = load_data('test', pick=('left', 'right'), summary=True)
There are 3 actions with 5 data recorded.
  * default        3
    default-1.fif.gz
    default-2.fif.gz
    default-3.mat
  * right          1
    right-1.mat
  * left           1
    left-1.fif
There are 2 actions with 2 data loaded.
  + left           1
  + right          1
embci.io.base.load_mat(fn)[source]
embci.io.base.load_label_data(username, label='default')[source]

Load all data files that match ${DIR_DATA}/${username}/${label}-.

Returns
data_listlist
embci.io.base.validate_datafile(*a, **k)

Resolve saved datafiles and generate a valid filename for new data. ${DIR_DATA}/${username}/${label}-${num}.${suffix}[.gz]

Parameters
usernamestr
labelstr
checknamebool

Whether to ensure that the username is valid for filename. Default False.

Returns
(datafile name, username)

If checkname set to True, username is validated too.