9
Recurrence Rules Construct holiday / weekend events with recurrence rules. {slider} - rstd.io/slider Sliding Windows and Calendars Davis Vaughan, @rstudio {almanac} - rstd.io/almanac Rolling Windows Time-Aware Sliding Expanding Windows Familiar Syntax Period-Blocked Sliding lubridate Extensions {slider} + {almanac} = Slide variants apply a function along sequential windows of a vector. Useful for moving averages! Set .before = Inf to use an expanding window. Useful for cumulative functions! slide( , fn, .before = 1) fn( ) fn( ) fn( ) fn( ) slide( , fn, .before = Inf) fn( ) fn( ) fn( ) fn( ) Variants such as: slide_dbl(), slide_dfr() Multiple inputs with: slide2(.x, .y), pslide(.l) If you’ve used purrr, you’ll feel at home with slide! Respect the “gaps” in your time series by supplying a secondary index. slide_index( , , fn, .before = days(1)) 1 2 4 5 fn( ) fn( ) fn( ) fn( ) Looking back 1 day creates a range of [3, 4]. Since day 2 isn’t in the range, it isn’t included. With .complete = TRUE, this partial window won’t be evaluated. Slide in rolling period chunks to summarize at different frequencies. fn( ) fn( ) fn( ) Just January January and February February and March slide_period( , , fn, .before = 1, .period = “month”) Jan-01 Feb-01 Feb-02 Mar-01 Schedules Combine individual rules into comprehensive schedules. slide_index( , , fn, .before = one_day) Thur Fri Mon Tues fn( ) fn( ) fn( ) fn( ) slide_index( , , fn, .before = one_bday) Thur Fri Mon Tues fn( ) fn( ) fn( ) fn( ) Looking for a range of [Sun, Mon], incorrect! Correctly constructs business ranges of [Thur, Fri], [Fri, Mon], etc. Slide according to custom business schedule rules. one_bday <- bdays(1, on_weekends) one_day <- days(1) Construct business day period objects. Use them to step by irregular periods! on_labor_day <- yearly() %>% recur_on_ymonth("September") %>% recur_on_wday("Monday", nth = 1) Start with a base frequency Add recurrence conditions + one_day = Fri Sat Mon + one_bday = Fri alma_in( c("2019-09-02", "2019-09-03"), on_labor_day ) #> [1] TRUE FALSE Is a date in the recurrence set? on_weekends <- weekly() %>% recur_on_weekends() sch_business <- schedule() %>% sch_rrule(on_labor_day) %>% sch_rrule(on_weekends) %>% sch_merge(hldy_christmas()) Prebuilt holidays friday <- as.Date(“2019-08-30”) alma_step(friday, n = 1, sch_business) #> [1] "2019-09-03" Step over the weekend and Labor Day to Tuesday Animations use .before = 2.

Sliding Windows and Calendars {almanac} - rstd.io/almanac · Recurrence Rules {slider} - rstd.io/slider Construct holiday / weekend events with recurrence rules. Sliding Windows and

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Sliding Windows and Calendars {almanac} - rstd.io/almanac · Recurrence Rules {slider} - rstd.io/slider Construct holiday / weekend events with recurrence rules. Sliding Windows and

Recurrence RulesConstruct holiday / weekend events with recurrence rules.{slider} - rstd.io/slider

Sliding Windows and Calendars

Davis Vaughan, @rstudio

{almanac} - rstd.io/almanac

Rolling Windows Time-Aware Sliding

Expanding Windows

Familiar Syntax

Period-Blocked Sliding

lubridate Extensions

{slider} + {almanac} = ❤

Slide variants apply a function along sequential windows of a vector.

Useful for moving averages!

Set .before = Inf to use an expanding window. Useful for cumulative functions!

slide( , fn, .before = 1)

fn( )

fn( )

fn( )

fn( )

slide( , fn, .before = Inf)

fn( )

fn( )

fn( )

fn( )

Variants such as:

slide_dbl(), slide_dfr()

Multiple inputs with:

slide2(.x, .y), pslide(.l)

If you’ve used purrr,

