Semaine 02 - Premiers pas avec R, RStudio et Quarto

MQT-2101 - Analyse et modélisation des données

Objectifs de la séance

  • Préparer un environnement de travail dans RStudio.
  • Organiser une analyse dans un projet reproductible.
  • Importer et inspecter un fichier CSV.
  • Diagnostiquer les valeurs manquantes.
  • Produire un tableau, un graphique et une trace finale Quarto.

Le fil conducteur

La semaine 02 transforme la lecture descriptive de la semaine 01 en démarche reproductible.

Le parcours guidé construit un mini-rapport Quarto sur les ventes. Les exercices appliquent ensuite la démarche à un autre fichier, sur les retours et les délais.

Ces notes donnent la vue d’ensemble. La page des démonstrations reprend les mêmes gestes avec le code complet, les sorties et leur interprétation.

Les six capsules

Capsule Geste principal Trace finale préparée
1 Préparer l’environnement note de vérification
2 Se repérer dans RStudio rôle de deux zones
3 Organiser un projet justification des chemins relatifs
4 Importer et inspecter code, dimensions, unité d’observation
5 Résumer et diagnostiquer diagnostic et tableau descriptif
6 Produire le rapport HTML, constats et question finale

De la donnée au rapport

CSV

les données de départ

QMD

le texte et le code

HTML

le rapport à lire

Projet minimal

projet-semaine-02/
  data/
    ventes_operations_quebec.csv
  projet-semaine-02.Rproj
  rapport_semaine_02.qmd

Un projet garde ensemble les données, le code, les résultats et l’interprétation.

Pourquoi cette structure suffit

  • Le dossier data/ contient les fichiers importés.
  • Le fichier .qmd contient le texte et le code; le HTML affiche les résultats calculés.
  • Les chemins relatifs évitent de dépendre d’un ordinateur précis.
  • Le rapport HTML peut être régénéré à partir du même code.

Une analyse reproductible ne repose pas sur des clics invisibles. Elle repose sur des fichiers organisés et sur du code que l’on peut relire.

Charger et importer

library(tidyverse)
library(janitor)
library(lubridate)
library(scales)

Le code suppose que le .qmd est à la racine du projet et que le CSV se trouve dans data/.

Importer le tableau

ventes_operations <- readr::read_csv(
  "data/ventes_operations_quebec.csv",
  show_col_types = FALSE
) |>
  clean_names()

Inspecter le tableau

glimpse(ventes_operations)
Rows: 24
Columns: 12
$ mois                  <date> 2025-01-01, 2025-01-01, 2025-01-01, 2025-01-01,…
$ mois_nom              <chr> "janvier", "janvier", "janvier", "janvier", "fév…
$ succursale            <chr> "Montréal", "Québec", "Sherbrooke", "Trois-Riviè…
$ region                <chr> "Montréal", "Capitale-Nationale", "Estrie", "Mau…
$ surface_m2            <dbl> 540, 420, 360, 335, 540, 420, 360, 335, 540, 420…
$ campagne_locale       <chr> "non", "oui", "non", "non", "non", "non", "oui",…
$ canal_principal       <chr> "magasin", "magasin", "web", "web", "web", "maga…
$ clients               <dbl> 2254, 1858, 1506, 1199, 2162, 1682, 1585, 1458, …
$ panier_moyen          <dbl> 53.11, 59.40, 63.31, 68.21, 66.53, 55.20, 58.44,…
$ ventes                <dbl> 119710, 110365, 95345, 81784, 143838, 92846, 926…
$ delai_livraison_jours <dbl> 2.2, 3.8, 4.5, 3.5, 3.6, 1.8, 3.5, 2.6, NA, 3.9,…
$ satisfaction          <dbl> 8.3, 8.6, 7.3, 8.1, NA, 7.9, 7.8, 8.0, 7.7, 7.9,…

Lire la sortie de glimpse()

  • Rows indique le nombre d’observations.
  • Columns indique le nombre de variables.
  • Le type de chaque variable aide à prévoir les opérations possibles.
  • Les premières valeurs servent à reconnaître le contenu réel du tableau.

La première question à poser est toujours la même : que représente une ligne du tableau?

Inspecter avant de calculer

  • Que représente une ligne?
  • Quelles variables sont numériques?
  • Quelles variables sont catégorielles?
  • Quelle variable décrit la période?
  • Quels indicateurs semblent utiles pour une décision?

Préparer les variables

ventes_preparees <- ventes_operations |>
  mutate(
    mois = ymd(mois),
    succursale = factor(succursale),
    region = factor(region),
    campagne_locale = factor(campagne_locale),
    canal_principal = factor(canal_principal)
  )

Vérifier la structure préparée

ventes_preparees |>
  summarise(
    nb_lignes = n(),
    nb_succursales = n_distinct(succursale),
    nb_regions = n_distinct(region),
    nb_canaux = n_distinct(canal_principal),
    mois_min = min(mois, na.rm = TRUE),
    mois_max = max(mois, na.rm = TRUE)
  )

Le tableau contient 24 lignes, 4 succursales, 4 régions et 3 canaux, de janvier à juin 2025.

