Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

OPyTN - Ordinal Pattern Transition Networks

Python toolkit for constructing and analyzing ordinal pattern transition networks from time series data. Implements Bandt-Pompe symbolic encoding to transform temporal sequences into directed networks where ordinal patterns serve as nodes and transitions as weighted edges.

Features

  • Ordinal Pattern Analysis: Extract ordinal patterns from time series using Bandt-Pompe methodology
  • Transition Network Construction: Build sparse adjacency matrices representing pattern transitions
  • Circulance Measure: Compute network-based complexity measures for dynamical system characterization
  • Automatic Parameter Selection: Smart embedding dimension and delay parameter estimation
  • Efficient Implementation: Optimized for large time series using sparse matrix representations

Installation

Prerequisites

pip install numpy scipy

Install OPyTN

git clone https://github.com/timocbro/OPyTN.git
cd OPyTN
pip install -e .

Quick Start

import numpy as np
from opytn import circulance_py, ordinal_patterns_t, OPTN_sparse

# Generate example time series (e.g., chaotic Lorenz system)
ts = np.random.randn(1000)  # Replace with your time series

# Compute circulance measure for complexity characterization
circulance, optimal_tau, embedding_dim = circulance_py(ts)

print(f"Circulance: {circulance}")
print(f"Optimal embedding delay: {optimal_tau}")
print(f"Embedding dimension: {embedding_dim}")

# Extract ordinal patterns
patterns = ordinal_patterns_t(ts, d=4, tau=2)

# Construct transition network
adjacency_matrix = OPTN_sparse(ts, embedding_dim=4, embedding_delay=2)

API Reference

Core Functions

circulance_py(TS, m=None, delays=None)

Computes the circulance measure for time series complexity analysis.

Parameters:

  • TS (array): Input time series (minimum 241 data points)
  • m (int, optional): Embedding dimension. If None, automatically determined
  • delays (int/list, optional): Embedding delays to test. If None, tests all feasible delays

Returns:

  • circulance (int): Minimum circulance value (1 indicates strict periodicity)
  • optimal_tau (int): Embedding delay that minimizes circulance
  • embedding_dim (int): Embedding dimension used

ordinal_patterns_t(ts, d, tau)

Extracts ordinal patterns from time series using time-delay embedding.

Parameters:

  • ts (array): Input time series
  • d (int): Embedding dimension
  • tau (int): Embedding delay

Returns:

  • patterns (list): List of ordinal pattern tuples

OPTN_sparse(TS, embedding_dim, embedding_delay)

Constructs sparse ordinal pattern transition network.

Parameters:

  • TS (array): Input time series
  • embedding_dim (int): Embedding dimension
  • embedding_delay (int): Embedding delay

Returns:

  • adjacency (scipy.sparse.csr_matrix): Sparse adjacency matrix

Utility Functions

give_d(N)

Automatically determines embedding dimension based on time series length.

find_maxtau(A)

Finds maximum feasible embedding delay (loses ≤10% of data points when transforming time series in ordinal pattern sequence).

Scientific Background

Ordinal Pattern Transition Networks (OPTNs) provide a powerful framework for analyzing complex dynamical systems by:

  1. Symbolic Encoding: Converting continuous time series into discrete ordinal patterns
  2. Network Representation: Mapping pattern transitions to directed network edges
  3. Complexity Quantification: Using network topology to characterize system dynamics

The circulance measure quantifies the intersection of in-degree and out-degree distributions, providing insights into:

  • Periodic systems (circulance ≈ 1)
  • Quasi-periodic systems (low circulance)
  • Chaotic systems (moderate circulance)
  • Stochastic systems (high circulance)

Applications

  • Time series classification and clustering
  • Dynamical system characterization
  • Change point detection
  • Complexity analysis of physiological signals
  • Financial time series analysis
  • Climate data analysis

Examples

Analyzing Different System Types

# Periodic signal
t = np.linspace(0, 10*np.pi, 1000)
periodic_ts = np.sin(t)
circ_periodic, _, _ = circulance_py(periodic_ts)

# Chaotic signal (Lorenz system)
# ... generate Lorenz time series
circ_chaotic, _, _ = circulance_py(lorenz_ts)

# Random signal
random_ts = np.random.randn(1000)
circ_random, _, _ = circulance_py(random_ts)

print(f"Periodic: {circ_periodic}, Chaotic: {circ_chaotic}, Random: {circ_random}")

Contributing

We welcome contributions! Please see our Contributing Guidelines for details.

Development Setup

git clone https://github.com/timocbro/OPyTN.git
cd OPyTN
pip install -e ".[dev]"

Citation

If you use OPyTN in your research, please cite:

@software{opytn2025,
  title={OPyTN: Ordinal Pattern Transition Networks in Python},
  author={Timo Bröhl, Max Potratzki},
  year={2025},
  url={https://github.com/timocbro/OPyTN}
}

References

  • Bandt, C., & Pompe, B. (2002). Permutation entropy: a natural complexity measure for time series. Physical Review Letters, 88(17), 174102.
  • Small, M. (2013). Complex networks from time series: Capturing dynamics. IEEE International Symposium on Circuits and Systems.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contact


Keywords: ordinal patterns, transition networks, time series analysis, complexity measures, dynamical systems, network analysis, Bandt-Pompe, symbolic dynamics

About

Python toolkit for constructing and analyzing ordinal pattern transition networks from time series data. Implements Bandt-Pompe symbolic encoding to transform temporal sequences into directed networks where ordinal patterns serve as nodes and transitions as weighted edges. Features relevant network metrics etc.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages