diff --git a/.nojekyll b/.nojekyll index 6a429533..e8c25617 100644 --- a/.nojekyll +++ b/.nojekyll @@ -1 +1 @@ -5c33ef08 \ No newline at end of file +d3b3387a \ No newline at end of file diff --git a/03_Fiches_thematiques/Fiche_donnees_temporelles.html b/03_Fiches_thematiques/Fiche_donnees_temporelles.html index 10c357d7..c22a01a1 100644 --- a/03_Fiches_thematiques/Fiche_donnees_temporelles.html +++ b/03_Fiches_thematiques/Fiche_donnees_temporelles.html @@ -754,15 +754,15 @@

# On prend la date d'aujourd'hui
 format(Sys.time(), format = "Nous sommes le %d %B %Y et il est %Hh%M et %Ss.")
-
[1] "Nous sommes le 08 April 2024 et il est 10h01 et 06s."
+
[1] "Nous sommes le 08 April 2024 et il est 12h05 et 50s."
format(Sys.time(), format = "Il s'est écoulé %ss depuis le 1er janvier 1970.")
-
[1] "Il s'est écoulé 1712570466s depuis le 1er janvier 1970."
+
[1] "Il s'est écoulé 1712577950s depuis le 1er janvier 1970."
format(Sys.time(), format = "Heure : %X")
-
[1] "Heure : 10:01:06 AM"
+
[1] "Heure : 12:05:50 PM"

La liste des formats de données est disponible sur la page d’aide de strptime() (accessible via help(strptime)).

@@ -830,7 +830,7 @@

format(Sys.time(), format = "%c")
-
[1] "Mon 08 Apr 2024 10:01:06 AM UTC"
+
[1] "Mon 08 Apr 2024 12:05:50 PM UTC"
# Paramètres locaux aux USA
 Sys.setlocale("LC_TIME", "en_US")
@@ -843,7 +843,7 @@

format(Sys.time(), format = "%c")
-
[1] "Mon 08 Apr 2024 10:01:06 AM UTC"
+
[1] "Mon 08 Apr 2024 12:05:50 PM UTC"
@@ -1255,16 +1255,16 @@

dygraph(temp_ts)

-
- +
+

On peut aussi afficher plusieurs courbes sur le même graphique :

dygraph(cbind(fdeaths, mdeaths))
-
- +
+

diff --git a/03_Fiches_thematiques/Fiche_targets.html b/03_Fiches_thematiques/Fiche_targets.html index 7b5569c0..89d0d00f 100644 --- a/03_Fiches_thematiques/Fiche_targets.html +++ b/03_Fiches_thematiques/Fiche_targets.html @@ -707,7 +707,7 @@

tar_make()
▶ dispatched target csv_file
-● completed target csv_file [0.063 seconds]
+● completed target csv_file [0.066 seconds]
 ▶ dispatched target raw_filosofi_epci
 Rows: 34932 Columns: 29
 ── Column specification ────────────────────────────────────────────────────────
@@ -717,12 +717,12 @@ 

+▶ completed pipeline [0.649 seconds]

Lorsque la chaîne de traitement est de taille relativement modeste (comme ici), on peut la visualiser avec la fonction tar_visnetwork:

@@ -794,7 +794,7 @@

