Learn R Programming

⚠️There's a newer version (2.9.0) of this package.Take me there.

timetk

Mission

To make it easy to visualize, wrangle, and feature engineer time series data for forecasting and machine learning prediction.

Installation

Download the development version with latest features:

remotes::install_github("business-science/timetk")

Or, download CRAN approved version:

install.packages("timetk")

Getting Started

Package Functionality

There are many R packages for working with Time Series data. Here’s how timetk compares to the “tidy” time series R packages for data visualization, wrangling, and feature engineeering (those that leverage data frames or tibbles).

Tasktimetktsibblefeaststibbletime
Structure
Data Structuretibble (tbl)tsibble (tbl_ts)tsibble (tbl_ts)tibbletime (tbl_time)
Visualization
Interactive Plots (plotly):x::x::x:
Static Plots (ggplot):x::x:
Time Series:x::x:
Correlation, Seasonality:x::x:
Anomaly Detection:x::x::x:
Data Wrangling
Time-Based Summarization:x::x:
Time-Based Filtering:x::x:
Padding Gaps:x::x:
Low to High Frequency:x::x::x:
Imputation:x::x:
Sliding / Rolling:x:
Feature Engineering (recipes)
Date Feature Engineering:x::x::x:
Holiday Feature Engineering:x::x::x:
Fourier Series:x::x::x:
Smoothing & Rolling:x::x::x:
Padding:x::x::x:
Imputation:x::x::x:
Cross Validation (rsample)
Time Series Cross Validation:x::x::x:
Time Series CV Plan Visualization:x::x::x:
More Awesomeness
Making Time Series (Intelligently):x:
Handling Holidays & Weekends:x::x::x:
Class Conversion:x::x:
Automatic Frequency & Trend:x::x::x:

What can you do in 1 line of code?

Investigate a time series…

taylor_30_min %>%
    plot_time_series(date, value, .color_var = week(date), 
                     .interactive = FALSE, .color_lab = "Week")

Visualize anomalies…

walmart_sales_weekly %>%
    group_by(Store, Dept) %>%
    plot_anomaly_diagnostics(Date, Weekly_Sales, 
                             .facet_ncol = 3, .interactive = FALSE)

Make a seasonality plot…

taylor_30_min %>%
    plot_seasonal_diagnostics(date, value, .interactive = FALSE)

Inspect autocorrelation, partial autocorrelation (and cross correlations too)…

taylor_30_min %>%
    plot_acf_diagnostics(date, value, .lags = "1 week", .interactive = FALSE)

Acknowledgements

The timetk package wouldn’t be possible without other amazing time series packages.

  • stats - Basically every timetk function that uses a period (frequency) argument owes it to ts().
    • plot_acf_diagnostics(): Leverages stats::acf(), stats::pacf() & stats::ccf()
    • plot_stl_diagnostics(): Leverages stats::stl()
  • lubridate: timetk makes heavy use of floor_date(), ceiling_date(), and duration() for “time-based phrases”.
    • Add and Subtract Time (%+time% & %-time%): "2012-01-01" %+time% "1 month 4 days" uses lubridate to intelligently offset the day
  • xts: Used to calculate periodicity and fast lag automation.
  • forecast (retired): Possibly my favorite R package of all time. It’s based on ts, and it’s predecessor is the tidyverts (fable, tsibble, feasts, and fabletools).
    • The ts_impute_vec() function for low-level vectorized imputation using STL + Linear Interpolation uses na.interp() under the hood.
    • The ts_clean_vec() function for low-level vectorized imputation using STL + Linear Interpolation uses tsclean() under the hood.
    • Box Cox transformation auto_lambda() uses BoxCox.Lambda().
  • tibbletime (retired): While timetk does not import tibbletime, it uses much of the innovative functionality to interpret time-based phrases:
    • tk_make_timeseries() - Extends seq.Date() and seq.POSIXt() using a simple phase like “2012-02” to populate the entire time series from start to finish in February 2012.
    • filter_by_time(), between_time() - Uses innovative endpoint detection from phrases like “2012”
    • slidify() is basically rollify() using slider (see below).
  • slider: A powerful R package that provides a purrr-syntax for complex rolling (sliding) calculations.
    • slidify() uses slider::pslide under the hood.
    • slidify_vec() uses slider::slide_vec() for simple vectorized rolls (slides).
  • padr: Used for padding time series from low frequency to high frequency and filling in gaps.
    • The pad_by_time() function is a wrapper for padr::pad().
    • See the step_ts_pad() to apply padding as a preprocessing recipe!
  • TSstudio: This is the best interactive time series visualization tool out there. It leverages the ts system, which is the same system the forecast R package uses. A ton of inspiration for visuals came from using TSstudio.