you’ll feel at home with slide!

Respect the “gaps” in your time series by supplying a secondary index.

slide_index( , , fn, .before = days(1))

1245

fn( )

fn( )

fn( )

fn( )

Looking back 1 day creates a range of [3, 4]. Since day 2

isn’t in the range, it isn’t

included.

With .complete = TRUE, this partial window won’t be evaluated.

Slide in rolling period chunks to summarize at different frequencies.

fn( )

fn( )

fn( )

Just January

January and February

February and March

slide_period( , , fn, .before = 1, .period = “month”)

Jan-01Feb-01Feb-02Mar-01

SchedulesCombine individual rules into comprehensive schedules.

slide_index( , , fn, .before = one_day)

ThurFriMonTues

fn( )

fn( )

fn( )

fn( )

slide_index( , , fn, .before = one_bday)

ThurFriMonTues

fn( )

fn( )

fn( )

fn( )

Looking for a range of [Sun, Mon], incorrect!

Correctly constructs business ranges of [Thur, Fri], [Fri, Mon], etc.

Slide according to custom business schedule rules.

one_bday <- bdays(1, on_weekends)

one_day <- days(1)

Construct business day period objects. Use them to step by irregular periods!

on_labor_day <- yearly() %>% recur_on_ymonth("September") %>%

recur_on_wday("Monday", nth = 1)

Start with a

base frequency

Add recurrence conditions

+ one_day = Fri Sat

Mon+ one_bday = Fri

alma_in( c("2019-09-02", "2019-09-03"), on_labor_day )

#> [1] TRUE FALSE

Is a date in the recurrence set?

on_weekends <- weekly() %>%

recur_on_weekends()

sch_business <- schedule() %>%

sch_rrule(on_labor_day) %>%

sch_rrule(on_weekends) %>%

sch_merge(hldy_christmas())

Prebuilt holidays

friday <- as.Date(“2019-08-30”)

alma_step(friday, n = 1, sch_business) #> [1] "2019-09-03"

Step over the weekend and Labor Day to Tuesday

Animations use .before = 2.

Page 2: Sliding Windows and Calendars {almanac} - rstd.io/almanac · Recurrence Rules {slider} - rstd.io/slider Construct holiday / weekend events with recurrence rules. Sliding Windows and

Recurrence RulesConstruct holiday / weekend events with recurrence rules.{slider} - rstd.io/slider

Sliding Windows and Calendars

Davis Vaughan, @rstudio

{almanac} - rstd.io/almanac

Rolling Windows Time-Aware Sliding

Expanding Windows

Familiar Syntax

Period-Blocked Sliding

lubridate Extensions

{slider} + {almanac} = ❤

Slide variants apply a function along sequential windows of a vector.

Useful for moving averages!

Set .before = Inf to use an expanding window. Useful for cumulative functions!

slide( , fn, .before = 1)

fn( )

fn( )

fn( )

fn( )

slide( , fn, .before = Inf)

fn( )

fn( )

fn( )

fn( )

Variants such as:

slide_dbl(), slide_dfr()

Multiple inputs with:

slide2(.x, .y), pslide(.l)

If you’ve used purrr,

you’ll feel at home with slide!

Respect the “gaps” in your time series by supplying a secondary index.

slide_index( , , fn, .before = days(1))

1245

fn( )

fn( )

fn( )

fn( )

Looking back 1 day creates a range of [3, 4]. Since day 2

isn’t in the range, it isn’t

included.

With .complete = TRUE, this partial window won’t be evaluated.

Slide in rolling period chunks to summarize at different frequencies.

fn( )

fn( )

fn( )

Just January

January and February

February and March

slide_period( , , fn, .before = 1, .period = “month”)

Jan-01Feb-01Feb-02Mar-01

SchedulesCombine individual rules into comprehensive schedules.

slide_index( , , fn, .before = one_day)

ThurFriMonTues

fn( )

fn( )

fn( )

fn( )

slide_index( , , fn, .before = one_bday)

ThurFriMonTues

fn( )

fn( )

fn( )

fn( )

Looking for a range of [Sun, Mon], incorrect!

