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.3

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.3
File Size Uploaded
tsdr-0.3.tar.gz 21.8 kB Details

Built distribution (wheel)

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

Total release size: 48.6 kB

Release files / tsdr-0.3.tar.gz

Download URL tsdr-0.3.tar.gz
Size 21.8 kB
Tags Source
SHA-256 checksum
How to use checksums
8e42670d4ab3d9be60afc923806b75b141a6745d788c13cc77bae8067bc36b17
BLAKE2b-256 checksum
How to use checksums
da865ebcc4167c23e91b5e39fa3303c797f95afe4efcdd8a954715def41e2d27
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.3-py3-none-any.whl

Download URL tsdr-0.3-py3-none-any.whl
Size 26.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cd09f4d01858e0ff254d536c17792471ba09fb3e0b548524f619a1172ce12529
BLAKE2b-256 checksum
How to use checksums
c3ba16b6f6005020c92157a2c8ee53e5becb0fb4900a7b2c298aba75145b9699
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

This release

0.3 This release

2 release files

0.2

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