Pourquoi préparer les variables

  • Une date doit être reconnue comme une date pour être triée et filtrée.
  • Une variable catégorielle sert à former des groupes.
  • Une variable numérique sert aux calculs comme les sommes et les moyennes.
  • Une transformation écrite dans le code reste vérifiable.

Préparer les variables ne veut pas dire changer les données au hasard. Cela veut dire rendre explicite la façon dont chaque colonne sera utilisée.

Diagnostiquer les valeurs manquantes

diagnostic_manquants <- ventes_preparees |>
  summarise(across(everything(), \(x) sum(is.na(x)))) |>
  pivot_longer(
    cols = everything(),
    names_to = "variable",
    values_to = "valeurs_manquantes"
  ) |>
  filter(valeurs_manquantes > 0)

diagnostic_manquants
# A tibble: 2 × 2
  variable              valeurs_manquantes
  <chr>                              <int>
1 delai_livraison_jours                  1
2 satisfaction                           2

Une valeur manquante doit être signalée avant d’interpréter un résumé ou un graphique.

Interpréter le diagnostic

  • Le diagnostic indique quelles variables sont incomplètes.
  • Il indique combien de valeurs sont absentes.
  • Il ne dit pas automatiquement quoi supprimer ou corriger.
  • Il oblige à ajouter une précaution dans l’interprétation.

Dans ce module, le bon réflexe est de signaler les valeurs manquantes et de rester prudent. Les stratégies de traitement plus avancées viendront plus tard.

Résumer par succursale

resume_succursales <- ventes_preparees |>
  group_by(succursale, region) |>
  summarise(
    ventes_totales = sum(ventes),
    clients_totaux = sum(clients),
    panier_moyen = ventes_totales / clients_totaux,
    nb_mois_satisfaction = sum(!is.na(satisfaction)),
    satisfaction_moyenne = mean(satisfaction, na.rm = TRUE),
    .groups = "drop"
  ) |>
  arrange(desc(ventes_totales))

Le tableau obtenu

Succursale Ventes ($ CA) Panier ($ CA) Mois utilisés Satisfaction (/10)
Montréal 831 777 $ 59,17 $ 5 8,08
Québec 677 971 $ 59,14 $ 5 8,06
Sherbrooke 589 922 $ 61,68 $ 6 7,88
Trois-Rivières 515 975 $ 60,07 $ 6 8,18

Lire le tableau descriptif

  • ventes_totales compare le volume observé par succursale.
  • clients_totaux aide à interpréter les écarts de ventes.
  • panier_moyen est le rapport des ventes totales au total de clients.
  • satisfaction_moyenne est la moyenne non pondérée des scores mensuels disponibles; nb_mois_satisfaction donne leur nombre.

Un tableau descriptif résume. Il ne démontre pas une cause.

Visualiser un résultat

graphique_ventes <- resume_succursales |>
  mutate(succursale = fct_reorder(succursale, ventes_totales)) |>
  ggplot(aes(x = ventes_totales, y = succursale)) +
  geom_col(fill = "#0B4F6C") +
  scale_x_continuous(labels = scales::label_dollar(
    prefix = "", suffix = " $", big.mark = " ", decimal.mark = ","
  )) +
  labs(
    title = "Ventes totales par succursale",
    x = "Ventes totales ($ CA)",
    y = NULL
  ) +
  theme_minimal(base_size = 14)

graphique_ventes

Le graphique obtenu

Lire le graphique

  • Chaque barre représente une succursale.
  • La longueur de la barre représente les ventes totales.
  • L’ordre des barres facilite la comparaison.
  • Le graphique doit mener à un constat descriptif, pas à une conclusion causale.

Le graphique aide à voir une structure. Le texte du rapport doit ensuite dire ce qui est visible, avec prudence.

Structure de la trace finale

---
title: "Mini-rapport - Semaine 02"
format:
  html:
    embed-resources: true
---

## Introduction
## Importation
## Inspection et diagnostic
## Résumé descriptif
## Graphique
## Constats

Ce que la trace doit démontrer

  • Le fichier CSV est importé avec un chemin reproductible.
  • Le tableau est décrit avant les calculs.
  • Les valeurs manquantes sont signalées.
  • Le tableau descriptif et le graphique sont produits par le code.
  • Les constats restent descriptifs.

Avant de finaliser

  • Le fichier .qmd se rend sans erreur.
  • Les packages nécessaires sont chargés dans le document.
  • Les données sont importées avec un chemin relatif.
  • Chaque tableau et chaque graphique provient du code visible.
  • Les constats ne vont pas plus loin que les résultats produits.

Deux constats et une question

Le rapport se termine par deux constats descriptifs et une question pour la suite.

Question possible : quelles variables pourraient aider à expliquer les écarts de ventes entre succursales?

À retenir

1

Un projet organise le travail.

2

Le code rend l’analyse vérifiable.

3

Quarto garde ensemble texte, code et résultats.

Passer aux exercices

  • Reprenez la démarche sur le fichier de la PME fictive.
  • Étudiez les retours et les délais selon la saison.
  • Terminez le rapport, puis vérifiez le rendu HTML.
  • En cas de blocage, conservez le code tenté et le message d’erreur.