Learning More

My Talk on High-Performance Time Series Forecasting

Time series is changing. Businesses now need 10,000+ time series forecasts every day. This is what I call a High-Performance Time Series Forecasting System (HPTSF) - Accurate, Robust, and Scalable Forecasting.

High-Performance Forecasting Systems will save companies MILLIONS of dollars. Imagine what will happen to your career if you can provide your organization a “High-Performance Time Series Forecasting System” (HPTSF System).

I teach how to build a HPTFS System in my High-Performance Time Series Forecasting Course. If interested in learning Scalable High-Performance Forecasting Strategies then take my course. You will learn:

  • Time Series Machine Learning (cutting-edge) with Modeltime - 30+ Models (Prophet, ARIMA, XGBoost, Random Forest, & many more)
  • NEW - Deep Learning with GluonTS (Competition Winners)
  • Time Series Preprocessing, Noise Reduction, & Anomaly Detection
  • Feature engineering using lagged variables & external regressors
  • Hyperparameter Tuning
  • Time series cross-validation
  • Ensembling Multiple Machine Learning & Univariate Modeling Techniques (Competition Winner)
  • Scalable Forecasting - Forecast 1000+ time series in parallel
  • and more.

Unlock the High-Performance Time Series Forecasting Course

Copy Link

Version

Install

install.packages('timetk')

Monthly Downloads

17,090

Version

2.5.0

License

GPL (>= 3)

Issues

Pull Requests

Stars

Forks

Maintainer

Matt Dancho

Last Published

October 22nd, 2020

Functions in timetk (2.5.0)

future_frame

Make future time series from existing
fourier_vec

Fourier Series
filter_by_time

Filter (for Time-Series Data)
m4_monthly

Sample of 4 Monthly Time Series Datasets from the M4 Competition
plot_time_series

Interactive Plotting for One or More Time Series
m4_quarterly

Sample of 4 Quarterly Time Series Datasets from the M4 Competition
plot_time_series_cv_plan

Visualize a Time Series Resample Plan
summarise_by_time

Summarise (for Time Series Data)
taylor_30_min

Half-hourly electricity demand
m4_daily

Sample of 4 Daily Time Series Datasets from the M4 Competition
m4_hourly

Sample of 4 Hourly Time Series Datasets from the M4 Competition
plot_anomaly_diagnostics

Visualize Anomalies for One or More Time Series
plot_acf_diagnostics

Visualize the ACF, PACF, and CCFs for One or More Time Series
timetk

timetk: a toolkit for time series
tk_ts_.data.frame

Internal Functions Used in timetk
tk_make_timeseries

Intelligent date and date-time sequence creation
step_fourier

Fourier Features for Modeling Seasonality
tk_get_timeseries_variables

Get date or datetime variables (column names)
step_holiday_signature

Holiday Feature (Signature) Generator
tk_seasonal_diagnostics

Group-wise Seasonality Data Preparation
tk_zooreg

Coerce time series objects and tibbles with date/date-time columns to ts.
tk_index

Extract an index of date or datetime from time series objects, models, forecasts
tk_stl_diagnostics

Group-wise STL Decomposition (Season, Trend, Remainder)
tk_summary_diagnostics

