library(knitr) knitr::opts_chunk$set( echo = TRUE, collapse = TRUE, comment = "#>", fig.path = "tools/README/", message = FALSE, warning = FALSE )
Le package contient un ensemble de fonctions pour vérifier et corriger des données entsoe.
L'objectif du package est de permettre la création d'un jeu de données complet pour deux années de données et pour plusieurs pays.
Les données peuvent être manquantes ou imparfaites. Il s'agit de permettre :
La procédure est pour l'instant implémentée pour les données de consommation.
On va charger l'ensemble des données archivées sur archive.org à l'URL suivante : https://archive.org/details/RTE_load
Le zip à charger est le suivant: https://archive.org/download/RTE_load/load.zip.
load_dir <- file.path(tempdir(), "load_files" ) load_zip <- file.path(tempdir(), "load.zip" ) local_zip <- "/Users/davidgohel/Documents/consulting/RTE/load_20180115.zip" if( file.exists(local_zip)) file.copy(local_zip, load_zip, overwrite = TRUE ) if( !file.exists(load_zip) ) download.file(url = "https://archive.org/download/RTE_load/load.zip", destfile = load_zip ) if( dir.exists(load_dir) ) unlink(load_dir, recursive = TRUE, force = TRUE) utils::unzip(load_zip, exdir = load_dir )
Les données sont disponibles dans le répertoire r load_dir
. Celui ci contient les fichiers suivants :
csv_files <- list.files(load_dir, full.names = TRUE, pattern = "\\.csv$") csv_infos <- file.info(csv_files)[, c(1, 3) ] row.names(csv_infos) <- NULL csv_infos$file <- basename(csv_files) kable(csv_infos)
Avant de dégager une série de consommation par pays
library(antaDraft) load_data <- anta_load(data_dir = load_dir )
L'opération va ajouter autant de colonnes qu'il y a
de tests exprimés dans le fichier config/load/raw_validate.yml
.
Ce fichier décrit les règles de validation de chaque ligne de donnée.
raw_validate <- system.file(package = "antaDraft", "config", "load", "raw_validate.yml") raw_validate <- paste0(readLines(raw_validate), collapse = "\n" ) htmltools::tags$pre(raw_validate)
load_data <- augment_validation(load_data) head(load_data)
On va produire les données agrégées avec la fonction
aggregate_with_rules
. Les règles sont
exprimées dans le fichier config/global/atc_per_country.yml
.
atc_per_country <- system.file(package = "antaDraft", "config", "global", "atc_per_country.yml") atc_per_country <- paste0(readLines(atc_per_country), collapse = "\n" ) htmltools::tags$pre(atc_per_country)
La fonction prend des données de load comme argument, c'est à dire obtenue avec la fonction anta_load()
.
aggregated_db <- agg_data(load_data)
Ces données peuvent être représentées graphiquement avec la
fonction plot
(voire ?plot_agg
).
plot_agg(aggregated_db, subset = aggregated_db$country %in% "SWITZERLAND")
Comme pour les données brutes, l'opération va ajouter autant de colonnes qu'il y a de tests exprimés dans le fichier agg_validate.yml
.
raw_validate <- system.file(package = "antaDraft", "config", "load", "agg_validate.yml") raw_validate <- paste0(readLines(raw_validate), collapse = "\n" ) htmltools::tags$pre(raw_validate)
aggregated_db <- augment_validation(aggregated_db)
Ces données peuvent être représentées graphiquement avec la
fonction plot
(voire ?plot.controled
).
plot(aggregated_db, subset = aggregated_db$country %in% "SWITZERLAND")
aggregated_db <- data_correct_with_rules(aggregated_db)
aggregated_db <- augment_process_summary(aggregated_db) library(dplyr) library(tidyr) aggregated_db %>% group_by_at(c( "country", "summary") ) %>% tally() %>% spread(summary, n) %>% kable()
Il faut dans un premier temps enrichir la base de données avec des
variables potentiellement explicatives. On utilise la fonction as_learning_db
.
dat <- as_learning_db(aggregated_db ) head(dat)
On peut alors créer deux modèles, un dépandant des mesures suivantes et un dépendant des mesures précédentes.
On utilisera pour cela la fonction define_model_rf
. Celle-ci sauvegarde les modèles dans un répertoire
local à la machine.
repertoire_model <- tempfile() dir.create(repertoire_model, showWarnings = FALSE, recursive = TRUE)
Création du modèle backward:
x_vars <- c( "year.iso", "week.iso", "hour.iso", "day.iso", "light_time", "is_off", "likely_off", "DAILY_MIN_CTY_MINUS_1", "DAILY_AVG_CTY_MINUS_1", "DAILY_MAX_CTY_MINUS_1", "HOUR_SHIFT_CTY_MINUS_1") dat <- define_model_rf( data = dat, x_vars = x_vars, y_var = "CTY", save_model_dir = repertoire_model, id = "BACKWARD" )
Création du modèle forward:
x_vars <- c( "year.iso", "week.iso", "hour.iso", "day.iso", "light_time", "is_off", "likely_off", "DAILY_MIN_CTY_PLUS_1", "DAILY_AVG_CTY_PLUS_1", "DAILY_MAX_CTY_PLUS_1", "HOUR_SHIFT_CTY_PLUS_1") dat <- define_model_rf( data = dat, x_vars = x_vars, y_var = "CTY", save_model_dir = repertoire_model, id = "FORWARD" )
Maintenant qu'on a deux modèles, on peut les utiliser en boucle pour remplacer les valeurs invalides par des valeurs prévues par les modèles.
for(i in 1:12 ){ dat <- impute_with_model(dat, id = "FORWARD") dat <- impute_with_model(dat, id = "BACKWARD") dat <- update_learning_db(dat) }
library(dplyr) library(tidyr) dat %>% group_by_at(c( "country", "summary") ) %>% tally() %>% spread(summary, n) %>% kable()
unlink(repertoire_model, recursive = TRUE, force = TRUE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.