Skip to main content

Build visibility graphs from time series data.

Project description

pypi pyversions wheel license

Example plot of a visibility graph


The Python ts2vg package provides high-performance algorithm implementations to build visibility graphs from time series data.

The visibility graphs and some of their properties (e.g. degree distributions) are computed quickly and efficiently, even for time series with millions of observations thanks to the use of NumPy and a custom C backend (via Cython) developed for the visibility algorithms.

The visibility graphs are provided according to the mathematical definitions described in:

  • Lucas Lacasa et al., “From time series to complex networks: The visibility graph”, 2008.

  • Lucas Lacasa et al., “Horizontal visibility graphs: exact results for random time series”, 2009.

An efficient divide-and-conquer algorithm is used to compute the graphs, as described in:

  • Xin Lan et al., “Fast transformation from time series to visibility graphs”, 2015.

Installation

The latest released ts2vg version is available at the Python Package Index (PyPI) and can be easily installed by running:

pip install ts2vg

For other advanced uses, to build ts2vg from source Cython is required.

Basic usage

Visibility graph

Building the visibility graph for a time series is very simple:

from ts2vg import NaturalVG

ts = [1.0, 0.5, 0.3, 0.7, 1.0, 0.5, 0.3, 0.8]

g = NaturalVG()
g.build(ts)

edges = g.edges

The time series passed can be a list, a tuple, or a numpy 1D array.

Horizontal visibility graph

We can also obtain horizontal visibility in a very similar way:

from ts2vg import HorizontalVG

ts = [1.0, 0.5, 0.3, 0.7, 1.0, 0.5, 0.3, 0.8]

g = HorizontalVG()
g.build(ts)

edges = g.edges

Degree distribution

If we are only interested in the degree distribution of the visibility graph we can pass only_degrees=True to the build method. This will be more efficient in time and memory than computing the whole graph.

g = NaturalVG()
g.build(ts, only_degrees=True)

ks, ps = g.degree_distribution

Directed visibility graph

g = NaturalVG(directed='left_to_right')
g.build(ts)

Weighted visibility graph

g = NaturalVG(weighted='distance')
g.build(ts)

For more information and options see: Examples and API Reference.

Interoperability with other libraries

The graphs obtained can be easily converted to graph objects from other common Python graph libraries such as igraph, NetworkX and SNAP for further analysis.

The following methods are provided:

  • as_igraph()

  • as_networkx()

  • as_snap()

For example:

g = NaturalVG()
g.build(ts)

nx_g = g.as_networkx()

Command line interface

ts2vg can also be used as a command line program directly from the console:

ts2vg ./timeseries.txt -o out.edg

For more help and a list of options run:

ts2vg --help

Contributing

ts2vg can be found on GitHub. Pull requests and issue reports are welcome.

License

ts2vg is licensed under the terms of the MIT License.

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

ts2vg-1.0.0.tar.gz (370.2 kB view hashes)

Uploaded Source

Built Distributions

ts2vg-1.0.0-pp37-pypy37_pp73-win_amd64.whl (199.8 kB view hashes)

Uploaded PyPy Windows x86-64

ts2vg-1.0.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (222.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

ts2vg-1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (221.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686 manylinux: glibc 2.5+ i686

ts2vg-1.0.0-cp310-cp310-win_amd64.whl (225.9 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

ts2vg-1.0.0-cp310-cp310-win32.whl (185.6 kB view hashes)

Uploaded CPython 3.10 Windows x86

ts2vg-1.0.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

ts2vg-1.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (1.0 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ i686 manylinux: glibc 2.5+ i686

ts2vg-1.0.0-cp39-cp39-win_amd64.whl (225.8 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

ts2vg-1.0.0-cp39-cp39-win32.whl (185.6 kB view hashes)

Uploaded CPython 3.9 Windows x86

ts2vg-1.0.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

ts2vg-1.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (1.0 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686 manylinux: glibc 2.5+ i686

ts2vg-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl (227.0 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

ts2vg-1.0.0-cp38-cp38-win_amd64.whl (225.3 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

ts2vg-1.0.0-cp38-cp38-win32.whl (185.3 kB view hashes)

Uploaded CPython 3.8 Windows x86

ts2vg-1.0.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

ts2vg-1.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (1.1 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686 manylinux: glibc 2.5+ i686

ts2vg-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl (220.4 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

ts2vg-1.0.0-cp37-cp37m-win_amd64.whl (222.4 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

ts2vg-1.0.0-cp37-cp37m-win32.whl (182.2 kB view hashes)

Uploaded CPython 3.7m Windows x86

ts2vg-1.0.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.0 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

ts2vg-1.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (968.3 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686 manylinux: glibc 2.5+ i686

ts2vg-1.0.0-cp37-cp37m-macosx_10_9_x86_64.whl (222.1 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

ts2vg-1.0.0-cp36-cp36m-win_amd64.whl (221.8 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

ts2vg-1.0.0-cp36-cp36m-win32.whl (181.6 kB view hashes)

Uploaded CPython 3.6m Windows x86

ts2vg-1.0.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.0 MB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

ts2vg-1.0.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (967.6 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.12+ i686 manylinux: glibc 2.5+ i686

ts2vg-1.0.0-cp36-cp36m-macosx_10_9_x86_64.whl (220.8 kB view hashes)

Uploaded CPython 3.6m macOS 10.9+ x86-64

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