Skip to main content

tsdr: Time-Series Dimension Reduction

About

Time-series dimension reduction (TSDR) methods are a class of algorithms for the dimension reduction of multivariate data that exploit temporal structure. In contrast to general dimension reduction (GDR) methods, the outputs of which are invariant to temporal permutation, TSDR methods are sensitive to temporal structure.

The figure above visually summarises the categories of TSDR methods that we defined in Owens & Fulcher (2025). The first five categories (a-e) consist of methods that extract time-series components based on different aspects of temporal structure, i.e., slowness, autocorrelation, predictability, determinism, and non-stationarity. The final two categories (f-g) consist of methods that share a common methodology, i.e., diffusion-based and latent variable methods.

The tsdr package provides python implementations of TSDR methods from each of these seven categories. The methods are written in a simple, readable style to enable time-series analysts to better understand a subset of the TSDR methods discussed in the Owens & Fulcher (2025) review paper.

Acknowledgement :

If you use this software, please read and cite this open-access article:

Installation

Using pip for tsdr:

pip install tsdr

Usage

from tsdr.slowness import SFA

import numpy as np
import scipy
import matplotlib.pyplot as plt

# create a dataset for analysis
# a sinusoid
z = np.sin(np.linspace(0, 4*np.pi, 1000))
# multichannel noise
D = 10
noise = np.random.normal(scale=1.0, size=((len(z), D-1)))
# linear mixing
A = scipy.stats.ortho_group.rvs(D, random_state=1)
X = np.concatenate([z.reshape(-1,1), noise], axis=1) @ A

# extract a slow component using SFA
slow_component = SFA(n_components=1).fit_transform(X)

# visualise the component
fig, axs = plt.subplots(6, 1, figsize=(8, 8))
axs[0].plot(slow_component, lw=1.0)
axs[0].set_ylabel('SFA1')
for i in range(D):
    axs[i].spines[['right', 'top', 'bottom']].set_visible(False)
    axs[i].set_xticks([])
    axs[i+1].plot(X[:, i], c='black', linewidth=0.5)
    axs[i+1].set_ylabel(f'X{i+1}')
axs[D].spines[['right', 'top']].set_visible(False)
axs[D].set_xlabel('Time')
plt.tight_layout()

Metadata

Release files for tsdr 0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tsdr 0.2
File Size Uploaded
tsdr-0.2.tar.gz 21.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tsdr 0.2
File Interpreter ABI Platform
tsdr-0.2-py3-none-any.whl Python 3 none any Details

Total release size: 48.6 kB

Release files / tsdr-0.2.tar.gz

Download URL tsdr-0.2.tar.gz
Size 21.8 kB
Tags Source
SHA-256 checksum
How to use checksums
e870fca640ddadc1fedc7570380d6f320036b7a6ae6cb07e15a25b108f7de61d
BLAKE2b-256 checksum
How to use checksums
19efaf090cdff740c7c4b26fa6da719723930026d79c4e21d5405005a0d91922
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Release files / tsdr-0.2-py3-none-any.whl

Download URL tsdr-0.2-py3-none-any.whl
Size 26.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0e785bb510902aed12d9d9fb07e9a44141e45143edf4a0b030c87eb81ac89381
BLAKE2b-256 checksum
How to use checksums
2645c044d0f4329c2b8cb59f4a1330a4ad41a4c54d1d841fe36391bf10f6d788
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Release history Release notifications | RSS feed

0.5

2 release files

0.4

2 release files

0.3

2 release files

This release

0.2 This release

2 release files

0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page