Manipulation des graphiques
+ + + + + + + +1 Objectifs du TP
+L’objectif de ce TP vise à manipuler et utiliser à bon escient les différents +types de graphiques du package ggplot2 (et éventuellement des packages +associés).
++
2 Prérequis
+-
+
- Avoir installer
Rici.
+ - Avoir installer un IDE, par exemple
RStudio+ici.
+ - Créer un nouveau projet (
File, puisNew Projet) dans un dossier +sur votre ordinateur.
+ - Télécharger ici +les fichiers nécessaires au TD. +
Vous pouvez ensuite écrire vos codes soit :
+-
+
- En ouvrant un nouveau script
.R;
+ - En ouvrant le ouvrant le rapport Rmarkdown
4-td_graphiques - enonce. +Certains codes sont partiels et sont à compléter (indication???). +N’oubliez pas de modifier l’optioneval = TRUEpour que les +calculs puissent être réalisés.
+
+
3 Analyse du lien espérance de vie et GDP
+Dans ce TP, le jeu de données utilisé est le jeu gapminder du package
+gapminder. Il comprend des séries de données de PIB par habitant et d’espérance
+de vie par pays sur la période 1952-1990. Les observations ont lieu tous les 5 ans.
3.1 Données
+Dans un premier temps, il faut installer le package et le charger.
+ +Ce jeu de données contient 1706 observations où chaque ligne correspond à un
+pays country pour une année d’observation year.
On se concentre plus particulièrement sur les variables suivantes :
+-
+
lifeExp: l’espérance de vie ;
+gdpPercap: le PIB par habitant en dollars (conversion sur base 2005) ;
+pop: la taille de la population ;
+continent: le continent d’appartenance.
+
Pour plus détails, voir l’aide ?gapminder.
3.2 But de la visualisation
+Dans ce TP, on cherche un ensemble de visualisations permettant de commenter +le lien entre GDP et espérance de vie, globalement et à différents +échelles géographiques :
+-
+
- est-ce que les pays les plus développés en termes de PIB par habitant ont la +meilleure espérance de vie ? +
- peut-on identifier des dynamiques différentes en fonction des pays ou des continents ? +
- quels facteurs influencent également cette relation ? +
En vous répartissant en groupes de 3-4 étudiant.e.s., choisissez pour chaque groupe, +une des 4 visualisations suivantes :
+-
+
- visualisations utilisant des dot points. +
- visualisations permettant de présenter une distribution. +
- visualisations utilisant des cartes. +
3.3 Différentes visualisations
+3.3.1 Dot points
+En partant de cette visualisation, construire une ou plusieurs visualisations
+permettant d’analyser et de commenter les liens que vous
+pouvez observer entre gdpPercap et lifeExp.
3.3.2 Distributions
+En partant de cette visualisation, analyser et commenter les écarts +d’espérance de vie sur la planète. Vous pourrez aussi adopter d’autres +visualisations permettant de comparer des distributions.
+3.3.3 Cartes
+Afin de visualiser plus précisément les caractéristiques régionales de l’espérance +de vie et du PIB par habitant, nous décidons de faire des cartes.
+Il faut au préalable récupérer un fond de carte (ici de l’année 2016). Nous prenons
+les données gapminder de 2007.
library(giscoR)
+library(sf)
+
+world <- gisco_countries
+world <- subset(world, NAME_ENGL != "Antarctica") # Remove Antartica
+
+# Merge data
+world_df <- gapminder %>%
+ filter(year == "2007")
+world_df <- world %>%
+ left_join(world_df, by = c("NAME_ENGL" = "country"))
+
+ggplot(world_df) +
+ geom_sf(color = "black", fill = "grey") +
+ theme_void()En partant de la visualisation et des données ci-dessus, représenter et analyser +les disparités d’espérance +de vie et de revenus.
++
4 Analyse des accidents à vélo en France
+Dans ce TP, nous nous intéressons aux accidents corporels survenus sur une voie +ouverte à la circulation publique, impliquant au moins un véhicule et ayant fait +au moins une victime ayant nécessité des soins) pour la période 2005-2021.
+L’objectif est de créer un ensemble de visualisations qui permettront de mieux +comprendre accidentologie des cyclistes, ce qui trouve de nombreuses sources +d’applications notamment en assurance.
+Les données et documentation de ces données sont disponibles ici.
+4.1 Données
+Pour récupérer les données :
+-
+
- récupérer le fichier zippé “data_velo.zip”. +
- créer un dossier “data” à la racine de votre projet. +
- placer y le contenu du dossier zippé. +
Les données se chargent avec la commande suivante.
+library(readxl)
+library(readr)
+library(tidyverse)
+
+# main data
+accidents <- read_csv("data/accidentsVelo.csv",
+ col_types = cols(Num_Acc = col_double(),
+ date = col_date(format = "%Y-%m-%d")))
+
+# few ajustements
+accidents <- accidents %>%
+ mutate(mois = factor(mois),
+ jour = factor(jour),
+ dep = factor(dep),
+ agg = factor(agg),
+ grav = factor(grav),
+ situ = factor(situ))
+
+# correct some issues with variables `hrmn`
+issue <- which(str_length(accidents$hrmn) == 4)
+correct <- accidents$hrmn[issue]
+correct <- paste0("0", str_sub(correct, 1, 1), ":",
+ str_sub(correct, 2, 2), str_sub(correct, 4, 4))
+accidents$hrmn[issue] <- correct
+
+# Extract hour
+accidents <- accidents %>%
+ mutate(hour = paste(date, hrmn, sep = " ")) %>%
+ mutate(hour = strptime(hour, "%Y-%m-%d %H:%M")$hour)
+
+# mapping table for french departments
+departements_francais <- read_excel("data/departements-francais.xlsx")Ce jeu de données contient 74758 observations où chaque ligne correspond à un +accident.
+ +On se concentre plus particulièrement sur les variables suivantes :
+-
+
date,an,mois,jour,hour, : la date, année, mois, jour et heure de l’accident ;
+dep: le département ;
+agg: la location (1 = “hors agglomération”, 2 = “en agglomération”) ;
+lat: latitude (pas toujours renseignée) ;
+long: longitude (pas toujours renseignée) ;
+situ: la situation de l’accident (-1 = Non renseigné, 0 = Aucun, +1 = Sur chaussée, 2 = Sur bande d’arrêt d’urgence, 3 = Sur accotement, +4 = Sur trottoir, 5 = Sur piste cyclable, 6 = Sur autre voie spéciale, 8 = Autres) ;
+grav: la gravité (1 = Indemne, 2 = Tué, 3 = Blessé hospitalisé, +4 = Blessé léger).
+
D’autres variables intéressantes pourraient être étudiées, mais nous nous limitons +à celle-ci dans ce TP.
+4.2 But de la visualisation
+Dans ce TP, on cherche à réaliser une analyse exploratoire du jeu de données +afin d’identifier les relations importantes entre le nombre d’accidents et +ses déterminants :
+-
+
- est-ce que les accidents sont plus situés en agglomération ? +
- comment les accidents se répartissent dans l’espace et dans le temps ? +
- quels impacts ont les situations de circulation sur la gravité des accidents ? +
En vous répartissant en groupes de 3-4 étudiant.e.s., choisissez pour chaque groupe, +une des 4 visualisations suivantes :
+-
+
- visualisations utilisant des cartes statiques ou dynamiques. +
- visualisations utilisant des bar plots. +
L’anayse a réalisé ici est préliminaire, d’autres informations intéressantes +sont à extraire de ce jeu de données.
+4.3 Différentes visualisations
+4.3.1 Carte
+Carte dynamique
+-
+
Tracer une carte dynamique représentant la location des accidents (latitude, +longitude) en France sur toute la période en modulant la gravité.
+Faire deux variantes de cette carte, selon le caractère urbain ou non des accidents.
+Commenter ces figures.
+Quelles limites voyez-vous à cette représentation ?
+
Voici un premier code à trou pour vous aider. Pour alléger les temps de production +afficher uniquement quelques points. Vous pourrez ajouter l’ensemble du jeu de données +quand votre code sera finalisé.
+ +Carte choroplèthe
+-
+
Tracer une carte statistique de type chonoplèthe et représenter +le nombre d’accidents par département.
+Faire plusieurs variantes de cette carte selon la gravité des accidents.
+
Voici un premier code à trou pour vous aider.
+# get french map - level nuts2
+fr <- gisco_get_nuts(resolution = "20", country = ???, nuts_level = ???) %>%
+ mutate(res = "20M")
+
+# Remove white-space to avoid errors.
+library(stringr)
+departements_francais <- departements_francais %>%
+ mutate(dep_name = str_trim(dep_name))
+
+fr <- fr %>%
+ mutate(NUTS_NAME = str_trim(NUTS_NAME))
+
+# Merge and remove departements outside metropolitan France
+fr_map <- fr %>%
+ left_join(???) %>%
+ filter(! dep %in% c("971", ???) )
+
+# count the number of accidents
+df_acc <- ???
+
+# merge statistics with the map
+map_acc <- fr_map %>%
+ left_join(df_acc, by = c("dep" = "dep"))
+
+# map with all accidents
+g_map_acc <- ggplot(map_acc) +
+ geom_sf(???) +
+ scale_fill_viridis_c(option = "viridis") +
+ labs(title = "Carte des accidents de vélo",
+ subtitle = "Année 2005-2021",
+ fill = "Nombre d'accidents") +
+ theme_void()
+g_map_acc4.3.2 Bar plots
+-
+
On s’intéresse à la répartition par mois et horaires des accidents (variable +
an,hour,mois). Tracer des bar plots permettant de montrer la répartition +temporelle des accidents.
+On s’intéresse à l’impact des situations de circulation. Tracer des bar plots +permettant de montrer la répartition de la gravité des accidents selon ces situations.
+Voyez-vous une évolution sur la période 2005-2021 ?
+Réfléchir à des représentations alternatives pour les phénomènes périodiques.
+
Informations de session
+ +## R version 4.5.1 (2025-06-13)
+## Platform: aarch64-apple-darwin20
+## Running under: macOS Sequoia 15.6.1
+##
+## Matrix products: default
+## BLAS: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRblas.0.dylib
+## LAPACK: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.1
+##
+## locale:
+## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
+##
+## time zone: Europe/Paris
+## tzcode source: internal
+##
+## attached base packages:
+## [1] grid stats graphics grDevices utils datasets methods
+## [8] base
+##
+## other attached packages:
+## [1] lubridate_1.9.4 forcats_1.0.0 stringr_1.5.2 purrr_1.1.0
+## [5] tibble_3.3.0 tidyverse_2.0.0 readr_2.1.5 readxl_1.4.5
+## [9] sf_1.0-21 giscoR_0.6.1 gapminder_1.0.1 cowplot_1.2.0
+## [13] ggthemes_5.1.0 rmarkdown_2.29 tidyr_1.3.1 dplyr_1.1.4
+## [17] plotly_4.11.0 RColorBrewer_1.1-3 formattable_0.2.1 scales_1.4.0
+## [21] locfit_1.5-9.12 gridExtra_2.3 ggplot2_4.0.0 lattice_0.22-7
+##
+## loaded via a namespace (and not attached):
+## [1] gtable_0.3.6 xfun_0.52 bslib_0.9.0 htmlwidgets_1.6.4
+## [5] tzdb_0.5.0 vctrs_0.6.5 tools_4.5.1 generics_0.1.4
+## [9] parallel_4.5.1 proxy_0.4-27 pkgconfig_2.0.3 KernSmooth_2.23-26
+## [13] data.table_1.17.8 S7_0.2.0 lifecycle_1.0.4 compiler_4.5.1
+## [17] farver_2.1.2 htmltools_0.5.8.1 class_7.3-23 sass_0.4.10
+## [21] yaml_2.3.10 lazyeval_0.2.2 crayon_1.5.3 pillar_1.11.1
+## [25] jquerylib_0.1.4 classInt_0.4-11 cachem_1.1.0 tidyselect_1.2.1
+## [29] digest_0.6.37 stringi_1.8.7 bookdown_0.43 labeling_0.4.3
+## [33] rmdformats_1.0.4 fastmap_1.2.0 cli_3.6.5 magrittr_2.0.4
+## [37] e1071_1.7-16 withr_3.0.2 bit64_4.6.0-1 timechange_0.3.0
+## [41] httr_1.4.7 bit_4.6.0 cellranger_1.1.0 hms_1.1.3
+## [45] evaluate_1.0.4 knitr_1.50 viridisLite_0.4.2 rlang_1.1.6
+## [49] Rcpp_1.1.0 glue_1.8.0 DBI_1.2.3 vroom_1.6.6
+## [53] rstudioapi_0.17.1 jsonlite_2.0.0 R6_2.6.1 units_0.8-7
+