Aventure 6 - Collaboration et reproductibilité dans GitHub
STT-1100 - Introduction à la science des données
Mise en contexte
Vous êtes une équipe de scientifiques de données travaillant avec Dr Sofia Martinez au Port Authority Data Lab. Votre mandat est de produire un rapport collaboratif et reproductible sur les retards de vols au départ de JFK en 2023.
Cette aventure change volontairement de niveau. Dans les modules précédents, vous avez surtout travaillé individuellement. Ici, le produit important n’est pas seulement le graphique final. C’est aussi la trace de collaboration : branches, commits, pull requests, résolution de conflits, rendu HTML et décisions documentées.
Le rapport sera produit avec Quarto, versionné dans GitHub et basé sur les tables du package nycflights23 : flights, airlines et weather.
Carte de visite
Votre rôle Équipe de scientifiques de données
Interlocutrice Dr Sofia Martinez
Organisation et contexte Port Authority Data Lab
Mission Produire un rapport collaboratif et reproductible sur les retards à JFK
Données nycflights23::flights, airlines et weather
Livrable Rapport collaboratif, rendu HTML, README et traces GitHub
Dépôt de départ
Clonez le dépôt GitHub du module 6 depuis l’organisation du cours : STT-1100/aventure-6.
Le dépôt de départ contient un squelette de rapport. Votre équipe doit le compléter, le rendre en HTML et pousser la version finale sur GitHub.
Le dépôt final doit contenir :
rapport.qmd: le rapport collaboratif reproductible;rapport.html: la version rendue du rapport;README.md: une courte description du projet, des rôles et de la procédure de rendu;- tout fichier supplémentaire réellement nécessaire.
Ne conservez pas de fichiers inutiles comme Untitled.R, rapport_final_final.qmd ou des copies temporaires.
Partie 1 - Collaboration avec GitHub
Formation des équipes et rôles
Travaillez en équipes de 3 à 4 personnes. Chaque membre prend un rôle principal. Les rôles servent à structurer le travail, mais toute l’équipe reste responsable du résultat final.
| Rôle | Responsabilités techniques | Lien avec le cycle de vie des données | Contribution minimale |
|---|---|---|---|
| Responsable du dépôt | Structure le dépôt, crée les branches, gère les pull requests et les fusions | Versionnage, traçabilité, partage | Met à jour le README.md, coordonne les branches et fusionne dans main |
| Analyste des données | Prépare les données et les jointures | Préparation et transformation | Crée le tableau vols_jfk en joignant flights, airlines et weather |
| Chargé·e de la reproductibilité | Vérifie le rendu, les packages, les chunks et le texte dynamique | Documentation et reproductibilité | Ajoute une phrase avec au moins trois morceaux de code en ligne |
| Visualiseur·se | Produit les graphiques et améliore leur lisibilité | Communication des résultats | Ajoute au moins deux visualisations interprétables |
Séquence de travail recommandée
Responsable du dépôt : clone le dépôt, ouvre le projet dans RStudio, vérifie que
rapport.qmdse rend, puis crée une branche par rôle.Chargé·e de la reproductibilité : travaille dans sa branche, organise les sections du rapport, vérifie le YAML et ajoute une section “Rôles de l’équipe”.
Analyste des données : travaille dans sa branche, ajoute le chunk
setup, prépare les jointures et crée le tableauvols_jfk.Visualiseur·se : travaille dans sa branche, ajoute les graphiques et les titres nécessaires.
Chaque membre pousse sa branche et ouvre une pull request.
Le responsable du dépôt fusionne les pull requests une par une. Si un conflit survient, l’équipe le résout ensemble et documente brièvement ce qui s’est passé.
Partie 2 - Analyse reproductible avec données fusionnées
Préparation attendue
Le rapport doit charger explicitement les packages nécessaires.
library(tidyverse)
library(nycflights23)Créez ensuite un tableau fusionné pour les vols de JFK.
vols_jfk <- flights |>
filter(origin == "JFK") |>
left_join(airlines, by = "carrier") |>
left_join(
weather,
by = c("origin", "year", "month", "day", "hour")
)Cette jointure ajoute le nom complet du transporteur et les conditions météo associées à l’aéroport, au jour et à l’heure du vol.
Avant d’interpréter les résultats, vérifiez la taille du tableau et les valeurs manquantes importantes.
vols_jfk |>
summarise(
n_vols = n(),
n_transporteurs = n_distinct(carrier),
dep_delay_manquant = sum(is.na(dep_delay)),
wind_gust_manquant = sum(is.na(wind_gust))
)Questions d’analyse
Votre rapport doit répondre aux trois questions suivantes.
- Quels transporteurs ont les retards moyens au départ les plus élevés à JFK?
- Les conditions météo disponibles, par exemple
wind_gust,visibouprecip, semblent-elles associées aux retards? - Quelles limites faut-il mentionner avant de transformer ces constats en recommandations opérationnelles?
Pour les questions 1 et 2, incluez :
- une courte phrase qui précise ce que vous comparez;
- au moins un résumé numérique;
- au moins une visualisation;
- une interprétation prudente.
Pour la question 3, incluez :
- au moins deux limites concrètes de l’analyse;
- une explication de ce qui peut être décrit avec ces données et de ce qui ne peut pas être conclu;
- une conclusion prudente avant toute recommandation opérationnelle.
Exemples de points de départ
Retard moyen par transporteur :
retards_transporteurs <- vols_jfk |>
group_by(name) |>
summarise(
n_vols = n(),
retard_moyen = mean(dep_delay, na.rm = TRUE),
.groups = "drop"
) |>
filter(n_vols >= 500) |>
arrange(desc(retard_moyen))Visualisation possible :
retards_transporteurs |>
slice_max(retard_moyen, n = 8) |>
ggplot(aes(x = reorder(name, retard_moyen), y = retard_moyen)) +
geom_col(fill = "steelblue") +
coord_flip() +
labs(
title = "Transporteurs avec les retards moyens les plus élevés à JFK",
x = "Transporteur",
y = "Retard moyen au départ (minutes)"
)Relation météo et retards :
vols_jfk |>
filter(!is.na(wind_gust), !is.na(dep_delay)) |>
slice_sample(n = 5000) |>
ggplot(aes(x = wind_gust, y = dep_delay)) +
geom_point(alpha = 0.2) +
geom_smooth(method = "lm", se = FALSE, color = "firebrick") +
labs(
title = "Rafales de vent et retards au départ",
x = "Rafales de vent",
y = "Retard au départ (minutes)"
)Exemple de phrase reproductible avec du code en ligne :
Le tableau fusionné contient `r nrow(vols_jfk)` vols au départ de JFK, couvre `r n_distinct(vols_jfk$carrier)` transporteurs et présente un retard moyen de `r round(mean(vols_jfk$dep_delay, na.rm = TRUE), 1)` minutes.Partie 3 - Journal de collaboration
Ajoutez une section “Journal de collaboration” dans rapport.qmd.
Chaque membre doit y écrire un court paragraphe indiquant :
- son rôle dans l’équipe;
- sa contribution principale;
- une difficulté rencontrée avec GitHub, Quarto ou les données;
- la manière dont cette difficulté a été résolue;
- ce qu’il ou elle retient sur la collaboration reproductible.
Le responsable du dépôt doit initialiser cette section et prévoir un sous-titre pour chaque membre.
Partie 4 - Cycle de vie des données
Ajoutez une section expliquant comment votre projet illustre les étapes suivantes :
- collecte;
- transformation;
- analyse;
- communication;
- partage, réutilisation et versionnage.
Trace portfolio
La trace de collaboration compte autant que le graphique final.
- une branche ou une pull request liée à votre rôle;
- la table jointe utilisée dans le rapport;
- deux visualisations ou éléments reproductibles ajoutés au rapport;
- une entrée de journal décrivant une décision, une difficulté ou un conflit GitHub.
Vérification finale
Avant la remise, vérifiez que :
rapport.qmdse rend en HTML sans erreur;- le rapport contient au moins deux visualisations;
- chaque membre a fait au moins deux commits significatifs;
- les pull requests ont été fusionnées dans
main; - le
README.mdexplique le rôle de chaque membre et la procédure de rendu; - les conclusions restent descriptives et prudentes;
- le dépôt GitHub contient
rapport.qmd,rapport.htmlet les fichiers nécessaires.
Bonne collaboration!