diff --git a/resources/rmarkdown/chunk07.png b/resources/rmarkdown/chunk07.png index c87470d8..06339d7f 100644 Binary files a/resources/rmarkdown/chunk07.png and b/resources/rmarkdown/chunk07.png differ diff --git a/search.json b/search.json index 57e0da88..80d89e1f 100644 --- a/search.json +++ b/search.json @@ -736,7 +736,7 @@ "href": "03_Fiches_thematiques/Fiche_targets.html#un-projet-minimal-pour-comprendre-lessentiel", "title": "10  Construire une chaîne de traitement reproductible avec targets", "section": "\n10.4 Un projet minimal pour comprendre l’essentiel", - "text": "10.4 Un projet minimal pour comprendre l’essentiel\n\n10.4.1 Structure du projet\nUn projet targets est un projet R en règle générale structuré de la sorte :\n\nun fichier _targets.R décrivant les éléments de configuration (par exemple packages utilisés) et l’enchaînement des traitements\nun dossier R comprenant les scripts définissant les fonctions utilisées par le projet\nun dossier data pour les données externes (non générées au cours du projet)\n\nL’architecture des dossiers du projet ressemble par conséquent à ceci :\n├── _targets.R\n├── R/\n├───── mesfonctions_pour_faire_ceci.R\n├───── mesfonctions_pour_faire_cela.R\n├──── ...\n├── data/\n├───── donnees_entrees.csv\n└───── ...\n\n\n\n\n\n\nTip\n\n\n\nOrganiser ses fichiers de cette façon est très commun, mais pas indispensable pour l’utilisation de targets. La seule obligation est que le fichier _targets.R soit positionné dans le répertoire de travail.\nUne manière commode pour un utilisateur souhaitant utiliser targets est donc de créer un projet RStudio à la racine duquel il place ce fichier. En prévision des futures fonctions qu’il va écrire, il crée un dossier R/. Le fichier _targets.R détaille l’enchaînement des traitements. Il doit toujours contenir une instruction chargeant le package targets.\n\n\n\n10.4.2 Premier exemple\nPartons d’un exemple simple :\n\non lit les données de population depuis un fichier CSV ;\non a créé une fonction pour ne garder que les communes de plus de 200 000 habitants ;\nsur ces communes, on désire connaître la proportion dont le revenu médian est supérieur à 25 000 euros.\n\nLa chaîne de traitement est donc ici linéaire. Chaque étape dépend de la précédente et uniquement de celle-ci. Le fichier d’instruction _targets prendra alors la forme suivante:\n\n# fichier _targets.R\n\nlibrary(targets)\n\ntar_option_set(packages = c(\"dplyr\", \"readr\"))\n\nsource(\"mesfonctions_pour_faire_ceci.R\", encoding = \"utf-8\")\n\n# on crée un fichier à partir d'un des jeux d'exemples\nraw_file_path <- \"data/donnes_entrees.csv\"\ndir.create(\"data\")\nreadr::write_csv(doremifasolData::filosofi_com_2016, raw_file_path)\n\nlist(\n \n tar_target(csv_file, raw_file_path, format = \"file\"),\n\n tar_target(\n raw_filosofi_epci, readr::read_csv(csv_file),\n ),\n tar_target(\n grandes_villes, garde_grandes_villes(raw_filosofi_epci)\n ),\n tar_target(\n prop_sup_25k, grandes_villes %>% dplyr::summarise(mean(MED16 > 25000)*100)\n )\n)\n\nLes fonctions écrites par l’analyste et utilisées dans la chaîne de traitement (en l’occurrence garde_grandes_villes) sont contenues dans les fichiers que l’on “source” au départ, ici depuis un script \"mesfonctions_pour_faire_ceci.R.\nLes packages utilisés dans les traitements sont définis via la fonction tar_option_set du package targets. Ici, on a besoin des packages dplyr et readr dans notre chaîne de traitement.\nLa chaîne de traitement est représentée par une liste de tar_target, soit les objets R qui sont les cibles intermédiaires de l’analyse. Ils sont le résultat de l’application à une cible précédente d’une fonction pour obtenir la cible suivante :\n\nIci la première cible est particulière (format = file) : on spécifie où sont les données d’entrée afin de surveiller si elles changent.\nLa seconde prend en entrée la première cible data_file et la transforme en appliquant la fonction readr::read_csv en un nouvel objet R, raw_filosofi_epci. Il s’agit ainsi des données brutes après l’import dans R, avant toute modification\nLa troisième applique cette fois une fonction écrite par l’utilisateur à raw_filosofi_epci pour obtenir grandes_villes, et ainsi de suite…\n\nAinsi, le fichier _targets.R contient la description de l’ensemble des étapes du traitement. La complexité des traitements est résumée de façon concise par un ensemble minimal de fonctions résumant les grandes étapes. Afin de faire tourner l’analyse, l’utilisateur fait appel au sein du projet à la fonction tar_make(). Il s’agit de la fonction qu’un utilisateur du package targets utilisera le plus fréquemment. L’utilisateur est informé de l’évolution des calculs.\n\ntar_make()\n\n▶ dispatched target csv_file\n● completed target csv_file [0.063 seconds]\n▶ dispatched target raw_filosofi_epci\nRows: 34932 Columns: 29\n── Column specification ────────────────────────────────────────────────────────\nDelimiter: \",\"\nchr (2): CODGEO, LIBGEO\ndbl (27): NBMENFISC16, NBPERSMENFISC16, MED16, PIMP16, TP6016, TP60AGE116, T...\n\nℹ Use `spec()` to retrieve the full column specification for this data.\nℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.\n● completed target raw_filosofi_epci [0.18 seconds]\n▶ dispatched target grandes_villes\n● completed target grandes_villes [0.082 seconds]\n▶ dispatched target prop_sup_25k\n● completed target prop_sup_25k [0.003 seconds]\n▶ completed pipeline [0.617 seconds]\n\n\nLorsque la chaîne de traitement est de taille relativement modeste (comme ici), on peut la visualiser avec la fonction tar_visnetwork:\n\ntar_visnetwork()\n\nOn obtient bien un diagramme linéaire comme on en avait l’intuition.\n\n\n\n\n\n\nNote\n\n\n\nIl est tout à fait possible de stocker l’ensemble des cibles intermédiaires dans un emplacement différent du projet. Il s’agit même d’une bonne pratique de séparer le lieu de stockage du code de celui des données.\nIl sera nécessaire d’éditer les options de la chaîne dans le fichier _targets.R. Par exemple avec cette ligne de commande, au début du fichier _targets.R (mais après l’appel à library(targets):\n\ntar_config_set(store = \"mon_dossier_donnees/projet-toto\")\n\n\n\n\n10.4.3 Modification d’une étape intermédiaire\nL’utilisateur décide ensuite de modifier la définition des grandes villes considérées. Supposons qu’il ajoute un argument à la fonction garde_grandes_villes pour ne garder que celles dont la population est supérieure à seuil. Dans le fichier _targets.R, il est nécessaire de changer la définition de l’étape de définition de grandes_villes. Cela amènera à une chaîne ayant la structure suivante\n\n# fichier _targets.R\n\nlibrary(targets)\n\ntar_option_set(packages = c(\"dplyr\", \"readr\"))\n\nsource(\"mesfonctions_pour_faire_ceci.R\", encoding = \"utf-8\")\n\n# on crée un fichier à partir d'un des jeux d'exemples\nraw_file_path <- \"data/donnes_entrees.csv\"\ndir.create(\"data\")\nreadr::write_csv(doremifasolData::filosofi_com_2016, raw_file_path)\n\nlist(\n \n tar_target(csv_file, raw_file_path, format = \"file\"),\n \n tar_target(\n raw_filosofi_epci, readr::read_csv(csv_file),\n ),\n tar_target(\n grandes_villes, garde_grandes_villes(raw_filosofi_epci, seuil = 10000)\n ),\n tar_target(\n prop_sup_25k, grandes_villes %>% dplyr::summarise(mean(MED16 > 25000)*100)\n )\n)\n\nIci, le pipeline est de taille relativement modeste et il est facile d’identifier la source de modification. Néanmoins, la représentation sous forme de diagramme peut aider à mieux s’en rendre compte\n\ntar_visnetwork()\n\nLa modification de la fonction garde_grandes_villes entraîne la nécessaire mise à jour de grandes_villes et toutes les cibles qui en dépendent, mais pas du début de la chaîne de traitement !\ntargets va ainsi intelligemment utiliser ceci pour minimiser le temps nécessaire pour mettre à jour l’ensemble de la chaîne de traitement\n\ntar_make()\n\n✔ skipped target csv_file\n✔ skipped target raw_filosofi_epci\n▶ dispatched target grandes_villes\n● completed target grandes_villes [0.007 seconds]\n▶ dispatched target prop_sup_25k\n● completed target prop_sup_25k [0.003 seconds]\n▶ completed pipeline [0.219 seconds]\nWarning message:\nIn dir.create(\"data\") : 'data' already exists\n\n\nLes cibles définies sont calculées successivement, stockées et mises à jour automatiquement dans un dossier _targets/objects/.\n\n10.4.4 Accéder à des éléments du pipeline dans une session R\n\nOn peut facilement accéder à un objet cible, quel que soit son emplacement dans la chaîne de traitement, puisque chaque cible est stockée sous la forme d’un fichier temporaire.\nLa fonction tar_load permet de charger dans l’environnement R l’objet en question. Par exemple, si on désire tester des choses sur grandes_villes, on pourra utiliser la commande suivante\n\ntar_load(grandes_villes)\nhead(grandes_villes)\n\n# A tibble: 6 × 29\n CODGEO LIBGEO NBMENFISC16 NBPERSMENFISC16 MED16 PIMP16 TP6016 TP60AGE116\n <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>\n1 01004 Ambérieu-e… 6363 14228 19721 49 17 19\n2 01033 Valserhône 6472 15255 21405. 45 16 18\n3 01053 Bourg-en-B… 18601 38014. 18249. 46 22 27\n4 01173 Gex 4894 11276. 32304. 60 11 NA\n5 01283 Oyonnax 9248 22444. 16948. 40 25 31\n6 02168 Château-Th… 6805 15070. 17643. 43 24 33\n# ℹ 21 more variables: TP60AGE216 <dbl>, TP60AGE316 <dbl>, TP60AGE416 <dbl>,\n# TP60AGE516 <dbl>, TP60AGE616 <dbl>, TP60TOL116 <dbl>, TP60TOL216 <dbl>,\n# PACT16 <dbl>, PTSA16 <dbl>, PCHO16 <dbl>, PBEN16 <dbl>, PPEN16 <dbl>,\n# PPAT16 <dbl>, PPSOC16 <dbl>, PPFAM16 <dbl>, PPMINI16 <dbl>, PPLOGT16 <dbl>,\n# PIMPOT16 <dbl>, D116 <dbl>, D916 <dbl>, RD16 <dbl>\n\n\nCela permettra à l’utilisateur de targets de prototyper une nouvelle étape de traitement dans sa session R puis, une fois satisfait, la mettre en production en mettant les fonctions dans le fichier XXXXX.R et en créant l’étape tar_target adéquate.\n\n\n\n\n\n\nTip\n\n\n\nPar défaut, les cibles sont stockées au format rds. Ce format présente deux inconvénients :\n\nil est spécifique à R et ne permet pas de lire les étapes intermédiaires dans un autre langage (par exemple Python) ;\nla sérialisation des objets R nécessaire pour écrire sous format rds ou lire un tel fichier est assez lente.\n\nIl est conseillé d’utiliser un autre format de stockage des cibles.\nEn premier lieu, le format par défaut qui peut être utilisé est le format qs. À l’instar du format rds, celui-ci est spécifique à R mais présente l’avantage d’être beaucoup plus rapide en termes de temps en lecture/écriture. Pour cela, il convient d’ajouter la ligne suivante au début des options du fichier _targets.R :\n\ntar_option_set(format = \"fst_dt\")\n\nPour les dataframes, il est possible d’utiliser des formats plus universels ou plus appropriés. Les formats à privilégier sont les suivants:\n\n\nparquet: format qui tend à devenir un standard dans le monde de la science des données. Ce format présente plusieurs avantages, parmi lesquels le fait qu’il est très compressé, très rapide et qu’il conserve les métadonnées du fichier ce qui permet, à la différence des formats type CSV, de conserver l’intégrité des typages des colonnes (voir la fiche Importer des fichiers parquets pour plus de détails) ;\n\nfst_tbl (utilisateurs du tidyverse) ou fst_dt (utilisateurs de data.table) : formats spécifiques à R présentant des avantages proches de ceux d’un fichier parquet. Ils préservent la nature d’un data.frame, ce qui permet de repartir d’un tibble ou d’un datatable sans avoir à faire de conversion à chaque étape du pipeline.\n\nLe choix du format de stockage d’un objet se fait directement lors de la déclaration de la cible dans _targets.R:\n\ntar_target(\n grandes_villes, garde_grandes_villes(raw_filosofi_epci),\n format = \"parquet\"\n)\n\nDans le dossier _targets/object, le fichier sera ainsi stocké au format exigé.\nIl n’est pas recommandé d’utiliser les formats parquet, fst_dt ou fst_tbl par défaut car ils ne permettent de stocker que des dataframes. Or, un pipeline peut stocker des objets de nature beaucoup plus diverses (listes, objets ggplot, etc.)\n\n\n\n\n\n\n\n\nNote\n\n\n\nL’utilisation du garbage collector peut parfois s’avérer utile pour nettoyer la mémoire de la session R dans laquelle tourne le pipeline. Ceci est particulièrement utile lorsque les objets manipulés sont volumineux (voir la fiche Superviser sa session R).\nDans targets, cette opération est possible en ajoutant l’argument garbage_collection = TRUE à la définition de la cible :\n\ntar_target(\n grandes_villes, garde_grandes_villes(raw_filosofi_epci),\n garbage_collection = TRUE\n)", + "text": "10.4 Un projet minimal pour comprendre l’essentiel\n\n10.4.1 Structure du projet\nUn projet targets est un projet R en règle générale structuré de la sorte :\n\nun fichier _targets.R décrivant les éléments de configuration (par exemple packages utilisés) et l’enchaînement des traitements\nun dossier R comprenant les scripts définissant les fonctions utilisées par le projet\nun dossier data pour les données externes (non générées au cours du projet)\n\nL’architecture des dossiers du projet ressemble par conséquent à ceci :\n├── _targets.R\n├── R/\n├───── mesfonctions_pour_faire_ceci.R\n├───── mesfonctions_pour_faire_cela.R\n├──── ...\n├── data/\n├───── donnees_entrees.csv\n└───── ...\n\n\n\n\n\n\nTip\n\n\n\nOrganiser ses fichiers de cette façon est très commun, mais pas indispensable pour l’utilisation de targets. La seule obligation est que le fichier _targets.R soit positionné dans le répertoire de travail.\nUne manière commode pour un utilisateur souhaitant utiliser targets est donc de créer un projet RStudio à la racine duquel il place ce fichier. En prévision des futures fonctions qu’il va écrire, il crée un dossier R/. Le fichier _targets.R détaille l’enchaînement des traitements. Il doit toujours contenir une instruction chargeant le package targets.\n\n\n\n10.4.2 Premier exemple\nPartons d’un exemple simple :\n\non lit les données de population depuis un fichier CSV ;\non a créé une fonction pour ne garder que les communes de plus de 200 000 habitants ;\nsur ces communes, on désire connaître la proportion dont le revenu médian est supérieur à 25 000 euros.\n\nLa chaîne de traitement est donc ici linéaire. Chaque étape dépend de la précédente et uniquement de celle-ci. Le fichier d’instruction _targets prendra alors la forme suivante:\n\n# fichier _targets.R\n\nlibrary(targets)\n\ntar_option_set(packages = c(\"dplyr\", \"readr\"))\n\nsource(\"mesfonctions_pour_faire_ceci.R\", encoding = \"utf-8\")\n\n# on crée un fichier à partir d'un des jeux d'exemples\nraw_file_path <- \"data/donnes_entrees.csv\"\ndir.create(\"data\")\nreadr::write_csv(doremifasolData::filosofi_com_2016, raw_file_path)\n\nlist(\n \n tar_target(csv_file, raw_file_path, format = \"file\"),\n\n tar_target(\n raw_filosofi_epci, readr::read_csv(csv_file),\n ),\n tar_target(\n grandes_villes, garde_grandes_villes(raw_filosofi_epci)\n ),\n tar_target(\n prop_sup_25k, grandes_villes %>% dplyr::summarise(mean(MED16 > 25000)*100)\n )\n)\n\nLes fonctions écrites par l’analyste et utilisées dans la chaîne de traitement (en l’occurrence garde_grandes_villes) sont contenues dans les fichiers que l’on “source” au départ, ici depuis un script \"mesfonctions_pour_faire_ceci.R.\nLes packages utilisés dans les traitements sont définis via la fonction tar_option_set du package targets. Ici, on a besoin des packages dplyr et readr dans notre chaîne de traitement.\nLa chaîne de traitement est représentée par une liste de tar_target, soit les objets R qui sont les cibles intermédiaires de l’analyse. Ils sont le résultat de l’application à une cible précédente d’une fonction pour obtenir la cible suivante :\n\nIci la première cible est particulière (format = file) : on spécifie où sont les données d’entrée afin de surveiller si elles changent.\nLa seconde prend en entrée la première cible data_file et la transforme en appliquant la fonction readr::read_csv en un nouvel objet R, raw_filosofi_epci. Il s’agit ainsi des données brutes après l’import dans R, avant toute modification\nLa troisième applique cette fois une fonction écrite par l’utilisateur à raw_filosofi_epci pour obtenir grandes_villes, et ainsi de suite…\n\nAinsi, le fichier _targets.R contient la description de l’ensemble des étapes du traitement. La complexité des traitements est résumée de façon concise par un ensemble minimal de fonctions résumant les grandes étapes. Afin de faire tourner l’analyse, l’utilisateur fait appel au sein du projet à la fonction tar_make(). Il s’agit de la fonction qu’un utilisateur du package targets utilisera le plus fréquemment. L’utilisateur est informé de l’évolution des calculs.\n\ntar_make()\n\n▶ dispatched target csv_file\n● completed target csv_file [0.066 seconds]\n▶ dispatched target raw_filosofi_epci\nRows: 34932 Columns: 29\n── Column specification ────────────────────────────────────────────────────────\nDelimiter: \",\"\nchr (2): CODGEO, LIBGEO\ndbl (27): NBMENFISC16, NBPERSMENFISC16, MED16, PIMP16, TP6016, TP60AGE116, T...\n\nℹ Use `spec()` to retrieve the full column specification for this data.\nℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.\n● completed target raw_filosofi_epci [0.187 seconds]\n▶ dispatched target grandes_villes\n● completed target grandes_villes [0.092 seconds]\n▶ dispatched target prop_sup_25k\n● completed target prop_sup_25k [0.003 seconds]\n▶ completed pipeline [0.649 seconds]\n\n\nLorsque la chaîne de traitement est de taille relativement modeste (comme ici), on peut la visualiser avec la fonction tar_visnetwork:\n\ntar_visnetwork()\n\nOn obtient bien un diagramme linéaire comme on en avait l’intuition.\n\n\n\n\n\n\nNote\n\n\n\nIl est tout à fait possible de stocker l’ensemble des cibles intermédiaires dans un emplacement différent du projet. Il s’agit même d’une bonne pratique de séparer le lieu de stockage du code de celui des données.\nIl sera nécessaire d’éditer les options de la chaîne dans le fichier _targets.R. Par exemple avec cette ligne de commande, au début du fichier _targets.R (mais après l’appel à library(targets):\n\ntar_config_set(store = \"mon_dossier_donnees/projet-toto\")\n\n\n\n\n10.4.3 Modification d’une étape intermédiaire\nL’utilisateur décide ensuite de modifier la définition des grandes villes considérées. Supposons qu’il ajoute un argument à la fonction garde_grandes_villes pour ne garder que celles dont la population est supérieure à seuil. Dans le fichier _targets.R, il est nécessaire de changer la définition de l’étape de définition de grandes_villes. Cela amènera à une chaîne ayant la structure suivante\n\n# fichier _targets.R\n\nlibrary(targets)\n\ntar_option_set(packages = c(\"dplyr\", \"readr\"))\n\nsource(\"mesfonctions_pour_faire_ceci.R\", encoding = \"utf-8\")\n\n# on crée un fichier à partir d'un des jeux d'exemples\nraw_file_path <- \"data/donnes_entrees.csv\"\ndir.create(\"data\")\nreadr::write_csv(doremifasolData::filosofi_com_2016, raw_file_path)\n\nlist(\n \n tar_target(csv_file, raw_file_path, format = \"file\"),\n \n tar_target(\n raw_filosofi_epci, readr::read_csv(csv_file),\n ),\n tar_target(\n grandes_villes, garde_grandes_villes(raw_filosofi_epci, seuil = 10000)\n ),\n tar_target(\n prop_sup_25k, grandes_villes %>% dplyr::summarise(mean(MED16 > 25000)*100)\n )\n)\n\nIci, le pipeline est de taille relativement modeste et il est facile d’identifier la source de modification. Néanmoins, la représentation sous forme de diagramme peut aider à mieux s’en rendre compte\n\ntar_visnetwork()\n\nLa modification de la fonction garde_grandes_villes entraîne la nécessaire mise à jour de grandes_villes et toutes les cibles qui en dépendent, mais pas du début de la chaîne de traitement !\ntargets va ainsi intelligemment utiliser ceci pour minimiser le temps nécessaire pour mettre à jour l’ensemble de la chaîne de traitement\n\ntar_make()\n\n✔ skipped target csv_file\n✔ skipped target raw_filosofi_epci\n▶ dispatched target grandes_villes\n● completed target grandes_villes [0.007 seconds]\n▶ dispatched target prop_sup_25k\n● completed target prop_sup_25k [0.003 seconds]\n▶ completed pipeline [0.23 seconds]\nWarning message:\nIn dir.create(\"data\") : 'data' already exists\n\n\nLes cibles définies sont calculées successivement, stockées et mises à jour automatiquement dans un dossier _targets/objects/.\n\n10.4.4 Accéder à des éléments du pipeline dans une session R\n\nOn peut facilement accéder à un objet cible, quel que soit son emplacement dans la chaîne de traitement, puisque chaque cible est stockée sous la forme d’un fichier temporaire.\nLa fonction tar_load permet de charger dans l’environnement R l’objet en question. Par exemple, si on désire tester des choses sur grandes_villes, on pourra utiliser la commande suivante\n\ntar_load(grandes_villes)\nhead(grandes_villes)\n\n# A tibble: 6 × 29\n CODGEO LIBGEO NBMENFISC16 NBPERSMENFISC16 MED16 PIMP16 TP6016 TP60AGE116\n <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>\n1 01004 Ambérieu-e… 6363 14228 19721 49 17 19\n2 01033 Valserhône 6472 15255 21405. 45 16 18\n3 01053 Bourg-en-B… 18601 38014. 18249. 46 22 27\n4 01173 Gex 4894 11276. 32304. 60 11 NA\n5 01283 Oyonnax 9248 22444. 16948. 40 25 31\n6 02168 Château-Th… 6805 15070. 17643. 43 24 33\n# ℹ 21 more variables: TP60AGE216 <dbl>, TP60AGE316 <dbl>, TP60AGE416 <dbl>,\n# TP60AGE516 <dbl>, TP60AGE616 <dbl>, TP60TOL116 <dbl>, TP60TOL216 <dbl>,\n# PACT16 <dbl>, PTSA16 <dbl>, PCHO16 <dbl>, PBEN16 <dbl>, PPEN16 <dbl>,\n# PPAT16 <dbl>, PPSOC16 <dbl>, PPFAM16 <dbl>, PPMINI16 <dbl>, PPLOGT16 <dbl>,\n# PIMPOT16 <dbl>, D116 <dbl>, D916 <dbl>, RD16 <dbl>\n\n\nCela permettra à l’utilisateur de targets de prototyper une nouvelle étape de traitement dans sa session R puis, une fois satisfait, la mettre en production en mettant les fonctions dans le fichier XXXXX.R et en créant l’étape tar_target adéquate.\n\n\n\n\n\n\nTip\n\n\n\nPar défaut, les cibles sont stockées au format rds. Ce format présente deux inconvénients :\n\nil est spécifique à R et ne permet pas de lire les étapes intermédiaires dans un autre langage (par exemple Python) ;\nla sérialisation des objets R nécessaire pour écrire sous format rds ou lire un tel fichier est assez lente.\n\nIl est conseillé d’utiliser un autre format de stockage des cibles.\nEn premier lieu, le format par défaut qui peut être utilisé est le format qs. À l’instar du format rds, celui-ci est spécifique à R mais présente l’avantage d’être beaucoup plus rapide en termes de temps en lecture/écriture. Pour cela, il convient d’ajouter la ligne suivante au début des options du fichier _targets.R :\n\ntar_option_set(format = \"fst_dt\")\n\nPour les dataframes, il est possible d’utiliser des formats plus universels ou plus appropriés. Les formats à privilégier sont les suivants:\n\n\nparquet: format qui tend à devenir un standard dans le monde de la science des données. Ce format présente plusieurs avantages, parmi lesquels le fait qu’il est très compressé, très rapide et qu’il conserve les métadonnées du fichier ce qui permet, à la différence des formats type CSV, de conserver l’intégrité des typages des colonnes (voir la fiche Importer des fichiers parquets pour plus de détails) ;\n\nfst_tbl (utilisateurs du tidyverse) ou fst_dt (utilisateurs de data.table) : formats spécifiques à R présentant des avantages proches de ceux d’un fichier parquet. Ils préservent la nature d’un data.frame, ce qui permet de repartir d’un tibble ou d’un datatable sans avoir à faire de conversion à chaque étape du pipeline.\n\nLe choix du format de stockage d’un objet se fait directement lors de la déclaration de la cible dans _targets.R:\n\ntar_target(\n grandes_villes, garde_grandes_villes(raw_filosofi_epci),\n format = \"parquet\"\n)\n\nDans le dossier _targets/object, le fichier sera ainsi stocké au format exigé.\nIl n’est pas recommandé d’utiliser les formats parquet, fst_dt ou fst_tbl par défaut car ils ne permettent de stocker que des dataframes. Or, un pipeline peut stocker des objets de nature beaucoup plus diverses (listes, objets ggplot, etc.)\n\n\n\n\n\n\n\n\nNote\n\n\n\nL’utilisation du garbage collector peut parfois s’avérer utile pour nettoyer la mémoire de la session R dans laquelle tourne le pipeline. Ceci est particulièrement utile lorsque les objets manipulés sont volumineux (voir la fiche Superviser sa session R).\nDans targets, cette opération est possible en ajoutant l’argument garbage_collection = TRUE à la définition de la cible :\n\ntar_target(\n grandes_villes, garde_grandes_villes(raw_filosofi_epci),\n garbage_collection = TRUE\n)", "crumbs": [ "Introduction", "Mener un projet statistique avec R", @@ -1876,7 +1876,7 @@ "href": "03_Fiches_thematiques/Fiche_donnees_temporelles.html#autres-fonctions", "title": "24  Manipuler des données temporelles", "section": "\n24.4 Autres fonctions", - "text": "24.4 Autres fonctions\n\n24.4.1 Formater une date avec la fonction format()\n\nLa fonction format() est utile avec les dates car elle permet de formater une date selon n’importe quelle représentation.\nPar exemple pour des dates :\n\n# On prend la date d'aujourd'hui\nformat(Sys.Date(), format = \"Nous sommes le %A %d %B %Y.\")\n\n[1] \"Nous sommes le Monday 08 April 2024.\"\n\nformat(Sys.Date(), format = \"Date du jour : %x\")\n\n[1] \"Date du jour : 04/08/2024\"\n\n\nPar exemple pour des temps :\n\n# On prend la date d'aujourd'hui\nformat(Sys.time(), format = \"Nous sommes le %d %B %Y et il est %Hh%M et %Ss.\")\n\n[1] \"Nous sommes le 08 April 2024 et il est 10h01 et 06s.\"\n\nformat(Sys.time(), format = \"Il s'est écoulé %ss depuis le 1er janvier 1970.\")\n\n[1] \"Il s'est écoulé 1712570466s depuis le 1er janvier 1970.\"\n\nformat(Sys.time(), format = \"Heure : %X\")\n\n[1] \"Heure : 10:01:06 AM\"\n\n\nLa liste des formats de données est disponible sur la page d’aide de strptime() (accessible via help(strptime)).\n\n\n\n\n\n\nLes normes ISO8601 et RFC3339\n\n\n\nLes normes ISO8601 et RFC3339 sont des conventions de représentation des dates. Selon ces 2 normes, certains formats de dates sont acceptés ou non.\nPar exemple, voici quelques formats représentant la date du 24 mai 2023 à 8h43 (UTC) :\n\n\n\"2023-05-24T08:43:00Z\" ou \"2023-05-24T08:43:00+08:00\" sont des formats acceptés par ces 2 normes.\n\n\"2023-05-24t08:43:00z\" est un format accepté uniquement par la norme RFC3339.\n\n\"2023-05-24T08:43Z\" est un format accepté uniquement par la norme ISO8601.\n\nPour savoir quels formats sont acceptés par ces normes, une infographie est disponible ici : https://ijmacd.github.io/rfc3339-iso8601/.\nOn peut aussi utiliser le package parsedate qui permet de lire une date au format ISO8601\n\nlibrary(\"parsedate\")\n\nparse_iso_8601(\"2023-05-24T08:43:00+08:00\") # Accepté par ISO8601\n\n[1] \"2023-05-24 00:43:00 UTC\"\n\nparse_iso_8601(\"2023-05-24t08:43:00z\") # Refusé par ISO8601\n\n[1] NA\n\nparse_iso_8601(\"2023-05-24T08:43Z\") # Accepté par ISO8601\n\n[1] \"2023-05-24 08:43:00 UTC\"\n\n\n\n\n\n24.4.2 Paramètres régionaux\nPour obtenir des dates, d’autres fonctions existent comme :\n\n\nSys.Date() pour connaitre la date du jour,\n\nSys.time() pour connaitre l’horaire actuel (date + heure),\n\nSys.timezone() pour le fuseau horaire actuel.\n\nIl peut être utile de vouloir changer les paramètres régionaux sous R. Pour cela, il faut faire appel à la fonction Sys.setlocale()\n\n# Paramètres locaux en France\nSys.setlocale(\"LC_TIME\", \"fr_FR.UTF-8\")\n\nWarning in Sys.setlocale(\"LC_TIME\", \"fr_FR.UTF-8\"): OS reports request to set\nlocale to \"fr_FR.UTF-8\" cannot be honored\n\n\n[1] \"\"\n\nformat(Sys.time(), format = \"%c\")\n\n[1] \"Mon 08 Apr 2024 10:01:06 AM UTC\"\n\n# Paramètres locaux aux USA\nSys.setlocale(\"LC_TIME\", \"en_US\")\n\nWarning in Sys.setlocale(\"LC_TIME\", \"en_US\"): OS reports request to set locale\nto \"en_US\" cannot be honored\n\n\n[1] \"\"\n\nformat(Sys.time(), format = \"%c\")\n\n[1] \"Mon 08 Apr 2024 10:01:06 AM UTC\"\n\n\n\n\n\n\n\n\nNote\n\n\n\nLa fonction Sys.setlocale() a un impact sur l’affichage mais pas sur la valeur de l’objet. Ainsi, cela ne change pas le fuseau horaire (par exemple).", + "text": "24.4 Autres fonctions\n\n24.4.1 Formater une date avec la fonction format()\n\nLa fonction format() est utile avec les dates car elle permet de formater une date selon n’importe quelle représentation.\nPar exemple pour des dates :\n\n# On prend la date d'aujourd'hui\nformat(Sys.Date(), format = \"Nous sommes le %A %d %B %Y.\")\n\n[1] \"Nous sommes le Monday 08 April 2024.\"\n\nformat(Sys.Date(), format = \"Date du jour : %x\")\n\n[1] \"Date du jour : 04/08/2024\"\n\n\nPar exemple pour des temps :\n\n# On prend la date d'aujourd'hui\nformat(Sys.time(), format = \"Nous sommes le %d %B %Y et il est %Hh%M et %Ss.\")\n\n[1] \"Nous sommes le 08 April 2024 et il est 12h05 et 50s.\"\n\nformat(Sys.time(), format = \"Il s'est écoulé %ss depuis le 1er janvier 1970.\")\n\n[1] \"Il s'est écoulé 1712577950s depuis le 1er janvier 1970.\"\n\nformat(Sys.time(), format = \"Heure : %X\")\n\n[1] \"Heure : 12:05:50 PM\"\n\n\nLa liste des formats de données est disponible sur la page d’aide de strptime() (accessible via help(strptime)).\n\n\n\n\n\n\nLes normes ISO8601 et RFC3339\n\n\n\nLes normes ISO8601 et RFC3339 sont des conventions de représentation des dates. Selon ces 2 normes, certains formats de dates sont acceptés ou non.\nPar exemple, voici quelques formats représentant la date du 24 mai 2023 à 8h43 (UTC) :\n\n\n\"2023-05-24T08:43:00Z\" ou \"2023-05-24T08:43:00+08:00\" sont des formats acceptés par ces 2 normes.\n\n\"2023-05-24t08:43:00z\" est un format accepté uniquement par la norme RFC3339.\n\n\"2023-05-24T08:43Z\" est un format accepté uniquement par la norme ISO8601.\n\nPour savoir quels formats sont acceptés par ces normes, une infographie est disponible ici : https://ijmacd.github.io/rfc3339-iso8601/.\nOn peut aussi utiliser le package parsedate qui permet de lire une date au format ISO8601\n\nlibrary(\"parsedate\")\n\nparse_iso_8601(\"2023-05-24T08:43:00+08:00\") # Accepté par ISO8601\n\n[1] \"2023-05-24 00:43:00 UTC\"\n\nparse_iso_8601(\"2023-05-24t08:43:00z\") # Refusé par ISO8601\n\n[1] NA\n\nparse_iso_8601(\"2023-05-24T08:43Z\") # Accepté par ISO8601\n\n[1] \"2023-05-24 08:43:00 UTC\"\n\n\n\n\n\n24.4.2 Paramètres régionaux\nPour obtenir des dates, d’autres fonctions existent comme :\n\n\nSys.Date() pour connaitre la date du jour,\n\nSys.time() pour connaitre l’horaire actuel (date + heure),\n\nSys.timezone() pour le fuseau horaire actuel.\n\nIl peut être utile de vouloir changer les paramètres régionaux sous R. Pour cela, il faut faire appel à la fonction Sys.setlocale()\n\n# Paramètres locaux en France\nSys.setlocale(\"LC_TIME\", \"fr_FR.UTF-8\")\n\nWarning in Sys.setlocale(\"LC_TIME\", \"fr_FR.UTF-8\"): OS reports request to set\nlocale to \"fr_FR.UTF-8\" cannot be honored\n\n\n[1] \"\"\n\nformat(Sys.time(), format = \"%c\")\n\n[1] \"Mon 08 Apr 2024 12:05:50 PM UTC\"\n\n# Paramètres locaux aux USA\nSys.setlocale(\"LC_TIME\", \"en_US\")\n\nWarning in Sys.setlocale(\"LC_TIME\", \"en_US\"): OS reports request to set locale\nto \"en_US\" cannot be honored\n\n\n[1] \"\"\n\nformat(Sys.time(), format = \"%c\")\n\n[1] \"Mon 08 Apr 2024 12:05:50 PM UTC\"\n\n\n\n\n\n\n\n\nNote\n\n\n\nLa fonction Sys.setlocale() a un impact sur l’affichage mais pas sur la valeur de l’objet. Ainsi, cela ne change pas le fuseau horaire (par exemple).", "crumbs": [ "Introduction", "Manipuler des données avec R",