The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

Visualizing Time Series

Matt Dancho

This tutorial focuses on, plot_time_series(), a workhorse time-series plotting function that:

Libraries

Run the following code to setup for this tutorial.

library(dplyr)
library(ggplot2)
library(lubridate)
library(timetk)

# Setup for the plotly charts (# FALSE returns ggplots)
interactive <- FALSE

Plotting Time Series

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.

taylor_30_min
#> # A tibble: 4,032 × 2
#>    date                value
#>    <dttm>              <dbl>
#>  1 2000-06-05 00:00:00 22262
#>  2 2000-06-05 00:30:00 21756
#>  3 2000-06-05 01:00:00 22247
#>  4 2000-06-05 01:30:00 22759
#>  5 2000-06-05 02:00:00 22549
#>  6 2000-06-05 02:30:00 22313
#>  7 2000-06-05 03:00:00 22128
#>  8 2000-06-05 03:30:00 21860
#>  9 2000-06-05 04:00:00 21751
#> 10 2000-06-05 04:30:00 21336
#> # ℹ 4,022 more rows

The plot_time_series() function generates an interactive plotly chart by default.

taylor_30_min %>% 
  plot_time_series(date, value, 
                   .interactive = interactive,
                   .plotly_slider = TRUE)

Plotting Groups

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)
#> # A tibble: 9,743 × 3
#> # Groups:   id [4]
#>    id    date       value
#>    <fct> <date>     <dbl>
#>  1 D10   2014-07-03 2076.
#>  2 D10   2014-07-04 2073.
#>  3 D10   2014-07-05 2049.
#>  4 D10   2014-07-06 2049.
#>  5 D10   2014-07-07 2006.
#>  6 D10   2014-07-08 2018.
#>  7 D10   2014-07-09 2019.
#>  8 D10   2014-07-10 2007.
#>  9 D10   2014-07-11 2010 
#> 10 D10   2014-07-12 2002.
#> # ℹ 9,733 more rows

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:

m4_daily %>%
  group_by(id) %>%
  plot_time_series(date, value, 
                   .facet_ncol = 2, .facet_scales = "free",
                   .interactive = interactive)

Visualizing Transformations & Sub-Groups

Let’s switch to an hourly dataset with multiple groups. We can showcase:

  1. Log transformation to the .value
  2. Use of .color_var to highlight sub-groups.
m4_hourly %>% group_by(id)
#> # A tibble: 3,060 × 3
#> # Groups:   id [4]
#>    id    date                value
#>    <fct> <dttm>              <dbl>
#>  1 H10   2015-07-01 12:00:00   513
#>  2 H10   2015-07-01 13:00:00   512
#>  3 H10   2015-07-01 14:00:00   506
#>  4 H10   2015-07-01 15:00:00   500
#>  5 H10   2015-07-01 16:00:00   490
#>  6 H10   2015-07-01 17:00:00   484
#>  7 H10   2015-07-01 18:00:00   467
#>  8 H10   2015-07-01 19:00:00   446
#>  9 H10   2015-07-01 20:00:00   434
#> 10 H10   2015-07-01 21:00:00   422
#> # ℹ 3,050 more rows

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:

  1. .value = log(value) Applies the Log Transformation
  2. .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)

Static ggplot2 Visualizations & Customizations

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::label_comma())

Box Plots (Time Series)

The plot_time_series_boxplot() function can be used to make box plots.

m4_monthly %>%
    group_by(id) %>%
    plot_time_series_boxplot(
        date, value,
        .period      = "1 year",
        .facet_ncol  = 2,
        .interactive = FALSE)

Regression Plots (Time Series)

A time series regression plot, plot_time_series_regression(), can be useful to quickly assess key features that are correlated to a time series.

m4_monthly %>%
    group_by(id) %>%
    plot_time_series_regression(
        .date_var     = date,
        .formula      = log(value) ~ as.numeric(date) + month(date, label = TRUE),
        .facet_ncol   = 2,
        .interactive  = FALSE,
        .show_summary = FALSE
    )

Summary

Timetk is part of the amazing Modeltime Ecosystem for time series forecasting. But it can take a long time to learn:

Your probably thinking how am I ever going to learn time series forecasting. Here’s the solution that will save you years of struggling.

Take the High-Performance Forecasting Course

Become the forecasting expert for your organization

High-Performance Time Series Forecasting Course

High-Performance Time Series Course

Time Series is Changing

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 by improving accuracy and scalability. Imagine what will happen to your career if you can provide your organization a “High-Performance Time Series Forecasting System” (HPTSF System).

How to Learn High-Performance Time Series Forecasting

I teach how to build a HPTFS System in my High-Performance Time Series Forecasting Course. You will learn:

Become the Time Series Expert for your organization.


Take the High-Performance Time Series Forecasting Course

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.