Correctly constructs business ranges of [Thur, Fri], [Fri, Mon], etc.

Slide according to custom business schedule rules.

one_bday <- bdays(1, on_weekends)

one_day <- days(1)

Construct business day period objects. Use them to step by irregular periods!

on_labor_day <- yearly() %>% recur_on_ymonth("September") %>%

recur_on_wday("Monday", nth = 1)

Start with a

base frequency

Add recurrence conditions

+ one_day = Fri Sat

Mon+ one_bday = Fri

alma_in( c("2019-09-02", "2019-09-03"), on_labor_day )

#> [1] TRUE FALSE

Is a date in the recurrence set?

on_weekends <- weekly() %>%

recur_on_weekends()

sch_business <- schedule() %>%

sch_rrule(on_labor_day) %>%

sch_rrule(on_weekends) %>%

sch_merge(hldy_christmas())

Prebuilt holidays

friday <- as.Date(“2019-08-30”)

alma_step(friday, n = 1, sch_business) #> [1] "2019-09-03"

Step over the weekend and Labor Day to Tuesday

Animations use .before = 2.

Page 3: Sliding Windows and Calendars {almanac} - rstd.io/almanac · Recurrence Rules {slider} - rstd.io/slider Construct holiday / weekend events with recurrence rules. Sliding Windows and

{slider} - rstd.io/sliderRolling & Expanding Windows

Slide variants apply a function along sequential windows of a vector.

Useful for moving averages!

fn( )

fn( )

fn( )

fn( )

slide( , fn, .before = 1)

.before = 2

.before = Inf

Page 4: Sliding Windows and Calendars {almanac} - rstd.io/almanac · Recurrence Rules {slider} - rstd.io/slider Construct holiday / weekend events with recurrence rules. Sliding Windows and
Page 5: Sliding Windows and Calendars {almanac} - rstd.io/almanac · Recurrence Rules {slider} - rstd.io/slider Construct holiday / weekend events with recurrence rules. Sliding Windows and

Looking back 1 day creates a

range of [3, 4]. Since day 2

isn’t in the range, it isn’t

included.

Respect the “gaps” in your time series by supplying a secondary index.

{slider} - rstd.io/sliderTime-Aware Sliding

slide_index( , , fn, .before = days(1))1245

fn( )

fn( )

fn( )

fn( )

.before = 2

Page 6: Sliding Windows and Calendars {almanac} - rstd.io/almanac · Recurrence Rules {slider} - rstd.io/slider Construct holiday / weekend events with recurrence rules. Sliding Windows and

{almanac} - rstd.io/almanacRecurrence Rules

Construct holiday / weekend events with recurrence rules.

on_labor_day <- yearly() %>% recur_on_ymonth("September") %>%

recur_on_wday("Monday", nth = 1)

Start with a

base frequency

Add recurrence conditions

alma_in( c("2019-09-02", "2019-09-03"), on_labor_day )

#> [1] TRUE FALSE

Is a date in the recurrence set?

Page 7: Sliding Windows and Calendars {almanac} - rstd.io/almanac · Recurrence Rules {slider} - rstd.io/slider Construct holiday / weekend events with recurrence rules. Sliding Windows and

{almanac} - rstd.io/almanaclubridate Extensions

on_weekends <- weekly() %>%

recur_on_weekends()

one_bday <- bdays(1, on_weekends)

one_day <- days(1)

Construct business day period objects. Use them to step by irregular periods!

+ one_day = Fri Sat

Mon+ one_bday = Fri

Page 8: Sliding Windows and Calendars {almanac} - rstd.io/almanac · Recurrence Rules {slider} - rstd.io/slider Construct holiday / weekend events with recurrence rules. Sliding Windows and
Page 9: Sliding Windows and Calendars {almanac} - rstd.io/almanac · Recurrence Rules {slider} - rstd.io/slider Construct holiday / weekend events with recurrence rules. Sliding Windows and

{slider} - rstd.io/slider

{almanac} - rstd.io/almanac

@dvaughan32

slides - github.com/DavisVaughan/rstudio-conf-2020