raphaelvallat / yasa

YASA (Yet Another Spindle Algorithm): a Python package to analyze polysomnographic sleep recordings.
https://raphaelvallat.com/yasa/
BSD 3-Clause "New" or "Revised" License
428 stars 115 forks source link
artefact-rejection deep-sleep eeg-analysis eeg-signals numba peak-detection signal-processing sleep sleep-analysis sleep-scoring sleep-spindles sleep-stage-scoring sleep-staging spectral-analysis stft

.. -- mode: rst --

|

.. image:: https://badge.fury.io/py/yasa.svg :target: https://badge.fury.io/py/yasa

.. image:: https://img.shields.io/github/license/raphaelvallat/yasa.svg :target: https://github.com/raphaelvallat/yasa/blob/master/LICENSE

.. image:: https://codecov.io/gh/raphaelvallat/yasa/branch/master/graph/badge.svg :target: https://codecov.io/gh/raphaelvallat/yasa

.. image:: https://pepy.tech/badge/yasa :target: https://pepy.tech/badge/yasa


.. figure:: /docs/pictures/yasa_logo.png :align: center

YASA (Yet Another Spindle Algorithm) is a command-line sleep analysis toolbox in Python. The main functions of YASA are:

For more details, try the quickstart <https://raphaelvallat.com/yasa/build/html/quickstart.html> or read the FAQ <https://raphaelvallat.com/yasa/build/html/faq.html>.


Installation


To install YASA, simply open a terminal or Anaconda command prompt and enter:

.. code-block:: shell

  pip install --upgrade yasa

Alternatively, YASA can be installed with conda:

.. code-block:: shell

  conda config --add channels conda-forge
  conda config --set channel_priority strict
  conda install yasa

**What are the prerequisites for using YASA?**

To use YASA, all you need is:

- Some basic knowledge of Python, especially the `NumPy <https://docs.scipy.org/doc/numpy/user/quickstart.html>`_, `Pandas <https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html>`_ and `MNE <https://martinos.org/mne/stable/index.html>`_ packages.
- A Python editor: YASA works best with `Jupyter Lab <https://jupyterlab.readthedocs.io/en/stable/index.html>`_, a web-based interactive user interface.
- Some sleep EEG data and optionally a sleep staging file (hypnogram).

**I have sleep data in European Data Format (.edf), how do I load the data in Python?**

If you have sleep EEG data in standard formats (e.g. EDF or BrainVision), you can use the `MNE package <https://mne.tools/stable/index.html>`_ to load and preprocess your data in Python. A simple preprocessing pipeline using MNE is shown below:

.. code-block:: python

  import mne
  # Load the EDF file
  raw = mne.io.read_raw_edf('MYEDFFILE.edf', preload=True)
  # Downsample the data to 100 Hz
  raw.resample(100)
  # Apply a bandpass filter from 0.1 to 40 Hz
  raw.filter(0.1, 40)
  # Select a subset of EEG channels
  raw.pick(['C4-A1', 'C3-A2'])

How do I get started with YASA?

If you want to dive right in, you can simply go to the main documentation <https://raphaelvallat.com/yasa/build/html/quickstart.html> and try to apply YASA's functions on your own EEG data. However, for most users, we strongly recommend that you first try running the examples Jupyter notebooks to get a sense of how YASA works and what it can do! The notebooks also come with example datasets so they should work right out of the box as long as you've installed YASA first. The notebooks and datasets can be found on GitHub <https://github.com/raphaelvallat/yasa/tree/master/notebooks> (make sure that you download the whole notebooks/ folder). A short description of all notebooks is provided below:

Automatic sleep staging

Event detection

Spectral analysis

Gallery


Below some plots demonstrating the functionalities of YASA. To reproduce these, check out the `tutorial (Jupyter notebooks) <https://github.com/raphaelvallat/yasa/tree/master/notebooks>`_.

.. figure::  /docs/pictures/gallery.png
  :align:   center

  *The top plot show an overlay of the detected spindles on real EEG data. The middle left panel shows a time-frequency representation of the whole-night recording (spectrogram), plotted with the hypnogram (sleep stages) on top. The middle right panel shows the sleep stage probability transition matrix, calculated across the entire night. The bottom row shows, from left to right: a topographic plot, the average template of all detected slow-waves across the entire night stratified by channels, and a phase-amplitude coupling comodulogram.*

Development

YASA was created and is maintained by Raphael Vallat <https://raphaelvallat.com>, a former postdoctoral researcher in Matthew Walker's lab <https://www.humansleepscience.com/> at UC Berkeley. Contributions are more than welcome so feel free to contact me, open an issue or submit a pull request!

To see the code or report a bug, please visit the GitHub repository <https://github.com/raphaelvallat/yasa>_.

Note that this program is provided with NO WARRANTY OF ANY KIND.

Citation



To cite YASA, please use the `eLife publication <https://elifesciences.org/articles/70092>`_:

* Vallat, Raphael, and Matthew P. Walker. "An open-source, high-performance tool for automated sleep staging." Elife 10 (2021). doi: https://doi.org/10.7554/eLife.70092