diff --git a/M2/Data Visualisation/tp1/3-td_ggplot2---enonce.html b/M2/Data Visualisation/tp1/3-td_ggplot2---enonce.html deleted file mode 100644 index ab69faf..0000000 --- a/M2/Data Visualisation/tp1/3-td_ggplot2---enonce.html +++ /dev/null @@ -1,5279 +0,0 @@ - - - - - - - - - - - Prise en main de ggplot2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
- - - -
-
- -
- - -
- - -

Prise en main de ggplot2

- - - - - - - -
-

1 Objectifs du TP

-

L’objectif de ce TP vise à se familiariser avec le package ggplot2 -de R. Il s’agit de faire des manipulations graphiques élémentaires et -d’interpréter les résultats de ces visualisations.

-

Dans un premier temps, vous pouvez suivre l’exemple introductif en -répliquant le code fourni. Dans un deuxième temps, il convient de -réaliser l’exercice point par point.

-
-
-

2 Prérequis

-
    -
  • Avoir installer R ici.
  • -
  • Avoir installer un IDE, par exemple RStudio -ici.
  • -
  • Créer un nouveau projet (File, puis New 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 3-td_ggplot2 - enonce. -Certains codes sont partiels et sont à compléter (indication ???). -N’oubliez pas de modifier l’option eval = TRUE pour que les -calculs puissent être réalisés.
  • -
-
-
-

3 Exemple introductif

-

Pour illustrer cette première partie, nous reprenons l’exemple -introductif fourni par @wickham2023 sur le jeu de données penguins du -package palmerpenguins. Ce jeu de données s’intèresse des mesures -réalisées sur des manchots sur 3 îles de l’archipelle Palmer.

-
-

3.1 Données

-

Dans un premier temps, il faut installer le package et le charger.

-
# install.packages("palmerpenguins")
-library(palmerpenguins)
-

Ce jeu de données contient 344 observations où chaque ligne correspond à -un individu.

-
paged_table(penguins, options = list(rows.print = 15))
-
- -
-

On se concentre plus particulièrement sur les variables suivantes :

-
    -
  • species : l’espèce de manchot ;
  • -
  • flipper_length_mm : la longueur de la nageoire en mm ;
  • -
  • body_mass_g : la masse en gramme.
  • -
-

Pour plus détails, voir l’aide ?penguins.

-
-
-

3.2 But de la visualisation

-

On s’intéresse au lien entre le masse et la taille des nageoires des -manchots :

-
    -
  • ceux dont les nageoires sont les plus longues sont-ils plus lourds -que les manchots aux nageoires courtes ?
  • -
  • si oui quelle est le type de relation (linéaire, croissante, -décroissante, …) ?
  • -
  • quels facteurs influencent également cette relation (lieu, l’espèce, -… ) ?
  • -
-

On cherche à recréer la figure suivante.

-

-
-
-

3.3 Création de la figure étape par étape

-
-

Etape 1 : Scatterplot

-

On commence par créer un scatterplot pour examiner la relation entre la -masse et la taille de la nageoire.

-
ggplot(
-  data = penguins,
-  mapping = aes(x = flipper_length_mm, y = body_mass_g)
-) +
-  geom_point()
-

-

Cette figure fait clairement apparaître une relation croissante et a -priori linéaire entre les deux variables.

-
-

Un message d’erreur apparaît pour deux individus avec des données -manquantes. Ils sont automatiquement exclus.

-
-
-
-

Etape 2 : Ajout d’élements esthétiques

-

On cherche à présent exhiber le rôle de l’espèce à partir d’une couleur. -Trois espèces sont présents, ainsi l’ajout de 3 couleurs à la figure ne -devrait pas surcharger le graphique.

-
ggplot(
-  data = penguins,
-  mapping = aes(x = flipper_length_mm, y = body_mass_g, color = species)
-) +
-  geom_point()
-

-

Compte tenu du nombre important de points, nous pouvons renforcer les -différences par espèce en ajoutant une variation de forme aux points.

-
ggplot(
-  data = penguins,
-  mapping = aes(x = flipper_length_mm, y = body_mass_g)
-) +
-  geom_point(
-    mapping = aes(
-      color = species,
-      shape = species
-    )
-  )
-

-
-
-

Etape 3 : Ajout d’une géométrie

-

Voyons à présent comment interpréter la nature de la relation entre -masse et longueur de la nageoire. Pour ce faire, nous essayons d’ajout -des courbes de tendance. Nous commençons par une tendance linéaire.

-
ggplot(
-  data = penguins,
-  mapping = aes(x = flipper_length_mm, y = body_mass_g)
-) +
-  geom_point(
-    mapping = aes(
-      color = species,
-      shape = species
-    )
-  ) +
-  geom_smooth(method = "lm")
-

-

La même figure peut être générée par espèce en déplaçant l’argument -color = species.

-
ggplot(
-  data = penguins,
-  mapping = aes(x = flipper_length_mm, y = body_mass_g, color = species)
-) +
-  geom_point(
-    mapping = aes(
-      shape = species
-    )
-  ) +
-  geom_smooth(method = "lm")
-

-

Les pentes entre les espèces ne sont pas si éloignées. Nous décidons que -conserver une relation commune pour toutes espèces. Pour tester si la -nature linéaire de la relation est a priori une bonne hypothèse, nous -considérons un lissage non-paramétrique.

-
ggplot(
-  data = penguins,
-  mapping = aes(x = flipper_length_mm, y = body_mass_g)
-) +
-  geom_point(
-    mapping = aes(
-      color = species,
-      shape = species
-    )
-  ) +
-  geom_smooth(method = "loess")
-

-

L’ajout d’un lissage non-paramétrique permet d’affiner l’adéquation aux -données, mais sans pour autant clairement remettre en cause la tendance -linéaire qui sera donc conservée.

-
-
-

Etape 4 : Ajout des titres et changement de thème

-

Afin de finaliser la figure, nous ajouter :

-
    -
  • un titre ;
  • -
  • un sous-titre ;
  • -
  • des titres aux axes ;
  • -
  • un titre à la légende.
  • -
-

Ces informations sont ajoutées avec labs().

-

De plus, nous modifions le thème avec la commande theme_bw().

-
ggplot(
-  data = penguins,
-  mapping = aes(x = flipper_length_mm, y = body_mass_g)
-) +
-  geom_point(aes(color = species, shape = species)) +
-  geom_smooth(method = "lm") +
-  labs(
-    title = "Masse et taille de la nageoire",
-    subtitle = "Manchots d'Adelie, a
-    jugulaire et de Gentoo",
-    x = "Longueur de la nageoire (mm)",
-    y = "Masse (g)",
-    color = "Espece",
-    shape = "Espece"
-  ) +
-  scale_color_colorblind() +
-  theme_bw()
-

-
-
-
-
-
-

4 Exercice

-
-

4.1 Données

-

Nous travaillons avec les jeux de données FreMTPL2freq et -FreMTPL2sev du package Casdatasets. Ces données ont été -préalablement pré-formatées et regroupées.

-

Ce jeux de données regroupent les caractéristiques de 677 991 polices de -responsabilité civile automobile, observées principalement sur une -année. Dans les données regroupées, on dispose des numéros de sinistre -par police, des montants de sinistre correspondants, des -caractéristiques du risque et du nombre de sinistres.

-

On présente ci-dessous un aperçu des données.

-
# Folds
-fold <- getwd()
-
-# Load data
-load(paste0(fold, "/data/datafreMPTL.RData"))
-# load(paste0(fold, "/M2/Data Visualisation/tp1", "/data/datafreMPTL.RData"))
-paged_table(dat, options = list(rows.print = 15))
-
- -
-

Le tableau suivant présente une définition des variables.

-
kableExtra::kable(
-  data.frame(
-    Variable = c(
-      "IDpol",
-      "Exposure",
-      "VehPower",
-      "VehAge",
-      "DrivAge",
-      "BonusMalus",
-      "VehBrand",
-      "VehGas",
-      "Area",
-      "Density",
-      "Region",
-      "ClaimTotal",
-      "ClaimNb"
-    ),
-    Description = c(
-      "Identifiant de la police",
-      "Exposition au risque",
-      "Puissance du véhicule",
-      "Age du véhicule en année",
-      "Age du conducteur en année",
-      "Coefficient de bonus-malus",
-      "Marque du véhicule",
-      "Carburant du véhicule",
-      "Catégorie correspondant à la densité de la zone assurée",
-      "Densité de population",
-      "Region (selon la classication 1970-2015)",
-      "Montant total des sinistres",
-      "Nombre de sinistres sur la période"
-    ),
-    Type = c(
-      rep("Reel", 2),
-      rep("Entier", 4),
-      rep("Cat", 3),
-      "Entier",
-      "Cat",
-      rep("Reel", 2)
-    )
-  ),
-  booktabs = TRUE
-)
- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
VariableDescriptionType
IDpolIdentifiant de la policeReel
ExposureExposition au risqueReel
VehPowerPuissance du véhiculeEntier
VehAgeAge du véhicule en annéeEntier
DrivAgeAge du conducteur en annéeEntier
BonusMalusCoefficient de bonus-malusEntier
VehBrandMarque du véhiculeCat
VehGasCarburant du véhiculeCat
AreaCatégorie correspondant à la densité de la zone assuréeCat
DensityDensité de populationEntier
RegionRegion (selon la classication 1970-2015)Cat
ClaimTotalMontant total des sinistresReel
ClaimNbNombre de sinistres sur la périodeReel
-
# Short summary
-str(dat)
-
## 'data.frame':    135601 obs. of  13 variables:
-##  $ IDpol     : num  5089457 2215917 2202141 1077071 3044896 ...
-##  $ Exposure  : num  0.21 0.25 1 0.07 0.09 0.08 1 1 0.49 0.8 ...
-##  $ VehPower  : int  7 5 7 7 7 7 13 4 7 4 ...
-##  $ VehAge    : int  10 2 6 4 7 4 3 14 8 2 ...
-##  $ DrivAge   : int  36 40 79 42 45 53 53 32 31 42 ...
-##  $ BonusMalus: int  50 85 54 57 100 53 50 60 71 50 ...
-##  $ VehBrand  : Factor w/ 11 levels "B1","B2","B3",..: 1 3 10 2 7 2 1 2 3 9 ...
-##  $ VehGas    : Factor w/ 2 levels "Diesel","Regular": 2 2 1 1 1 1 2 2 2 2 ...
-##  $ Area      : Factor w/ 6 levels "A","B","C","D",..: 5 5 3 5 6 3 5 4 5 2 ...
-##  $ Density   : int  8 8 6 8 10 5 8 7 9 4 ...
-##  $ Region    : Factor w/ 21 levels "Alsace","Aquitaine",..: 21 7 7 21 12 20 7 16 21 7 ...
-##  $ ClaimTotal: num  0 0 0 0 0 0 0 0 0 0 ...
-##  $ ClaimNb   : num  0 0 0 0 0 0 0 0 0 0 ...
-

Pour plus de détails, consulter l’aide ?CASdatasets::freMTPL2freq.

-
-
-
-

4.2 But de la visualisation

-

Nous effectuons une première analyse descriptive de données et cherchons -à étudier la relation entre :

-
    -
  • la fréquence, calculée avec les variables ClaimNb et Exposure -(période d’exposition en année).
  • -
  • les variables Area et DrivAge.
  • -
-

Le but de la visualisation est de fait ressortir les liens entre la -fréquence et ces deux variables.

-
-

Etape 1 : Visualisation de la fréquence et de l’exposition

-
-

A partir des données dat :

-
    -
  • afficher les statistiques descriptives du nombre de sinistres -ClaimNb et de la variable Exposure ;
  • -
  • afficher des histogrammes pour visualiser leur distribution ;
  • -
  • afficher les figures côte a côte avec la fonction plot_grid().
  • -
-

Essayer de choisir un thème de couleur et un écartement des barres de -l’histogramme facilitant sa lisibilité.

-
-
-

On pourra développer une fonction qui utilise geom_histogram() sous la -package ggplot2.

-
-
# Descriptive statistics
-summary(dat$ClaimNb)
-
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-## 0.00000 0.00000 0.00000 0.03919 0.00000 3.00000
-
summary(dat$Exposure)
-
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-## 0.002732 0.170000 0.490000 0.527782 0.990000 1.000000
-
p1 <- ggplot(dat) +
-  geom_histogram(
-    aes(x = ClaimNb),
-    binwidth = 0.25,
-    fill = "lightblue",
-    color = "black"
-  ) +
-  labs(
-    title = "Distribution du nombre de sinistres",
-    x = "Nombre de sinistres",
-    y = "Effectif"
-  ) +
-  theme_bw()
-
-p2 <- ggplot(dat) +
-  geom_histogram(
-    aes(x = Exposure),
-    binwidth = 0.05,
-    fill = "lightblue",
-    color = "black"
-  ) +
-  labs(title = "Exposition", x = "Nombre de sinistres", y = "Effectif") +
-  theme_bw()
-
-plot_grid(p1, p2, ncol = 2)
-

-
-
-

Etape 2 : Calculer la fréquence

-
-

Construire un tableau présentant l’exposition cumulée et le nombre -d’observations avec 0 sinistre, 1 sinistre, …

-
-
dat |>
-  group_by(ClaimNb) |>
-  summarise(n = n(), Exposure = round(sum(Exposure), 0)) |>
-  kable(
-    col_names = c(
-      "Nombre de sinistres",
-      "Nombres d'observations",
-      "Exposition totale"
-    )
-  ) |>
-  kable_styling(full_width = FALSE)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-ClaimNb - -n - -Exposure -
-0 - -130563 - -68095 -
-1 - -4771 - -3294 -
-2 - -258 - -172 -
-3 - -9 - -6 -
-
pf_freq <- round(sum(dat$ClaimNb) / sum(dat$Exposure), 4)
-pf_freq
-
## [1] 0.0743
-

Ce calcul de fréquence sera ensuite utile pour l’affichage des -résultats.

-
-
-

Etape 3 : Calculer l’exposition et la fréquence par variable

-
-

Pour la variable DrivAge, présenter :

-
    -
  1. un histogramme de l’exposition en fonction de cette variable.
  2. -
  3. un histogramme de la fréquence moyenne de sinistres en fonction de -cette variable.
  4. -
-

Remplacer ensuite le second histogramme par un scatter plot avec une -courbe de tendance. Est-ce plus clair ?

-

Indice

-

On pourra développer une fonction qui utilise geom_bar() sous la -package ggplot2.

-
-
# On regroupe selon les modalites de la DrivAge
-# l'exposition, le nombre de sinistres et la frequence
-df_plot <- dat |>
-  group_by(DrivAge) |>
-  summarize(
-    exp = sum(Exposure),
-    nb_claims = sum(ClaimNb),
-    freq = sum(ClaimNb) / sum(Exposure)
-  )
-
-# Histogramme exposition
-p1 <- ggplot(df_plot, aes(x = DrivAge, y = exp)) +
-  geom_bar(stat = "identity", fill = "grey", color = "black", alpha = 0.5) +
-  labs(x = "Age du conducteur", y = "Exposition en années") +
-  theme_bw()
-
-# Histogramme frequence
-p2 <- ggplot(df_plot, aes(x = DrivAge, y = freq)) +
-  geom_bar(stat = "identity", fill = "grey", color = "black", alpha = 0.5) +
-  labs(x = "Age du conducteur", y = "Frequence") +
-  theme_bw()
-
-plot_grid(p1, p2, labels = c("A", "B"), label_size = 12)
-
df_plot <- dat |>
-  group_by(DrivAge) |>
-  summarize(
-    exp = sum(Exposure),
-    nb_claims = sum(ClaimNb),
-    freq = sum(ClaimNb) / sum(Exposure)
-  )
-
-# Scatter plot frequence
-p3 <- ggplot(df_plot, aes(x = DrivAge, y = freq)) +
-  geom_point() +
-  geom_smooth() +
-  labs(x = "Age du conducteur", y = "Frequence")  +
-  theme_bw()
-p3
-

-
-
-

Etape 4 : Examiner l’intéraction avec une autre variable

-
-

A partir du scatter plot réalisé à l’étape précédente, distinguer les -évolutions de fréquence en fonction de DrivAge et de BonusMalus.

-

Ce graphique vous paraît-il transmettre un message clair ? Proposez des -améliorations en modifiant les variables DrivAge et BonusMalus.

-
-
# On regroupe selon les modalites de la DrivAge et de Area
-# l'exposition, le nombre de sinistres et la frequence
-df_plot <- dat |>
-  group_by(DrivAge, BonusMalus) |>
-  summarize(
-    exp = sum(Exposure),
-    nb_claims = sum(ClaimNb),
-    freq = sum(ClaimNb) / sum(Exposure)
-  )
-
-p4 <- ggplot(df_plot, aes(x = DrivAge, y = freq, color = BonusMalus)) +
-  geom_point() +
-  geom_smooth() +
-  labs(x = "Age du conducteur", y = "Frequence", color = "Bonus-Malus") +
-  theme_bw()
-p4
-

-

On propose 4 ajustements :

-
    -
  • Exclure les âges extrêmes au-delà de 85 ans pour lesquels -l’exposition est très faible.
  • -
  • Faire des classes d’âges.
  • -
  • Limiter le Bonus-Malus à 125.
  • -
  • Faire des classes de Bonus-Malus.
  • -
-
# Classes d'âges pour Bonus-Malus
-lim_classes <- c(50, 75, 100, 125, Inf)
-
-# Exclusion des donnees "extremes" et faire les regroupement
-df_plot <- dat |>
-  filter(DrivAge <= 85, BonusMalus <= 125) |>
-  # regroupement en classes d'ages de 5 ans
-  mutate(DrivAge = ceiling(pmin(DrivAge, 85) / 5) * 5) |>
-  mutate(
-    BonusMalus = cut(BonusMalus, breaks = lim_classes, include.lowest = TRUE)
-  )
-
-# On regroupe selon les modalites de la DrivAge et de Area
-# l'exposition, le nombre de sinistres et la frequence
-df_plot <- df_plot |>
-  group_by(DrivAge, BonusMalus) |>
-  summarize(
-    exp = sum(Exposure),
-    nb_claims = sum(ClaimNb),
-    freq = sum(ClaimNb) / sum(Exposure)
-  )
-
-# Scatter plot frequence
-p5 <- ggplot(df_plot, aes(x = DrivAge, y = freq, color = BonusMalus)) +
-  geom_point() +
-  geom_smooth() +
-  labs(x = "Age du conducteur", y = "Frequence", color = "Bonus-Malus") +
-  theme_bw()
-p5
-

-
-
-

Conclure

-
-

Comparer à présenter comment l’exposition se répartie entre âge et -bonus-malus.

-
-
# Histogramme plot frequence
-p6 <- ggplot(df_plot, aes(x = DrivAge, y = exp, fill = BonusMalus)) +
-  geom_bar(stat = "identity", color = "black", alpha = 0.5) +
-  scale_x_continuous(breaks = seq(20, 85, 20), limits = c(20, 85)) +
-  labs(x = "Age du conducteur", y = "Exposition en années") +
-  theme_bw()
-
-
-# Ajustement des legendes pour faire un graphique multiple
-p5 <- p5 +
-  theme(
-    legend.position = "bottom"
-  ) +
-  labs(color = "BonusMalus")
-p6 <- p6 +
-  theme(
-    legend.position = "bottom"
-  ) +
-  labs(fill = "BonusMalus")
-
-# Creation d'un graphique avec deux figures et une légende commune
-plot_grid(p6, p5, ncol = 2)
-

-
-
-

Bonus - Analyse des couples

-
-

En traitant toutes les variables comme des variables catégorielles, -analyser graphiquement comment évolue la fréquence de sinistres selon -les couples de variables.

-

Compléter pour cela la fonction suivante et appliquer la à différents -couples.

-
# Fonction d'analyse bivariée
-# df : nom du data.frame
-# var1 : nom de la variable explicative 1
-# var2 : nom de la variable explicative 2
-plot_pairwise_disc <- function(df, var1, var2) {
-  df <- rename(df, "varx" = all_of(var1), "vary" = all_of(var2))
-
-  # replace variable vname by the binning variable
-  if (is.numeric(df$varx)) {
-    df <- df |>
-      mutate(varx = ntile(varx, 5))
-  }
-
-  if (is.numeric(df$vary)) {
-    df <- df |>
-      mutate(vary = ntile(vary, 5), vary = factor(vary))
-  }
-
-  df |>
-    group_by(varx, vary) |>
-    summarize(exp = sum(Exposure),
-              nb_claims = sum(ClaimNb),
-              freq = sum(ClaimNb) / sum(Exposure), .groups = "drop") |>
-    ggplot(aes(x = varx, y = freq, colour = vary, group = vary), alpha = 0.3) +
-    geom_point() + geom_line() + theme_bw() +
-    labs(x = var1,  y = "Frequence", colour = var2)
-}
-
p1 <- plot_pairwise_disc(dat, "DrivAge", "BonusMalus")
-p2 <- plot_pairwise_disc(dat, "VehAge", "BonusMalus")
-p3 <- plot_pairwise_disc(dat, "BonusMalus", "VehBrand")
-p4 <- plot_pairwise_disc(dat, "VehBrand", "Area")
-p5 <- plot_pairwise_disc(dat, "BonusMalus", "VehGas")
-p6 <- plot_pairwise_disc(dat, "BonusMalus", "Area")
-p7 <- plot_pairwise_disc(dat, "DrivAge", "Area")
-p8 <- plot_pairwise_disc(dat, "VehPower", "VehGas")
-grid.arrange(p1, p2, p3, p4, p5, p6, p7, p8, ncol = 2)
-

-
-
-
-
-
-

Informations de session

-

sessionInfo() -```

-
-
-

5 Références

-

:::

-
- - - -
-
-
-
-
- - - - - - - - - - - - diff --git a/M2/Data Visualisation/tp1/3-td_ggplot2 - enonce.Rmd b/M2/Data Visualisation/tp1/tp1.Rmd similarity index 99% rename from M2/Data Visualisation/tp1/3-td_ggplot2 - enonce.Rmd rename to M2/Data Visualisation/tp1/tp1.Rmd index 1be0a90..87e3fd5 100644 --- a/M2/Data Visualisation/tp1/3-td_ggplot2 - enonce.Rmd +++ b/M2/Data Visualisation/tp1/tp1.Rmd @@ -670,8 +670,8 @@ grid.arrange(p1, p2, p3, p4, p5, p6, p7, p8, ncol = 2) # Informations de session {.unnumbered} +```{r} sessionInfo() ``` -# Références -::: \ No newline at end of file +# Références \ No newline at end of file diff --git a/M2/Data Visualisation/tp2/4-td_graphiques---enonce.html b/M2/Data Visualisation/tp2/4-td_graphiques---enonce.html deleted file mode 100644 index 7f69d76..0000000 --- a/M2/Data Visualisation/tp2/4-td_graphiques---enonce.html +++ /dev/null @@ -1,4694 +0,0 @@ - - - - - - - - - - - Manipulation des graphiques - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
-
-
- - - -
-
- -
- - -
- - -

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 R ici.
  • -
  • Avoir installer un IDE, par exemple RStudio -ici.
  • -
  • Créer un nouveau projet (File, puis New 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’option eval = TRUE pour 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.

-
# install.packages("gapminder")
-library(gapminder)
-

Ce jeu de données contient 1706 observations où chaque ligne correspond à un -pays country pour une année d’observation year.

-
paged_table(gapminder, options = list(rows.print = 15))
-
- -
-

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.

-
-
ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp)) +
-  geom_point()
-

-
-
-

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.

-
-
ggplot(data = gapminder, aes(x = lifeExp)) + 
-    geom_density()
-

-
-
-

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 :

-
    -
  1. récupérer le fichier zippé “data_velo.zip”.
  2. -
  3. créer un dossier “data” à la racine de votre projet.
  4. -
  5. placer y le contenu du dossier zippé.
  6. -
-

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.

-
paged_table(accidents, options = list(rows.print = 15))
-
- -
-

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

-
-
    -
  1. Tracer une carte dynamique représentant la location des accidents (latitude, -longitude) en France sur toute la période en modulant la gravité.

  2. -
  3. Faire deux variantes de cette carte, selon le caractère urbain ou non des accidents.

  4. -
  5. Commenter ces figures.

  6. -
  7. Quelles limites voyez-vous à cette représentation ?

  8. -
-
-

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é.

-
library(mapview)
-library(sf)
-
-## Remove NA
-df_map_dyn <- accidents %>%
-  filter(???) %>%
-  na.omit()
-
-# Make map and print it
-mymap <- st_as_sf(???)
-mapview(mymap, cex = 2, layer.name = "Gravité",
-        zcol = "grav",legend = TRUE )
-
-
-

Carte choroplèthe

-
-
    -
  1. Tracer une carte statistique de type chonoplèthe et représenter -le nombre d’accidents par département.

  2. -
  3. Faire plusieurs variantes de cette carte selon la gravité des accidents.

  4. -
-
-

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_acc
-
-
-
-

4.3.2 Bar plots

-
-
    -
  1. 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.

  2. -
  3. 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.

  4. -
  5. Voyez-vous une évolution sur la période 2005-2021 ?

  6. -
  7. Réfléchir à des représentations alternatives pour les phénomènes périodiques.

  8. -
-
-
-
-
-
-

Informations de session

-
sessionInfo()
-
## 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
-
- - - -
-
-
-
-
- - - - - - - - - - - - diff --git a/M2/Data Visualisation/tp2/4-td_graphiques - enonce.Rmd b/M2/Data Visualisation/tp2/tp2.Rmd similarity index 56% rename from M2/Data Visualisation/tp2/4-td_graphiques - enonce.Rmd rename to M2/Data Visualisation/tp2/tp2.Rmd index 6f87932..f720d75 100644 --- a/M2/Data Visualisation/tp2/4-td_graphiques - enonce.Rmd +++ b/M2/Data Visualisation/tp2/tp2.Rmd @@ -32,17 +32,16 @@ knitr::opts_chunk$set( options(encoding = "UTF-8") ``` - ```{r, echo = FALSE, fig.keep= 'none'} # Chargement des librairies graphiques library(lattice) library(grid) library(ggplot2) -require(gridExtra) +require(gridExtra) library(locfit) library(scales) library(formattable) -library(RColorBrewer) +library(RColorBrewer) library(plotly) library(dplyr) library(tidyr) @@ -54,11 +53,11 @@ library(cowplot) # 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). +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). ---- +------------------------------------------------------------------------ # Prérequis @@ -73,32 +72,31 @@ associés). 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'option `eval = TRUE` pour que les - calculs puissent être réalisés. - - ---- +- 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'option + `eval = TRUE` pour que les calculs puissent être réalisés. +------------------------------------------------------------------------ # 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. +**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. ## Données -Dans un premier temps, il faut installer le package et le charger. +Dans un premier temps, il faut installer le package et le charger. ```{r} # install.packages("gapminder") #nolint library(gapminder) ``` -Ce jeu de données contient 1706 observations où chaque ligne correspond à un -pays `country` pour une année d'observation `year`. +Ce jeu de données contient 1706 observations où chaque ligne correspond +à un pays `country` pour une année d'observation `year`. ```{r} paged_table(gapminder, options = list(rows.print = 15)) @@ -107,25 +105,27 @@ paged_table(gapminder, options = list(rows.print = 15)) 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) ; +- `gdpPercap` : le PIB par habitant en dollars (conversion sur + base 2005) ; - `pop` : la taille de la population ; -- `continent` : le continent d'appartenance. +- `continent` : le continent d'appartenance. Pour plus détails, voir l'aide `?gapminder`. ## 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 : +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 ? +- 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 : +**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. @@ -136,47 +136,40 @@ une des 4 visualisations suivantes : ### Dot points ::: exercise-box - - -En partant de cette visualisation, construire une ou plusieurs visualisations -permettant d'analyser et de commenter les liens que vous +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`. - ::: ```{r} -ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp)) + +ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp)) + geom_point() ``` - ### Distributions ::: exercise-box - - 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. - +d'espérance de vie sur la planète. Vous pourrez aussi adopter d'autres +visualisations permettant de comparer des distributions. ::: ```{r} -ggplot(data = gapminder, aes(x = lifeExp)) + +ggplot(data = gapminder, aes(x = lifeExp)) + geom_density() ``` - ### 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. +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. +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. ```{r} -library(giscoR) +library(giscoR) library(sf) world <- gisco_countries @@ -194,34 +187,33 @@ ggplot(world_df) + ``` ::: exercise-box - - -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. +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. ::: ---- +------------------------------------------------------------------------ # 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. +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. +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](https://www.data.gouv.fr/fr/datasets/bases-de-donnees-annuelles-des-accidents-corporels-de-la-circulation-routiere-annees-de-2005-a-2021/). +Les données et documentation de ces données sont disponibles +[ici](https://www.data.gouv.fr/fr/datasets/bases-de-donnees-annuelles-des-accidents-corporels-de-la-circulation-routiere-annees-de-2005-a-2021/). ## Données Pour récupérer les données : -1. récupérer le fichier zippé "data_velo.zip". -2. créer un dossier "data" à la racine de votre projet. -3. placer y le contenu du dossier zippé. +1. récupérer le fichier zippé "data_velo.zip". +2. créer un dossier "data" à la racine de votre projet. +3. placer y le contenu du dossier zippé. Les données se chargent avec la commande suivante. @@ -231,23 +223,29 @@ 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"))) +path <- getwd() +accidents <- read_csv( + paste0( + path, + "/data/accidentsVelo.csv"), + col_types = cols(Num_Acc = col_double(), date = col_date(format = "%Y-%m-%d")) +) -# few ajustements +# few ajustements accidents <- accidents |> - mutate(mois = factor(mois), - jour = factor(jour), - dep = factor(dep), - agg = factor(agg), - grav = factor(grav), - situ = factor(situ)) + 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), ":", +correct <- paste0("0", str_sub(correct, 1, 1), ":", str_sub(correct, 2, 2), str_sub(correct, 4, 4)) accidents$hrmn[issue] <- correct @@ -257,11 +255,16 @@ accidents <- accidents |> mutate(hour = strptime(hour, "%Y-%m-%d %H:%M")$hour) # mapping table for french departments -departements_francais <- read_excel("data/departements-francais.xlsx") +departements_francais <- read_excel( + paste0( + path, + "/data/departements-francais.xlsx"), + col_types = c("text", "text", "text") +) ``` -Ce jeu de données contient 74758 observations où chaque ligne correspond à un -accident. +Ce jeu de données contient 74758 observations où chaque ligne correspond +à un accident. ```{r} paged_table(accidents, options = list(rows.print = 15)) @@ -269,90 +272,90 @@ paged_table(accidents, options = list(rows.print = 15)) 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 ; +- `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") ; +- `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). +- `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. +D'autres variables intéressantes pourraient être étudiées, mais nous +nous limitons à celle-ci dans ce TP. ## 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 : +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 ? +- 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 : +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. +L'anayse a réalisé ici est préliminaire, d'autres informations +intéressantes sont à extraire de ce jeu de données. ## Différentes visualisations ### Carte -#### Carte dynamique {-} +#### Carte dynamique {.unnumbered} ::: exercise-box +1. Tracer une carte dynamique représentant la location des accidents + (latitude, longitude) en France sur toute la période en modulant la + gravité. +2. Faire deux variantes de cette carte, selon le caractère urbain ou + non des accidents. -1. Tracer une carte dynamique représentant la location des accidents (latitude, -longitude) en France sur toute la période en modulant la gravité. - -2. Faire deux variantes de cette carte, selon le caractère urbain ou non des accidents. - -3. Commenter ces figures. - -4. Quelles limites voyez-vous à cette représentation ? +3. Commenter ces figures. +4. 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é. +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é. -```{r, eval = F} +```{r, eval=F} library(mapview) library(sf) ## Remove NA df_map_dyn <- accidents |> - filter(???) |> + filter(!is.na(lat) & !is.na(long)) |> na.omit() # Make map and print it -mymap <- st_as_sf(???) +mymap <- st_as_sf() mapview(mymap, cex = 2, layer.name = "Gravité", zcol = "grav",legend = TRUE ) ``` - -#### Carte choroplèthe {-} +#### Carte choroplèthe {.unnumbered} ::: exercise-box +1. Tracer une carte statistique de type chonoplèthe et représenter le + nombre d'accidents par département. - -1. Tracer une carte statistique de type chonoplèthe et représenter -le nombre d'accidents par département. - -2. Faire plusieurs variantes de cette carte selon la gravité des accidents. - +2. Faire plusieurs variantes de cette carte selon la gravité des + accidents. ::: Voici un premier code à trou pour vous aider. @@ -396,23 +399,22 @@ g_map_acc ### Bar plots ::: exercise-box +1. 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. +2. 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. -1. 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. - -2. 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. - -3. Voyez-vous une évolution sur la période 2005-2021 ? - -4. Réfléchir à des représentations alternatives pour les phénomènes périodiques. +3. Voyez-vous une évolution sur la période 2005-2021 ? +4. Réfléchir à des représentations alternatives pour les phénomènes + périodiques. ::: +# Informations de session {.unnumbered} -# Informations de session {-} ```{r} sessionInfo() -``` +``` \ No newline at end of file