## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup, eval=FALSE-------------------------------------------------------- # library(tsibble, warn.conflicts = FALSE) # library(pins) # library(dplyr, warn.conflicts = FALSE) # library(imputeTS, warn.conflicts = FALSE) ## ----eval=FALSE--------------------------------------------------------------- # board <- board_local() # inverter_df <- board |> # pin_read("inverter_data") # head(inverter_df) # #> # A tibble: 6 × 6 # #> date device_id inverter output_power today_energy lifetime_energy # #> <dttm> <chr> <chr> [W] [kW/h] [kW/h] # #> 1 2024-09-22 19:35:41 E07000011776 1 0 0.646 252. # #> 2 2024-09-22 19:35:41 E07000011776 2 0 0.654 266. # #> 3 2024-09-22 19:43:29 E07000011776 1 0 0.647 252. # #> 4 2024-09-22 19:43:29 E07000011776 2 0 0.654 266. # #> 5 2024-09-24 19:09:59 E07000011776 1 6 1.66 255. # #> 6 2024-09-24 19:09:59 E07000011776 2 6 1.64 269. ## ----convert to time-serie, eval=FALSE---------------------------------------- # inverter_ts <- inverter_df |> # mutate(time_index = date |> lubridate::floor_date(unit = "30 minutes"), # device_inverter = stringr::str_c(device_id, "_", inverter)) |> # summarize(.by = c(time_index, device_id, inverter, device_inverter), # lifetime_energy = max(lifetime_energy), # today_energy = max(today_energy), # output_power = mean(output_power)) |> # units::drop_units() |> # # convert to time-series # as_tsibble(key = c(device_id, inverter, device_inverter), # index = time_index ) |> # # explicit gaps # fill_gaps() # # head(inverter_ts) # #> # A tsibble: 6 x 7 [30m] <?> # #> # Key: device_id, inverter, device_inverter [1] # #> time_index device_id inverter device_inverter lifetime_energy today_energy output_power # #> <dttm> <chr> <chr> <chr> <dbl> <dbl> <dbl> # #> 1 2024-09-24 19:00:00 E07000011433 1 E07000011433_1 47.0 1.59 6 # #> 2 2024-09-24 19:30:00 E07000011433 1 E07000011433_1 47.0 1.59 0 # #> 3 2024-09-24 20:00:00 E07000011433 1 E07000011433_1 NA NA NA # #> 4 2024-09-24 20:30:00 E07000011433 1 E07000011433_1 NA NA NA # #> 5 2024-09-24 21:00:00 E07000011433 1 E07000011433_1 NA NA NA # #> 6 2024-09-24 21:30:00 E07000011433 1 E07000011433_1 NA NA NA ## ----imputation, eval=FALSE--------------------------------------------------- # full_inverter <- inverter_ts |> # # impute 'lifetime_energy' gaps with a linear interpolation # mutate( # lifetime_energy = na_interpolation(lifetime_energy, option = "linear"), # today_energy = if_else( # inverter == lag(inverter), # coalesce(today_energy, lifetime_energy - lag(lifetime_energy)), # today_energy # ) # ) ## ----eval=FALSE--------------------------------------------------------------- # ggplot_na_imputations(x_with_na = inverter_ts |> filter(device_id == "E07000011433") |> pull(lifetime_energy), # x_with_imputations = full_inverter |> filter(device_id == "E07000011433") |> pull(lifetime_energy), # ylab = "Total energy [kWh]", # title = "Imputed Values, first device", # size_imputations = 0.2, # size_points = 0.6 # ) # ggplot_na_imputations(x_with_na = inverter_ts |> filter(device_id == "E07000011776") |> pull(lifetime_energy), # x_with_imputations = full_inverter |> filter(device_id == "E07000011776") |> pull(lifetime_energy), # ylab = "Total energy [kWh]", # title = "Imputed Values, second device", # size_imputations = 0.2, # size_points = 0.6 # ) ## ----eval=FALSE--------------------------------------------------------------- # ggplot_na_imputations(x_with_na = inverter_ts |> filter(device_id == "E07000011433") |> pull(today_energy), # x_with_imputations = full_inverter |> filter(device_id == "E07000011433") |> pull(today_energy), # ylab = "Daily energy [kWh]", # title = "Imputed Values, first device", # size_imputations = 0.2, # size_points = 0.6) # ggplot_na_imputations(x_with_na = inverter_ts |> filter(device_id == "E07000011776") |> pull(today_energy), # x_with_imputations = full_inverter |> filter(device_id == "E07000011776") |> pull(today_energy), # ylab = "Daily energy [kWh]", # title = "Imputed Values, second device", # size_imputations = 0.2, # size_points = 0.6)