stl-decomp-4j - Java implementation of Seasonal-Trend-Loess time-series decomposition algorithm.

  •        76

The Seasonal-Trend-Loess (STL) algorithm decomposes a time series into seasonal, trend and residual components. The algorithm uses Loess interpolation (original paper here) to smooth the cyclic sub-series (e.g. all January values in the CO2 data shown in the example below). After removing the seasonality from the signal, the remainder is smoothed (in multiple steps) to find the trend. This process is repeated and may include robustness iterations that take advantage of the weighted-least-squares underpinnings of Loess to remove the effects of outliers. The details are described in STL: A Seasonal-Trend Decomposition Procedure Based on Loess. stl-decomp-4j is a Java port of the original Ratfor/Fortran available from Netlib (original source here; also included as part of examples/StlPerfTest/fortran_benchmark), extended to support local quadratic interpolation. stl-decomp-4j expects equally spaced data with no missing values, similar to the original Fortran version (and the R and Python versions, which both use the original Fortran version under the hood).



Related Projects

seasonal - Robustly estimate trend and periodicity in a timeseries.

  •    Python

Robustly estimate trend and periodicity in a timeseries. Seasonal can recover sharp trend and period estimates from noisy timeseries data with only a few periods. It is intended for estimating season, trend, and level when initializing structural timeseries models like Holt-Winters [Hyndman], and its defaults are biased towards the kinds of training data that arise in that setting. Input samples are assumed evenly-spaced from a continuous real-valued signal with additive noise but no anomalies.

Gnocchi - Time series database

  •    Python

Gnocchi is an open-source |time series| database. The problem that Gnocchi solves is the storage and indexing of |time series| data and resources at a large scale. This is useful in modern cloud platforms which are not only huge but also are dynamic and potentially multi-tenant. Gnocchi takes all of that into account. Gnocchi has been designed to handle large amounts of aggregates being stored while being performant, scalable and fault-tolerant. While doing this, the goal was to be sure to not build any hard dependency on any complex storage system.

flint - A Time Series Library for Apache Spark

  •    Scala

The ability to analyze time series data at scale is critical for the success of finance and IoT applications based on Spark. Flint is Two Sigma's implementation of highly optimized time series operations in Spark. It performs truly parallel and rich analyses on time series data by taking advantage of the natural ordering in time series data to provide locality-based optimizations. Flint is an open source library for Spark based around the TimeSeriesRDD, a time series aware data structure, and a collection of time series utility and analysis functions that use TimeSeriesRDDs. Unlike DataFrame and Dataset, Flint's TimeSeriesRDDs can leverage the existing ordering properties of datasets at rest and the fact that almost all data manipulations and analysis over these datasets respect their temporal ordering properties. It differs from other time series efforts in Spark in its ability to efficiently compute across panel data or on large scale high frequency data.

K-Nearest-Neighbors-with-Dynamic-Time-Warping - Python implementation of KNN and DTW classification algorithm

  •    Jupyter

When it comes to building a classification algorithm, analysts have a broad range of open source options to choose from. However, for time series classification, there are less out-of-the box solutions. I began researching the domain of time series classification and was intrigued by a recommended technique called K Nearest Neighbors and Dynamic Time Warping. A meta analysis completed by Mitsa (2010) suggests that when it comes to timeseries classification, 1 Nearest Neighbor (K=1) and Dynamic Timewarping is very difficult to beat [1].

siridb-server - SiriDB is a highly-scalable, robust and super fast time series database

  •    C

SiriDB is a highly-scalable, robust and super fast time series database. For Ubuntu we have a deb package available which can be downloaded here.

Prophet - Tool for producing high quality forecasts for time series data that has multiple seasonality with linear or non-linear growth

  •    Python

Prophet is a procedure for forecasting time series data. It is based on an additive model where non-linear trends are fit with yearly and weekly seasonality, plus holidays. It works best with daily periodicity data with at least one year of historical data. Prophet is robust to missing data, shifts in the trend, and large outliers.Prophet is open source software released by Facebook's Core Data Science team. It is available for download on CRAN and PyPI.

