Go Time Series

Time series implementation in Go
Alternatives To Go Time Series
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Tsai3,49512 days ago41April 19, 202232apache-2.0Jupyter Notebook
Time series Timeseries Deep Learning Machine Learning Pytorch fastai | State-of-the-art Deep Learning library for Time Series and Sequences in Pytorch / fastai
Awesome Ts Anomaly Detection2,320
8 months ago1
List of tools & datasets for anomaly detection on time-series data.
Dxy Covid 19 Data2,238
2 days ago7mitPython
2019新型冠状病毒疫情时间序列数据仓库 | COVID-19/2019-nCoV Infection Time Series Data Warehouse
Deep Learning Time Series1,811
9 months ago8apache-2.0Jupyter Notebook
List of papers, code and experiments using deep learning for time series forecasting
Awesome_time_series_in_python1,811
4 months ago4
This curated list contains python packages for time series analysis
Kairosdb1,689
3 months ago124apache-2.0Java
Fast scalable time series database
Causalimpact1,484227 months ago8June 07, 202122apache-2.0R
An R package for causal inference in time series
Pyts1,432294 months ago18October 31, 202139bsd-3-clausePython
A Python package for time series classification
Filodb1,381
3 days ago36apache-2.0Scala
Distributed Prometheus time series database
Luminol1,09314120 days ago5December 11, 201732apache-2.0Python
Anomaly Detection and Correlation library
Alternatives To Go Time Series
Select To Compare


Alternative Project Comparisons
Readme

go-time-series

License GoDoc Build Status codecov

Time series implementation in Go.

It is used in go-trending as a backend for a trending algorithm. The time series supports storing counts at different granularities, e.g. seconds, minutes, hours, ....
In case of go-trending the time series is configured to have recent data available at small granularity, i.e. the recent 60 seconds, and historical data available at large granularity, i.e. the last few hours, days of data.

A redis backend is planned.

  • Simple interface
  • Store time series data at different granularities
  • Use your own clock implementation, e.g. for testing or similar

Examples

Creating a time series with default settings

The default settings use time.Now() as clock and time.Second * 60, time.Minute * 60 and time.Hour * 24 as granularities.

import "github.com/codesuki/go-time-series"

...

ts, err := timeseries.NewTimeSeries()
if err != nil {
    // handle error
}

Creating a customized time series

You can specify the clock and/or granularities to use. A clock must implement the timeseries.Clock interface.

import "github.com/codesuki/go-time-series"

...
type clock struct {}
func (c *clock) Now() {
    return time.Time{} // always returns the zero time
}
var myClock clock
...

ts, err := timeseries.NewTimeSeries(
    timeseries.WithGranularities(
        []timeseries.Granularity{
            {Granularity: time.Second, Count: 60},
            {Granularity: time.Minute, Count: 60},
            {Granularity: time.Hour, Count: 24},
            {Granularity: time.Hour * 24, Count: 7},
        }),
    timeseries.WithClock(&myClock),
)
if err != nil {
    // handle error
}

Filling the time series

To fill the time series with counts, e.g. events, you can use two different functions.

import "github.com/codesuki/go-time-series"

...

ts, err := timeseries.NewTimeSeries()
if err != nil {
    // handle error
}

ts.Increase(2) // adds 2 to the counter at the current time
ts.IncreaseAtTime(3, time.Now().Add(-2 * time.Minute)) // adds 3 to the counter 2 minutes ago

Querying the time series

The Range() function takes 2 arguments, i.e. the start and end of a time span. Recent() is a small helper function that just uses clock.Now() as end in Range. Please refer to the documentation for how Range() works exactly. There are some details depending on what range you query and what range is available.

import "github.com/codesuki/go-time-series"

...

ts, err := timeseries.NewTimeSeries()
if err != nil {
    // handle error
}

ts.Increase(2) // adds 2 to the counter at the current time
// 1s passes
ts.Increase(3)
// 1s passes

ts.Recent(5 * time.Second) // returns 5

ts.Range(time.Now().Add(-5 * time.Second), time.Now()) // returns 5

Documentation

GoDoc is located here

License

go-time-series is MIT licensed.

Popular Series Projects
Popular Time Projects
Popular Control Flow Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Golang
Time
Data Structure
Series
Clock
Time Series
In Memory