%global _empty_manifest_terminate_build 0 Name: python-tsfeatures Version: 0.4.0 Release: 1 Summary: Calculates various features from time series data. License: MIT License URL: https://github.com/Nixtla/tsfeatures Source0: https://mirrors.aliyun.com/pypi/web/packages/9a/c7/98f8aa7bf1e0078fb82a26ece9688c995bd7aeb5d46cdc6b7c294febe510/tsfeatures-0.4.0.tar.gz BuildArch: noarch Requires: python3-antropy Requires: python3-arch Requires: python3-pandas Requires: python3-scikit-learn Requires: python3-statsmodels Requires: python3-supersmoother %description [![Build](https://github.com/FedericoGarza/tsfeatures/workflows/Python%20package/badge.svg)](https://github.com/FedericoGarza/tsfeatures/tree/master) [![PyPI version fury.io](https://badge.fury.io/py/tsfeatures.svg)](https://pypi.python.org/pypi/tsfeatures/) [![Downloads](https://pepy.tech/badge/tsfeatures)](https://pepy.tech/project/tsfeatures) [![Python 3.6+](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/release/python-370+/) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://github.com/FedericoGarza/tsfeatures/blob/master/LICENSE) # tsfeatures Calculates various features from time series data. Python implementation of the R package _[tsfeatures](https://github.com/robjhyndman/tsfeatures)_. # Installation You can install the *released* version of `tsfeatures` from the [Python package index](pypi.org) with: ``` python pip install tsfeatures ``` # Usage The `tsfeatures` main function calculates by default the features used by Montero-Manso, Talagala, Hyndman and Athanasopoulos in [their implementation of the FFORMA model](https://htmlpreview.github.io/?https://github.com/robjhyndman/M4metalearning/blob/master/docs/M4_methodology.html#features). ```python from tsfeatures import tsfeatures ``` This function receives a panel pandas df with columns `unique_id`, `ds`, `y` and optionally the frequency of the data. ```python tsfeatures(panel, freq=7) ``` By default (`freq=None`) the function will try to infer the frequency of each time series (using `infer_freq` from `pandas` on the `ds` column) and assign a seasonal period according to the built-in dictionary `FREQS`: ```python FREQS = {'H': 24, 'D': 1, 'M': 12, 'Q': 4, 'W':1, 'Y': 1} ``` You can use your own dictionary using the `dict_freqs` argument: ```python tsfeatures(panel, dict_freqs={'D': 7, 'W': 52}) ``` ## List of available features | Features ||| |:--------|:------|:-------------| |acf_features|heterogeneity|series_length| |arch_stat|holt_parameters|sparsity| |count_entropy|hurst|stability| |crossing_points|hw_parameters|stl_features| |entropy|intervals|unitroot_kpss| |flat_spots|lumpiness|unitroot_pp| |frequency|nonlinearity|| |guerrero|pacf_features|| See the docs for a description of the features. To use a particular feature included in the package you need to import it: ```python from tsfeatures import acf_features tsfeatures(panel, freq=7, features=[acf_features]) ``` You can also define your own function and use it together with the included features: ```python def number_zeros(x, freq): number = (x == 0).sum() return {'number_zeros': number} tsfeatures(panel, freq=7, features=[acf_features, number_zeros]) ``` `tsfeatures` can handle functions that receives a numpy array `x` and a frequency `freq` (this parameter is needed even if you don't use it) and returns a dictionary with the feature name as a key and its value. ## R implementation You can use this package to call `tsfeatures` from R inside python (you need to have installed R, the packages `forecast` and `tsfeatures`; also the python package `rpy2`): ```python from tsfeatures.tsfeatures_r import tsfeatures_r tsfeatures_r(panel, freq=7, features=["acf_features"]) ``` Observe that this function receives a list of strings instead of a list of functions. ## Comparison with the R implementation (sum of absolute differences) ### Non-seasonal data (100 Daily M4 time series) | feature | diff | feature | diff | feature | diff | feature | diff | |:----------------|-------:|:----------------|-------:|:----------------|-------:|:----------------|-------:| | e_acf10 | 0 | e_acf1 | 0 | diff2_acf1 | 0 | alpha | 3.2 | | seasonal_period | 0 | spike | 0 | diff1_acf10 | 0 | arch_acf | 3.3 | | nperiods | 0 | curvature | 0 | x_acf1 | 0 | beta | 4.04 | | linearity | 0 | crossing_points | 0 | nonlinearity | 0 | garch_r2 | 4.74 | | hw_gamma | 0 | lumpiness | 0 | diff2x_pacf5 | 0 | hurst | 5.45 | | hw_beta | 0 | diff1x_pacf5 | 0 | unitroot_kpss | 0 | garch_acf | 5.53 | | hw_alpha | 0 | diff1_acf10 | 0 | x_pacf5 | 0 | entropy | 11.65 | | trend | 0 | arch_lm | 0 | x_acf10 | 0 | | flat_spots | 0 | diff1_acf1 | 0 | unitroot_pp | 0 | | series_length | 0 | stability | 0 | arch_r2 | 1.37 | To replicate this results use: ``` console python -m tsfeatures.compare_with_r --results_directory /some/path --dataset_name Daily --num_obs 100 ``` ### Sesonal data (100 Hourly M4 time series) | feature | diff | feature | diff | feature | diff | feature | diff | |:------------------|-------:|:-------------|-----:|:----------|--------:|:-----------|--------:| | series_length | 0 |seas_acf1 | 0 | trend | 2.28 | hurst | 26.02 | | flat_spots | 0 |x_acf1|0| arch_r2 | 2.29 | hw_beta | 32.39 | | nperiods | 0 |unitroot_kpss|0| alpha | 2.52 | trough | 35 | | crossing_points | 0 |nonlinearity|0| beta | 3.67 | peak | 69 | | seasonal_period | 0 |diff1_acf10|0| linearity | 3.97 | | lumpiness | 0 |x_acf10|0| curvature | 4.8 | | stability | 0 |seas_pacf|0| e_acf10 | 7.05 | | arch_lm | 0 |unitroot_pp|0| garch_r2 | 7.32 | | diff2_acf1 | 0 |spike|0| hw_gamma | 7.32 | | diff2_acf10 | 0 |seasonal_strength|0.79| hw_alpha | 7.47 | | diff1_acf1 | 0 |e_acf1|1.67| garch_acf | 7.53 | | diff2x_pacf5 | 0 |arch_acf|2.18| entropy | 9.45 | To replicate this results use: ``` console python -m tsfeatures.compare_with_r --results_directory /some/path \ --dataset_name Hourly --num_obs 100 ``` # Authors * **Federico Garza** - [FedericoGarza](https://github.com/FedericoGarza) * **Kin Gutierrez** - [kdgutier](https://github.com/kdgutier) * **Cristian Challu** - [cristianchallu](https://github.com/cristianchallu) * **Jose Moralez** - [jose-moralez](https://github.com/jose-moralez) * **Ricardo Olivares** - [rolivaresar](https://github.com/rolivaresar) * **Max Mergenthaler** - [mergenthaler](https://github.com/mergenthaler) %package -n python3-tsfeatures Summary: Calculates various features from time series data. Provides: python-tsfeatures BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-tsfeatures [![Build](https://github.com/FedericoGarza/tsfeatures/workflows/Python%20package/badge.svg)](https://github.com/FedericoGarza/tsfeatures/tree/master) [![PyPI version fury.io](https://badge.fury.io/py/tsfeatures.svg)](https://pypi.python.org/pypi/tsfeatures/) [![Downloads](https://pepy.tech/badge/tsfeatures)](https://pepy.tech/project/tsfeatures) [![Python 3.6+](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/release/python-370+/) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://github.com/FedericoGarza/tsfeatures/blob/master/LICENSE) # tsfeatures Calculates various features from time series data. Python implementation of the R package _[tsfeatures](https://github.com/robjhyndman/tsfeatures)_. # Installation You can install the *released* version of `tsfeatures` from the [Python package index](pypi.org) with: ``` python pip install tsfeatures ``` # Usage The `tsfeatures` main function calculates by default the features used by Montero-Manso, Talagala, Hyndman and Athanasopoulos in [their implementation of the FFORMA model](https://htmlpreview.github.io/?https://github.com/robjhyndman/M4metalearning/blob/master/docs/M4_methodology.html#features). ```python from tsfeatures import tsfeatures ``` This function receives a panel pandas df with columns `unique_id`, `ds`, `y` and optionally the frequency of the data. ```python tsfeatures(panel, freq=7) ``` By default (`freq=None`) the function will try to infer the frequency of each time series (using `infer_freq` from `pandas` on the `ds` column) and assign a seasonal period according to the built-in dictionary `FREQS`: ```python FREQS = {'H': 24, 'D': 1, 'M': 12, 'Q': 4, 'W':1, 'Y': 1} ``` You can use your own dictionary using the `dict_freqs` argument: ```python tsfeatures(panel, dict_freqs={'D': 7, 'W': 52}) ``` ## List of available features | Features ||| |:--------|:------|:-------------| |acf_features|heterogeneity|series_length| |arch_stat|holt_parameters|sparsity| |count_entropy|hurst|stability| |crossing_points|hw_parameters|stl_features| |entropy|intervals|unitroot_kpss| |flat_spots|lumpiness|unitroot_pp| |frequency|nonlinearity|| |guerrero|pacf_features|| See the docs for a description of the features. To use a particular feature included in the package you need to import it: ```python from tsfeatures import acf_features tsfeatures(panel, freq=7, features=[acf_features]) ``` You can also define your own function and use it together with the included features: ```python def number_zeros(x, freq): number = (x == 0).sum() return {'number_zeros': number} tsfeatures(panel, freq=7, features=[acf_features, number_zeros]) ``` `tsfeatures` can handle functions that receives a numpy array `x` and a frequency `freq` (this parameter is needed even if you don't use it) and returns a dictionary with the feature name as a key and its value. ## R implementation You can use this package to call `tsfeatures` from R inside python (you need to have installed R, the packages `forecast` and `tsfeatures`; also the python package `rpy2`): ```python from tsfeatures.tsfeatures_r import tsfeatures_r tsfeatures_r(panel, freq=7, features=["acf_features"]) ``` Observe that this function receives a list of strings instead of a list of functions. ## Comparison with the R implementation (sum of absolute differences) ### Non-seasonal data (100 Daily M4 time series) | feature | diff | feature | diff | feature | diff | feature | diff | |:----------------|-------:|:----------------|-------:|:----------------|-------:|:----------------|-------:| | e_acf10 | 0 | e_acf1 | 0 | diff2_acf1 | 0 | alpha | 3.2 | | seasonal_period | 0 | spike | 0 | diff1_acf10 | 0 | arch_acf | 3.3 | | nperiods | 0 | curvature | 0 | x_acf1 | 0 | beta | 4.04 | | linearity | 0 | crossing_points | 0 | nonlinearity | 0 | garch_r2 | 4.74 | | hw_gamma | 0 | lumpiness | 0 | diff2x_pacf5 | 0 | hurst | 5.45 | | hw_beta | 0 | diff1x_pacf5 | 0 | unitroot_kpss | 0 | garch_acf | 5.53 | | hw_alpha | 0 | diff1_acf10 | 0 | x_pacf5 | 0 | entropy | 11.65 | | trend | 0 | arch_lm | 0 | x_acf10 | 0 | | flat_spots | 0 | diff1_acf1 | 0 | unitroot_pp | 0 | | series_length | 0 | stability | 0 | arch_r2 | 1.37 | To replicate this results use: ``` console python -m tsfeatures.compare_with_r --results_directory /some/path --dataset_name Daily --num_obs 100 ``` ### Sesonal data (100 Hourly M4 time series) | feature | diff | feature | diff | feature | diff | feature | diff | |:------------------|-------:|:-------------|-----:|:----------|--------:|:-----------|--------:| | series_length | 0 |seas_acf1 | 0 | trend | 2.28 | hurst | 26.02 | | flat_spots | 0 |x_acf1|0| arch_r2 | 2.29 | hw_beta | 32.39 | | nperiods | 0 |unitroot_kpss|0| alpha | 2.52 | trough | 35 | | crossing_points | 0 |nonlinearity|0| beta | 3.67 | peak | 69 | | seasonal_period | 0 |diff1_acf10|0| linearity | 3.97 | | lumpiness | 0 |x_acf10|0| curvature | 4.8 | | stability | 0 |seas_pacf|0| e_acf10 | 7.05 | | arch_lm | 0 |unitroot_pp|0| garch_r2 | 7.32 | | diff2_acf1 | 0 |spike|0| hw_gamma | 7.32 | | diff2_acf10 | 0 |seasonal_strength|0.79| hw_alpha | 7.47 | | diff1_acf1 | 0 |e_acf1|1.67| garch_acf | 7.53 | | diff2x_pacf5 | 0 |arch_acf|2.18| entropy | 9.45 | To replicate this results use: ``` console python -m tsfeatures.compare_with_r --results_directory /some/path \ --dataset_name Hourly --num_obs 100 ``` # Authors * **Federico Garza** - [FedericoGarza](https://github.com/FedericoGarza) * **Kin Gutierrez** - [kdgutier](https://github.com/kdgutier) * **Cristian Challu** - [cristianchallu](https://github.com/cristianchallu) * **Jose Moralez** - [jose-moralez](https://github.com/jose-moralez) * **Ricardo Olivares** - [rolivaresar](https://github.com/rolivaresar) * **Max Mergenthaler** - [mergenthaler](https://github.com/mergenthaler) %package help Summary: Development documents and examples for tsfeatures Provides: python3-tsfeatures-doc %description help [![Build](https://github.com/FedericoGarza/tsfeatures/workflows/Python%20package/badge.svg)](https://github.com/FedericoGarza/tsfeatures/tree/master) [![PyPI version fury.io](https://badge.fury.io/py/tsfeatures.svg)](https://pypi.python.org/pypi/tsfeatures/) [![Downloads](https://pepy.tech/badge/tsfeatures)](https://pepy.tech/project/tsfeatures) [![Python 3.6+](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/release/python-370+/) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://github.com/FedericoGarza/tsfeatures/blob/master/LICENSE) # tsfeatures Calculates various features from time series data. Python implementation of the R package _[tsfeatures](https://github.com/robjhyndman/tsfeatures)_. # Installation You can install the *released* version of `tsfeatures` from the [Python package index](pypi.org) with: ``` python pip install tsfeatures ``` # Usage The `tsfeatures` main function calculates by default the features used by Montero-Manso, Talagala, Hyndman and Athanasopoulos in [their implementation of the FFORMA model](https://htmlpreview.github.io/?https://github.com/robjhyndman/M4metalearning/blob/master/docs/M4_methodology.html#features). ```python from tsfeatures import tsfeatures ``` This function receives a panel pandas df with columns `unique_id`, `ds`, `y` and optionally the frequency of the data. ```python tsfeatures(panel, freq=7) ``` By default (`freq=None`) the function will try to infer the frequency of each time series (using `infer_freq` from `pandas` on the `ds` column) and assign a seasonal period according to the built-in dictionary `FREQS`: ```python FREQS = {'H': 24, 'D': 1, 'M': 12, 'Q': 4, 'W':1, 'Y': 1} ``` You can use your own dictionary using the `dict_freqs` argument: ```python tsfeatures(panel, dict_freqs={'D': 7, 'W': 52}) ``` ## List of available features | Features ||| |:--------|:------|:-------------| |acf_features|heterogeneity|series_length| |arch_stat|holt_parameters|sparsity| |count_entropy|hurst|stability| |crossing_points|hw_parameters|stl_features| |entropy|intervals|unitroot_kpss| |flat_spots|lumpiness|unitroot_pp| |frequency|nonlinearity|| |guerrero|pacf_features|| See the docs for a description of the features. To use a particular feature included in the package you need to import it: ```python from tsfeatures import acf_features tsfeatures(panel, freq=7, features=[acf_features]) ``` You can also define your own function and use it together with the included features: ```python def number_zeros(x, freq): number = (x == 0).sum() return {'number_zeros': number} tsfeatures(panel, freq=7, features=[acf_features, number_zeros]) ``` `tsfeatures` can handle functions that receives a numpy array `x` and a frequency `freq` (this parameter is needed even if you don't use it) and returns a dictionary with the feature name as a key and its value. ## R implementation You can use this package to call `tsfeatures` from R inside python (you need to have installed R, the packages `forecast` and `tsfeatures`; also the python package `rpy2`): ```python from tsfeatures.tsfeatures_r import tsfeatures_r tsfeatures_r(panel, freq=7, features=["acf_features"]) ``` Observe that this function receives a list of strings instead of a list of functions. ## Comparison with the R implementation (sum of absolute differences) ### Non-seasonal data (100 Daily M4 time series) | feature | diff | feature | diff | feature | diff | feature | diff | |:----------------|-------:|:----------------|-------:|:----------------|-------:|:----------------|-------:| | e_acf10 | 0 | e_acf1 | 0 | diff2_acf1 | 0 | alpha | 3.2 | | seasonal_period | 0 | spike | 0 | diff1_acf10 | 0 | arch_acf | 3.3 | | nperiods | 0 | curvature | 0 | x_acf1 | 0 | beta | 4.04 | | linearity | 0 | crossing_points | 0 | nonlinearity | 0 | garch_r2 | 4.74 | | hw_gamma | 0 | lumpiness | 0 | diff2x_pacf5 | 0 | hurst | 5.45 | | hw_beta | 0 | diff1x_pacf5 | 0 | unitroot_kpss | 0 | garch_acf | 5.53 | | hw_alpha | 0 | diff1_acf10 | 0 | x_pacf5 | 0 | entropy | 11.65 | | trend | 0 | arch_lm | 0 | x_acf10 | 0 | | flat_spots | 0 | diff1_acf1 | 0 | unitroot_pp | 0 | | series_length | 0 | stability | 0 | arch_r2 | 1.37 | To replicate this results use: ``` console python -m tsfeatures.compare_with_r --results_directory /some/path --dataset_name Daily --num_obs 100 ``` ### Sesonal data (100 Hourly M4 time series) | feature | diff | feature | diff | feature | diff | feature | diff | |:------------------|-------:|:-------------|-----:|:----------|--------:|:-----------|--------:| | series_length | 0 |seas_acf1 | 0 | trend | 2.28 | hurst | 26.02 | | flat_spots | 0 |x_acf1|0| arch_r2 | 2.29 | hw_beta | 32.39 | | nperiods | 0 |unitroot_kpss|0| alpha | 2.52 | trough | 35 | | crossing_points | 0 |nonlinearity|0| beta | 3.67 | peak | 69 | | seasonal_period | 0 |diff1_acf10|0| linearity | 3.97 | | lumpiness | 0 |x_acf10|0| curvature | 4.8 | | stability | 0 |seas_pacf|0| e_acf10 | 7.05 | | arch_lm | 0 |unitroot_pp|0| garch_r2 | 7.32 | | diff2_acf1 | 0 |spike|0| hw_gamma | 7.32 | | diff2_acf10 | 0 |seasonal_strength|0.79| hw_alpha | 7.47 | | diff1_acf1 | 0 |e_acf1|1.67| garch_acf | 7.53 | | diff2x_pacf5 | 0 |arch_acf|2.18| entropy | 9.45 | To replicate this results use: ``` console python -m tsfeatures.compare_with_r --results_directory /some/path \ --dataset_name Hourly --num_obs 100 ``` # Authors * **Federico Garza** - [FedericoGarza](https://github.com/FedericoGarza) * **Kin Gutierrez** - [kdgutier](https://github.com/kdgutier) * **Cristian Challu** - [cristianchallu](https://github.com/cristianchallu) * **Jose Moralez** - [jose-moralez](https://github.com/jose-moralez) * **Ricardo Olivares** - [rolivaresar](https://github.com/rolivaresar) * **Max Mergenthaler** - [mergenthaler](https://github.com/mergenthaler) %prep %autosetup -n tsfeatures-0.4.0 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-tsfeatures -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Fri Jun 09 2023 Python_Bot - 0.4.0-1 - Package Spec generated