Skip to content
A Python package for physyological's signals processing
Python Jupyter Notebook
Branch: master
Clone or download


GitHub release Codacy Badge PyPI PyPI pyversions PyPI status Documentation Status DOI


PySiology is a Python package used to analyze Physiological signals. With pysiology you can easily analyze:

  • Electromyographic signals
  • Electrocardiographic signals
  • Electrodermal activity signals


PySiology can be installed using pip:

pip install pysiology

or downloading / cloning the repository and, from the root folder of the project, running:

python install


You can check the full documentation here:


Sample data are not downloaded when using Pip. Please download the samples manually from the repository ( and load them using

import pickle

with open("path/to/sample/data.pkl",'rb') as f:
          data = pickle.load(f)


import matplotlib.pyplot as plt #used for visualization purposes in this tutorial.

import pysiology

ECG = pysiology.sampledata.loadsampleECG() #load the sample ECG Signal
EMG = pysiology.sampledata.loadsampleEMG() #load the sample EMG Signal
GSR = pysiology.sampledata.loadsampleEDA() #load the sample GSR Signal

sr = 1000 #samplerate in Hz

#We can define the event in the way we prefer. 
#In this example I will use a 2 x nEvent matrix, containing the name of the event and the onset time.
events = [["A",10],
eventLenght = 8 #lenght in seconds we want to use to compute feature estimation
results = {} #we will store the results in a dict for simplicity.
for event in events:
    startSample = sr * event[1] #samplerate of the signal multiplied by the onset of the event in s
    endSample = startSample + (sr * eventLenght) #Final sample to use for estimation
    results[event[0]] = {} #initialize the results
    results[event[0]]["ECG"] = pysiology.electrocardiography.analyzeECG(ECG[startSample:endSample],sr) #analyze the ECG signal
    results[event[0]]["EMG"] = pysiology.electromyography.analyzeEMG(EMG[startSample:endSample],sr) #analyze the EMG signal
    results[event[0]]["GSR"] = pysiology.electrodermalactivity.analyzeGSR(GSR[startSample:endSample],sr) #analyze the GSR signal


If you use PySiology, please cite:

Gabrieli G., Azhari A., Esposito G. (2020) PySiology: A Python Package for Physiological Feature Extraction. In: Esposito A., Faundez-Zanuy M., Morabito F., Pasero E. (eds) Neural Approaches to Dynamics of Signal Exchanges. Smart Innovation, Systems and Technologies, vol 151. Springer, Singapore


  • Numpy
  • Scipy
  • Peakutils
  • Matplotlib


Feel free to contact me for questions, suggestions or to give me advice as well at:


Buy Me a Coffee at

You can’t perform that action at this time.