Time-series Framework


Core framework used to manage, process and respond to dynamic changes in fast moving streaming time-series data in real-time.

spark-timeseries - A library for time series analysis on Apache Spark

  •    Scala

A library for analyzing large-scale time series data.

facette - Time series data visualization software

  •    Go

Facette is a open source web application to display time series data from various sources — such as collectd, Graphite, InfluxDB or KairosDB — on graphs. To learn more on its architecture, read this page. The source code is available at Github and is licensed under the terms of the BSD license.


  •    Java

PhaenUhr is an easy to use graphical Java application to visualize the impact of climate change on seasonal biological phenomena as two nested phenological clocks. You can configure the clocks in many ways and export them to standard graphic formats.

rearview - Timeseries data monitoring framework

  •    Ruby

Rearview is a real-time monitoring framework that sits on top of Graphite's time series data. This allows users to create monitors that both visualize and alert on data as it streams from Graphite. The monitors themselves are simple Ruby scripts which run in a sandbox to provide additional security. Monitors are also configured with a crontab compatible time specification used by the scheduler. Alerts can be sent via email, pagerduty, or campfire. This is a port of the original scala version re-written in Ruby on Rails. Rearview has been running in production for over a year at LivingSocial.



This is a complete time series analysis package written in C#. It provides a number of tools for data manipulation, and supports a range of different models, including ARMA and GARCH models. A plugin framework allows developers to create their own custom models and transforms.

dygraphs - Interactive visualizations of time series using JavaScript and the HTML canvas tag

  •    Javascript

Learn more about it at Get help with dygraphs by browsing the on Stack Overflow (preferred) and Google Groups.

tidyquant - Bringing financial analysis to the tidyverse

  •    R

tidyquant integrates the best resources for collecting and analyzing financial data, zoo, xts, quantmod, TTR, and PerformanceAnalytics, with the tidy data infrastructure of the tidyverse allowing for seamless interaction between each. You can now perform complete financial analyses in the tidyverse. Our short introduction to tidyquant on YouTube.

Argus - Time series monitoring and alerting platform.

  •    Java

A pom for all Argus projects. It provides standards for plugin versions, configuration and a number of other things.

node-influx - 📈 The InfluxDB Client for Node.js and Browsers

  •    TypeScript

For browsers, see the browser setup instructions. Version 3.x.x is compatible with InfluxDB 0.8.x - 3.x will no longer have updates by core contributers, please consider upgrading.

bearcart - Creating Rickshaw.js visualizations with Python Pandas

  •    Javascript

Rickshaw.js is a great JavaScript library built on D3 by the folks at Shutterstock for plotting timeseries. Pandas is a great Python library built by a number of outstanding folks in the open source community for creating timeseries. Bear, meet Cart. Pandas Series and DataFrames with DatetimeIndex goes in. Rickshaw.js comes out.

CausalImpact - An R package for causal inference in time series

  •    R

This R package implements an approach to estimating the causal effect of a designed intervention on a time series. For example, how many additional daily clicks were generated by an advertising campaign? Answering a question like this can be difficult when a randomized experiment is not available. The package aims to address this difficulty using a structural Bayesian time-series model to estimate how the response metric might have evolved after the intervention if the intervention had not occurred.As with all approaches to causal inference on non-experimental data, valid conclusions require strong assumptions. The CausalImpact package, in particular, assumes that the outcome time series can be explained in terms of a set of control time series that were themselves not affected by the intervention. Furthermore, the relation between treated series and control series is assumed to be stable during the post-intervention period. Understanding and checking these assumptions for any given application is critical for obtaining valid conclusions.

SiriDB - Highly-scalable, robust and super fast time series database

  •    C

SiriDB is a highly-scalable, robust and super fast time series database. Build from the ground up SiriDB uses a unique mechanism to operate without indexes and allows server resources to be added on the fly. SiriDB's unique query language includes dynamic grouping of time series for easy and super fast analysis over large amount's of time series.