Group-wise Time Series Summary
ts_clean_vec

Replace Outliers & Missing Values in a Time Series
ts_impute_vec

Missing Value Imputation for Time Series
walmart_sales_weekly

Sample Time Series Retail Data from the Walmart Recruiting Store Sales Forecasting Competition
log_interval_vec

Log-Interval Transformation for Constrained Interval Forecasting
m4_weekly

Sample of 4 Weekly Time Series Datasets from the M4 Competition
lag_vec

Lag Transformation
m4_yearly

Sample of 4 Yearly Time Series Datasets from the M4 Competition
box_cox_vec

Box Cox Transformation
pad_by_time

Insert time series rows with regularly spaced timestamps
diff_vec

Differencing Transformation
plot_time_series_regression

Visualize a Time Series Linear Regression Formula
step_timeseries_signature

Time Series Feature (Signature) Generator
tk_get_frequency

Automatic frequency and trend calculation from a time series index
step_ts_clean

Clean Outliers and Missing Data for Time Series
step_slidify_augment

Slidify Rolling Window Transformation (Augmented Version)
tk_acf_diagnostics

Group-wise ACF, PACF, and CCF Data Preparation
tk_anomaly_diagnostics

Automatic group-wise Anomaly Detection by STL Decomposition
required_pkgs.step_box_cox

S3 methods for tracking which additional packages are needed for steps.
step_smooth

Smoothing Transformation using Loess
step_ts_impute

Missing Data Imputation for Time Series
step_ts_pad

Pad: Add rows to fill gaps and go from low to high frequency
standardize_vec

Standardize to Mean 0, Standard Deviation 1 (Center & Scale)
smooth_vec

Smoothing Transformation using Loess
parse_date2

Fast, flexible date and datetime parsing
tk_get_holiday

Get holiday features from a time-series index
tk_augment_differences

Add many differenced columns to the data
tk_augment_fourier

Add many fourier series to the data
plot_stl_diagnostics

Visualize STL Decomposition Features for One or More Time Series
step_box_cox

Box-Cox Transformation using Forecast Methods
plot_seasonal_diagnostics

Visualize Multiple Seasonality Features for One or More Time Series
tk_make_future_timeseries

Make future time series from existing
tk_time_series_cv_plan

Time Series Resample Plan Data Preparation
tk_make_holiday_sequence

Make daily Holiday and Weekend date sequences
step_diff

Create a differenced predictor
tidyeval

Tidy eval helpers
time_arithmetic

Add / Subtract (For Time Series)
tk_augment_timeseries

Add many time series features to the data
tk_augment_slidify

Add many rolling window calculations to the data
tk_xts

Coerce time series objects and tibbles with date/date-time columns to xts.
tk_zoo

Coerce time series objects and tibbles with date/date-time columns to xts.
wikipedia_traffic_daily

Sample Daily Time Series Data from the Web Traffic Forecasting (Wikipedia) Competition
tk_ts

Coerce time series objects and tibbles with date/date-time columns to ts.
between_time

Between (For Time Series): Range detection for date or date-time sequences
mutate_by_time

Mutate (for Time Series Data)
bike_sharing_daily

Daily Bike Sharing Data
normalize_vec

Normalize to Range (0, 1)
slidify

Create a rolling (sliding) version of any function
step_log_interval

Log Interval Transformation for Constrained Interval Forecasting
time_series_cv

Time Series Cross Validation
step_slidify

Slidify Rolling Window Transformation
time_series_split

Simple Training/Test Set Splitting for Time Series
tk_augment_holiday

Add many holiday features to the data
tk_augment_lags

Add many lags to the data
slidify_vec

Rolling Window Transformation
tk_get_timeseries

Get date features from a time-series index
tk_get_timeseries_unit_frequency

Get the timeseries unit frequency for the primary time scales
tk_tbl

Coerce time-series objects to tibble.
set_tk_time_scale_template

Get and modify the Time Scale Template
is_date_class

Check if an object is a date class