Skip to main content

Python package for analyzing sensor-collected human motion data (e.g. physical activity levels, gait dynamics)

Project description

Installation | Requirements | Usage | Contribution | Getting Help

Sensor Motion

PyPI - Python Version PyPI GitHub issues https://readthedocs.org/projects/sensormotion/badge/?version=latest https://badges.gitter.im/gitterHQ/gitter.png

Python package for analyzing sensor-collected human motion data (e.g. physical activity levels, gait dynamics).

Dedicated accelerometer devices, such as those made by Actigraph, usually bundle software for the analysis of the sensor data. In my work I often collect sensor data from smartphones and have not been able to find any comparable analysis software.

This Python package allows the user to extract human motion data, such as gait/walking dynamics, directly from accelerometer signals. Additionally, the package allows for the calculation of physical activity (PA) or moderate-to-vigorous physical activity (MVPA) counts, similar to activity count data offered by companies like Actigraph.

Installation

You can install this package using pip:

pip install sensormotion

Requirements

This package has the following dependencies, most of which are just Python packages:

  • Python 3.x

    • The easiest way to install Python is using the Anaconda distribution, as it also includes the other dependencies listed below

    • Python 2.x has not been tested, so backwards compatibility is not guaranteed

  • numpy

    • Included with Anaconda. Otherwise, install using pip (pip install numpy)

  • scipy

    • Included with Anaconda. Otherwise, install using pip (pip install scipy)

  • matplotlib

    • Included with Anaconda. Otherwise, install using pip (pip install matplotlib)

Usage

Here is brief example of extracting step-based metrics from raw vertical acceleration data:

Import the package:

import sensormotion as sm

If you have a vertical acceleration signal x, and its corresponding time signal t, we can begin by filtering the signal using a low-pass filter:

b, a = sm.signal.build_filter(frequency=10,
                              sample_rate=100,
                              filter_type='low',
                              filter_order=4)

x_filtered = sm.signal.filter_signal(b, a, signal=x)
images/filter.png

Next, we can detect the peaks (or valleys) in the filtered signal, which gives us the time and value of each detection. Optionally, we can include a plot of the signal and detected peaks/valleys:

peak_times, peak_values = sm.peak.find_peaks(time=t, signal=x_filtered,
                                             peak_type='valley',
                                             min_val=0.6, min_dist=30,
                                             plot=True)
images/peak_detection.png

From the detected peaks, we can then calculate step metrics like cadence and step time:

cadence = sm.gait.cadence(time=t, peak_times=peak_times, time_units='ms')
step_mean, step_sd, step_cov = sm.gait.step_time(peak_times=peak_times)

Physical activity counts and intensities can also be calculated from the acceleration data:

x_counts = sm.pa.convert_counts(x, time, integrate='simpson')
y_counts = sm.pa.convert_counts(y, time, integrate='simpson')
z_counts = sm.pa.convert_counts(z, time, integrate='simpson')
vm = sm.signal.vector_magnitude(x_counts, y_counts, z_counts)
categories, time_spent = sm.pa.cut_points(vm, set_name='butte_preschoolers', n_axis=3)
images/pa_counts.png

For a more in-depth tutorial, and more workflow examples, please take a look at the tutorial.

I would also recommend looking over the documentation to see other functionalities of the package.

Contribution

I work on this package in my spare time, on an “as needed” basis for my research projects. However, pull requests for bug fixes and new features are always welcome!

Please see the develop branch for the development version of the package, and check out the issues page for bug reports and feature requests.

Getting Help

You can find the full documentation for the package here

Python’s built-in help function will show documentation for any module or function: help(sm.gait.step_time)

You’re encouraged to post questions, bug reports, or feature requests as an issue

Alternatively, ask questions on Gitter

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sensormotion-1.1.5.tar.gz (19.1 kB view details)

Uploaded Source

Built Distribution

sensormotion-1.1.5-py3-none-any.whl (20.6 kB view details)

Uploaded Python 3

File details

Details for the file sensormotion-1.1.5.tar.gz.

File metadata

  • Download URL: sensormotion-1.1.5.tar.gz
  • Upload date:
  • Size: 19.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for sensormotion-1.1.5.tar.gz
Algorithm Hash digest
SHA256 411104318fe1721fb10046884d28cf8233611cc392272a0a646282ee3a650a5f
MD5 e289ffac5699aa9110c38cab1d202063
BLAKE2b-256 5ebe94bf7e6e6e8cd12611d4d52f63a22c3da21f517b7d1d9c971aae477ee2d8

See more details on using hashes here.

File details

Details for the file sensormotion-1.1.5-py3-none-any.whl.

File metadata

  • Download URL: sensormotion-1.1.5-py3-none-any.whl
  • Upload date:
  • Size: 20.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for sensormotion-1.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 c205c9226a20d692b1fa60a6bb1f91d08e4075d1227f2ed9f48acd984d4f314f
MD5 d21bfb7534c1092c25fdf3dfc8802358
BLAKE2b-256 841c63aa3876e952b4d6931880d332182b79eac1f22e215cae0ead5172647482

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page