knitr::opts_chunk$set( message = FALSE, warning = FALSE, fig.width = 8, fig.height = 4.5, fig.align = 'center', out.width='95%', dpi = 100, collapse = TRUE, comment = "#>" )
timetk: A toolkit for time series analysis in the tidyverse
This tutorial focuses on,
plot_time_series(), a workhorse time-series plotting function that:
plotlyplots (great for exploring & shiny apps)
library(tidyverse) library(lubridate) library(timetk) # Setup for the plotly charts (# FALSE returns ggplots) interactive <- FALSE
Let's start with a popular time series,
taylor_30_min, which includes energy demand in megawatts at a sampling interval of 30-minutes. This is a single time series.
plot_time_series() function generates an interactive
plotly chart by default.
.date_var) and the numeric variable (
.value) that changes over time as the first 2 arguments
.interactive = TRUE, the
.plotly_slider = TRUEadds a date slider to the bottom of the chart.
taylor_30_min %>% plot_time_series(date, value, .interactive = interactive, .plotly_slider = TRUE)
Next, let's move on to a dataset with time series groups,
m4_daily, which is a sample of 4 time series from the M4 competition that are sampled at a daily frequency.
m4_daily %>% group_by(id)
Visualizing grouped data is as simple as grouping the data set with
group_by() prior to piping into the
plot_time_series() function. Key points:
group_by()or by using the
...to add groups.
.facet_ncol = 2returns a 2-column faceted plot
.facet_scales = "free"allows the x and y-axis of each plot to scale independently of the other plots
m4_daily %>% group_by(id) %>% plot_time_series(date, value, .facet_ncol = 2, .facet_scales = "free", .interactive = interactive)
Let's switch to an hourly dataset with multiple groups. We can showcase:
.color_varto highlight sub-groups.
m4_hourly %>% group_by(id)
The intent is to showcase the groups in faceted plots, but to highlight weekly windows (sub-groups) within the data while simultaneously doing a
log() transformation to the value. This is simple to do:
.value = log(value)Applies the Log Transformation
.color_var = week(date)The date column is transformed to a
lubridate::week()number. The color is applied to each of the week numbers.
m4_hourly %>% group_by(id) %>% plot_time_series(date, log(value), # Apply a Log Transformation .color_var = week(date), # Color applied to Week transformation # Facet formatting .facet_ncol = 2, .facet_scales = "free", .interactive = interactive)
All of the visualizations can be converted from interactive
plotly (great for exploring and shiny apps) to static
ggplot2 visualizations (great for reports).
taylor_30_min %>% plot_time_series(date, value, .color_var = month(date, label = TRUE), # Returns static ggplot .interactive = FALSE, # Customization .title = "Taylor's MegaWatt Data", .x_lab = "Date (30-min intervals)", .y_lab = "Energy Demand (MW)", .color_lab = "Month") + scale_y_continuous(labels = scales::comma_format())
My Talk on High-Performance Time Series Forecasting
Time series is changing. Businesses now need 10,000+ time series forecasts every day.
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:
Modeltime- 30+ Models (Prophet, ARIMA, XGBoost, Random Forest, & many more)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.