Skip to main content

A Python package for data analysis with permutation entropy and ordinal network methods

Project description

PyPI GitHub PyPI - Downloads Documentation Status

ordpy: A Python Package for Data Analysis with Permutation Entropy and Ordinal Network Methods

ordpy is a pure Python module [1] that implements data analysis methods based on Bandt and Pompe’s [2] symbolic encoding scheme.

If you have used ordpy in a scientific publication, we would appreciate citations to the following reference [1]:

@article{pessa2021ordpy,
 title         = {ordpy: A Python package for data analysis with permutation entropy and ordinal network methods},
 author        = {Arthur A. B. Pessa and Haroldo V. Ribeiro},
 journal       = {Chaos: An Interdisciplinary Journal of Nonlinear Science},
 volume        = {31},
 number        = {6},
 pages         = {063110},
 year          = {2021},
 doi           = {10.1063/5.0049901},
}

ordpy implements the following data analysis methods:

Released on version 1.0 (February 2021):

  • Permutation entropy for time series [2] and images [3];

  • Complexity-entropy plane for time series [4], [5] and images [3];

  • Multiscale complexity-entropy plane for time series [6] and images [7];

  • Tsallis [8] and Rényi [9] generalized complexity-entropy curves for time series and images;

  • Ordinal networks for time series [10], [11] and images [12];

  • Global node entropy of ordinal networks for time series [13], [11] and images [12].

  • Missing ordinal patterns [14] and missing transitions between ordinal patterns [11] for time series and images.

Released on version 1.1.0 (January 2023):

  • Weighted permutation entropy for time series [15] and images;

  • Fisher-Shannon plane for time series [16] and images;

  • Permutation Jensen-Shannon distance for time series [17] and images;

  • Four pattern permutation contrasts (up-down balance, persistence, rotational-asymmetry, and up-down scaling.) for time series [18];

  • Smoothness-structure plane for images [19].

For more detailed information about the methods implemented in ordpy, please consult its documentation.

Installing

Ordpy can be installed via the command line using

pip install ordpy

or you can directly clone its git repository:

git clone https://github.com/arthurpessa/ordpy.git
cd ordpy
pip install -e .

Basic usage

We provide a notebook illustrating how to use ordpy. This notebook reproduces all figures of our article [1]. The code below shows simple applications of ordpy.

#Complexity-entropy plane for logistic map and Gaussian noise.

import numpy as np
import ordpy
from matplotlib import pylab as plt

def logistic(a=4, n=100000, x0=0.4):
    x = np.zeros(n)
    x[0] = x0
    for i in range(n-1):
        x[i+1] = a*x[i]*(1-x[i])
    return(x)

time_series = [logistic(a) for a in [3.05, 3.55, 4]]
time_series += [np.random.normal(size=100000)]

HC = [ordpy.complexity_entropy(series, dx=4) for series in time_series]


f, ax = plt.subplots(figsize=(8.19, 6.3))

for HC_, label_ in zip(HC, ['Period-2 (a=3.05)',
                            'Period-8 (a=3.55)',
                            'Chaotic (a=4)',
                            'Gaussian noise']):
    ax.scatter(*HC_, label=label_, s=100)

ax.set_xlabel('Permutation entropy, $H$')
ax.set_ylabel('Statistical complexity, $C$')

ax.legend()
https://raw.githubusercontent.com/arthurpessa/ordpy/master/examples/figs/sample_fig.png
#Ordinal networks for logistic map and Gaussian noise.

import numpy as np
import igraph
import ordpy
from matplotlib import pylab as plt
from IPython.core.display import display, SVG

def logistic(a=4, n=100000, x0=0.4):
    x = np.zeros(n)
    x[0] = x0
    for i in range(n-1):
        x[i+1] = a*x[i]*(1-x[i])
    return(x)

time_series = [logistic(a=4), np.random.normal(size=100000)]

vertex_list, edge_list, edge_weight_list = list(), list(), list()
for series in time_series:
    v_, e_, w_   = ordpy.ordinal_network(series, dx=4)
    vertex_list += [v_]
    edge_list   += [e_]
    edge_weight_list += [w_]

def create_ig_graph(vertex_list, edge_list, edge_weight):

    G = igraph.Graph(directed=True)

    for v_ in vertex_list:
        G.add_vertex(v_)

    for [in_, out_], weight_ in zip(edge_list, edge_weight):
        G.add_edge(in_, out_, weight=weight_)

    return G

graphs = []

for v_, e_, w_ in zip(vertex_list, edge_list, edge_weight_list):
    graphs += [create_ig_graph(v_, e_, w_)]

def igplot(g):
    f = igraph.plot(g,
                    layout=g.layout_circle(),
                    bbox=(500,500),
                    margin=(40, 40, 40, 40),
                    vertex_label = [s.replace('|','') for s in g.vs['name']],
                    vertex_label_color='#202020',
                    vertex_color='#969696',
                    vertex_size=20,
                    vertex_font_size=6,
                    edge_width=(1 + 8*np.asarray(g.es['weight'])).tolist(),
                   )
    return f

for graph_, label_ in zip(graphs, ['Chaotic (a=4)',
                                   'Gaussian noise']):
    print(label_)
    display(SVG(igplot(graph_)._repr_svg_()))
https://raw.githubusercontent.com/arthurpessa/ordpy/master/examples/figs/sample_net.png

Contributing

Pull requests addressing errors or adding new functionalities are always welcome.

References

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

ordpy-1.1.5.tar.gz (25.5 kB view details)

Uploaded Source

Built Distribution

ordpy-1.1.5-py3-none-any.whl (24.7 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for ordpy-1.1.5.tar.gz
Algorithm Hash digest
SHA256 a3b85e98739282d44b7e4edd9a4dedc262d4c3eff81789aa1aeb1e0505f9ea99
MD5 6239e803f7ca0296184eeacd12009f6b
BLAKE2b-256 5936af2b3bdde26ede0bdfc2feccde2d63b9835fcd7639446500e5fc1d029b17

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for ordpy-1.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 3b2188be35ff75cb0a108ac8cd231e9c247da0410b752d0b12565ef2e7b88abd
MD5 3140183415449c3ce37a7151ca90a7de
BLAKE2b-256 dfd0737d49fb0762d4693a689b4ffd64affc953645e58007ca41e84e3dfd8420

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