Skip to content

neuromodulation/py_neuromodulation

Repository files navigation

py_neuromodulation

Analyzing neural data can be a troublesome, trial and error prone, and beginner unfriendly process. py_neuromodulation allows using a simple interface for extraction of established neurophysiological features and includes commonly applied pre -and postprocessing methods.

Only time series data with a corresponding sampling frequency are required for feature extraction.

The output will be a pandas.DataFrame including different time-resolved computed features. Internally a stream get's initialized, which resembles an online data-stream that can in theory also be be used with a hardware acquisition system.

The following features are currently included:

Find here the preprint of py_neuromodulation called "Invasive neurophysiology and whole brain connectomics for neural decoding in patients with brain implants" [1].

The original intention for writing this toolbox was movement decoding from invasive brain signals [2]. The application however could be any neural decoding problem. py_neuromodulation offers wrappers around common practice machine learning methods for efficient analysis.

Find the documentation here http:https://py-neuromodulation.readthedocs.io for example usage and parametrization.

Installation

py_neuromodulation requires at least python 3.10. For installation you can use pip:

pip install py-neuromodulation

Alternatively you can also install the package in a conda environment:

conda create -n pynm-test python=3.11
conda activate pynm-test

Then install the packages listed in the pyproject.toml:

pip install .

Optionally the ipython kernel can be specified for the installed pynm-test conda environment:

ipython kernel install --user --name=pynm-test

Then py_neuromodulation can be imported via:

import py_neuromodulation as nm

Basic Usage

import py_neuromodulation as nm
import numpy as np

NUM_CHANNELS = 5
NUM_DATA = 10000
sfreq = 1000  # Hz
sampling_rate_features_hz = 3  # Hz

data = np.random.random([NUM_CHANNELS, NUM_DATA])

stream = nm.Stream(sfreq=sfreq, data=data, sampling_rate_features_hz=sampling_rate_features_hz)
features = stream.run()

Check the Usage and First examples for further introduction.

Contact information

For any question or suggestion please find my contact information at my GitHub profile.

References

[1]Merk, T. et al. Invasive neurophysiology and whole brain connectomics for neural decoding in patients with brain implants, https://doi.org/10.21203/rs.3.rs-3212709/v1 (2023).
[2]Merk, T. et al. Electrocorticography is superior to subthalamic local field potentials for movement decoding in Parkinson’s disease. Elife 11, e75126, https://doi.org/10.7554/eLife.75126 (2022).