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:
- oscillatory: fft, stft or bandpass filtered band power
- temporal waveform shape
- fooof
- mne_connectivity estimates
- Hjorth parameter
- non-linear dynamical estimates
- various burst features
- line length
- and more...
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://py-neuromodulation.readthedocs.io for example usage and parametrization.
py_neuromodulation requires at least python 3.10. For installation you can use pip:
pip install py-neuromodulation
We recommend however installing the package in a new new conda environment:
git clone https://github.com/neuromodulation/py_neuromodulation.git conda create -n pynm-test python=3.10 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
import py_neuromodulation as nm
import numpy as np
NUM_CHANNELS = 5
NUM_DATA = 10000
sfreq = 1000 # Hz
feature_freq = 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.
For any question or suggestion please find my contact information at my GitHub profile.
[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). |