REMISElundi 22 juin8 h 00

Projet 3 - Épreuve terminale

Les mondes lointains

Mission : Espace

Semaine 3 - Étude scientifique complète  ·  20 % de la note

420-SN1-RE - Programmation en sciences

Carnet de mission - Dre Maya de la Boucle

Quelque part dans l'espace

Dernière mission, et pas la plus petite : l'espace. Après le volcan et la forêt, je veux mener une vraie petite étude scientifique, du début à la fin.

Partir de données, en sortir des statistiques, tracer la relation entre deux grandeurs, et surtout prédire une mesure que je n'ai pas encore observée. - Maya

Ta mission

.csv
ENTRÉE
Les données de ton sujet (par URL ou fichier)
x̄ σ =
TRAITEMENT
  • Statistiques descriptives avec numpy
  • Régression : la droite d'ajustement
  • Prédire la valeur de Maya
SORTIE
Des graphiques habillés, un rapport et une prédiction

Les ingrédients obligatoires

  • Téléchargement des données (URL ou Drive)
  • Statistiques descriptives & Comparaisons
  • Prédiction de formule ou valeur
  • 3 graphiques ou plus, dont le nuage + la droite
  • Un jeu d'essais (assert) et une conclusion

Les fonctions à programmer

Invente tes propres noms ! Un verbe à l'infinitif qui décrit ce que fait la fonction, adapté à ton sujet. Voici juste des exemples.

  • lireTrucs()
  • calculerStatistiquesTrucs()
  • presenterStatistiques(statistiques)
  • afficherGraphiqueBlabla()
  • tracerDescriptif(…)
  • executer()

Remplace Trucs et Blabla par le nom de ce que tu étudies (ex : lireExoplanetes()).

La même colonne vertébrale technique pour tous les sujets.
.csv

Les données

Choisir ton sujet, comprendre le fichier, le charger.

Choisis ton monde (le menu)

Un seul sujet à choisir. Tous demandent les mêmes ingrédients : c'est ce qui est corrigé.

🔗 Les vraies archives de l'espace (NASA · ESA · USGS · JPL)

Étape 0 - Tu choisis au jour 1

  • Tu déclares ton sujet en classe et sur Zulip dès le premier jour.
  • Tu l'inscris dans la cellule « Je choisis mon sujet » en haut du calepin.
  • Pour l'option 7 (tes propres données), tu fais approuver ton jeu par la prof.

Sources pour l'option 7 :

  • NASA Exoplanet Archive
  • USGS / NASA Earthquake Catalog
  • JPL Small-Body Database / NASA NEO
  • NASA Open Data Portal (data.nasa.gov)
  • ESA / Gaia (catalogues d'étoiles)
  • OGSL - Saint-Laurent (l'océan, un monde lointain + satellites) : catalogue.ogsl.ca
Condition : deux grandeurs numériques reliées, une catégorie, et assez de lignes.

Les données de ton sujet

Un fichier .csv : les deux grandeurs étudiées, puis une catégorie.

rayon,masse,categorie
0.58,0.10,rocheuse
1.20,3.05,rocheuse
2.50,7.80,gazeuse
3.50,11.6,gazeuse
4.30,14.1,gazeuse

Tu charges au choix par URL distante ou par URL de fichier téléversé sur le Drive.

⚠ Tes données doivent persister : charge-les par URL ou depuis ton Drive. Ne téléverse pas le fichier dans content/ de Colab - il est effacé à la fermeture de la session. 👉 Voir le truc sur les URL

Les règles d'or des données

✅ Ce qu'il FAUT

  • Au moins 100 données (100 lignes ou plus).
  • Une source scientifique, technique ou encyclopédique (NASA, agence, base de données reconnue…).
  • Charger avec !wget et une URL : soit celle du fournisseur scientifique, soit celle de ton fichier déposé dans le Drive.

❌ Ce qui est INTERDIT

  • Écrire le fichier toi-même avec open(..., "w") et des données hard-codées dans le code.
  • Téléverser le fichier avec le bouton upload dans content/ de Colab.
  • Des données générées par une IA (inventées de toutes pièces).
!wget -O exoplanetes.csv "https://…/donnees.csv"

Une IA peut convertir un format de données (ex : JSON → CSV) si tu le souhaites, mais elle ne fabrique jamais les mesures.

x̄ σ =

Les calculs mathématiques

Statistiques, droite d'ajustement et prédiction.

Les statistiques à calculer

Pour toutes les données...

  • Le nombre de données (combien de mesures en tout).
  • Au moins 2 moyennes et leur écart-type, sur deux grandeurs (champs) différentes.

Pour un seul nouveau champ ajouté ou calculé, on divise le groupe total en au moins deux sous-groupes et...

  • Au moins un décompte, une énumération, par catégorie (combien dans chaque sous-groupe).
  • Au moins une moyenne comparée entre sous-groupes.
Le minimum obligatoire - tu peux en calculer davantage.

Découper en sous-groupes

Choisis un critère qui range tes données en familles : tu comptes combien il y en a dans chacune (le décompte) et tu compares leurs moyennes.

Pour des planètes, le critère pourrait être :

  • le télescope qui les a découvertes ;
  • un système à une seule étoile ou multistellaire ;
  • la décennie de découverte ;
  • une découverte au sol ou dans l'espace ;
  • gazeuse ou rocheuse - une catégorie calculée à partir de la densité, elle-même obtenue de la masse et du rayon.

Ta prédiction : au choix

Une formule

y=a·x+b

Une formule linéaire

Trouver la loi ou une constante (pente, ordonnée).

Une formule non-linéaire

L'ajustement d'une courbe à un système du second degré.

Une valeur

Une valeur par interpolation

Estimer une valeur entre deux points connus.

Une valeur future

Prolonger la tendance au-delà des données (extrapolation).

Choisis ce que tu prédis - ton ajustement peut être linéaire ou non-linéaire.

Choix 1 : une formule linéaire

Tu cherches la loi qui relie x et y, ou une constante physique.

np.polyfit(x, y, 1) te donne la pente et l'ordonnée : y = pente × x + ordonnée.

Exemple (loi de Hubble) : la pente de distance → vitesse, c'est la constante de Hubble H₀.

y = a·x + b

Choix 2 : une formule non-linéaire

Quand la relation n'est pas une droite, ajuste une courbe.

np.polyfit(x, y, 2) (degré 2) ou des axes log-log pour redresser la courbe.

Élégant pour Kepler (période² ∝ distance³) et la loi de Hubble.

La régression : prédire l'inconnu

np.polyfit(x, y, 1) trouve la droite d'ajustement : y = pente × x + ordonnée.

Avec elle, tu calcules une valeur que personne n'a mesurée - la nouvelle observation de Maya.

Exemple (exoplanètes) : masse ≈ 3,3 × rayon - 0,9. Pour un rayon de 3,2, on prédit une masse d'environ 9,7 masses terrestres.

Choix 3 : une valeur par interpolation

Tu estimes une valeur entre deux points déjà mesurés : c'est l'interpolation.

Le x demandé est dans l'intervalle des données, mais sans mesure exacte pour lui.

Exemple : la masse pour un rayon de 2,7 alors que tu as mesuré 2,5 et 3,0.

Choix 4 : une valeur future

Tu prolonges la tendance au-delà des données mesurées : c'est l'extrapolation.

Avec la formule, tu calcules un y pour un x plus grand que tous ceux observés.

Exemple : la masse d'une planète plus grosse que toutes celles du jeu de données.

futur

Les jeux d'essais

Des assert qui vérifient tes fonctions d'analyse sur un petit exemple connu.

xTest = np.array([1.0, 2.0, 3.0])
yTest = np.array([2.0, 4.0, 6.0]) # masse = 2 x rayon
stats = analyser(xTest, yTest, cat, 4.0)
 
assert abs(stats["pente"] - 2.0) < 0.001
assert abs(stats["valeurPredite"] - 8.0) < 0.001
print("Tous les jeux d'essais passent.")

À toi de jouer

Une fois ton Colab terminé, copie-colle cet exemple, puis ajuste les valeurs et les appels de fonction pour tester 2 valeurs de ton choix - par exemple la moyenne et l'écart-type de tes données.

Au moins 2 asserts en lien avec tes calculs mathématiques (ex. la pente, une valeur prédite).

Les graphiques

Le nuage de points, la droite et un second graphique.

Les graphiques à produire

Plusieurs courbes

Plusieurs séries en couleurs, avec une légende.

Double-répartition

Des subplots (tartes, barres, histogrammes) ou un diagramme à barres empilées.

Nuage + droite

Les points, la droite d'ajustement et la prédiction.

Tous bien habillés : un titre, des axes nommés et une légende.

Graphique de plusieurs courbes en couleurs

Luminosité de trois étoiles au fil du temps 05101520 012345 Temps (jours) Luminosité (relative) Étoile A Étoile B Étoile C
Plusieurs séries sur un même graphique : une couleur par série + une légende.

Double-répartition : des subplots

Exemple : comparer deux galaxies Âge - Voie lactée Âge Âge - Andromède Âge Andromède Voie lactée Rocheuses Gazeuses
Quatre subplots pour comparer deux galaxies : l'âge des planètes (histogrammes) et la composition rocheuses / gazeuses (tartes).

Double-répartition : barres empilées

Répartition des planètes par catégorie 05101520 Nombre de planètes Masse (masses terrestres) 0-44-88-1212-1616-2020-24 Rocheuses Gazeuses
Compare deux sous-groupes : barres empilées, ou des subplots (tartes / barres / histogrammes).

Graphique obligatoire : le nuage + la droite

Masse selon le rayon des exoplanètes 05101520 012345 Rayon (rayons terrestres) Masse (masses terrestres) Rocheuses Gazeuses Droite d'ajustement Prédiction de Maya
Les points montrent la relation ; la droite la résume ; l'étoile, c'est la prédiction.

Point bonus (+10) - 2 retouches

📈 Le R²

  • Calcule le (entre 0 et 1) et dis ce qu'il signifie.
  • Il mesure à quel point ta droite colle aux points.

📊 Les barres d'erreur

  • Ajoute une incertitude / des barres d'erreur à ta prédiction.
  • Montre que ta valeur prédite a une marge.
Fais les 2 retouches pour décrocher le +10.

Le rapport

Les jeux d'essais, la sortie attendue et le bonus.

Le rapport, c'est trois livrables

À l'écran

Le rapport affiché par ton programme avec print.

.txt

Dans un fichier .txt

Les statistiques descriptives enregistrées dans un fichier texte.

En images

Les graphiques enregistrés en fichiers images (.png).

Affiché, enregistré, illustré : ton étude laisse une trace complète.

La sortie attendue

============================================
🚀 RAPPORT - EXOPLANÈTES (rayon → masse)
============================================
Planètes étudiées : 60
dont rocheuses : 38 gazeuses : 22
Rayon moyen : 2.52 (écart-type 1.1) rayons terrestres
Masse moyenne : 7.4 (écart-type 4.9)
--------------------------------------------
Masse moyenne par catégorie :
rocheuse : 2.9 gazeuse : 11.2
--------------------------------------------
PRÉDICTION (formule) : masse = 3.3 x rayon - 0.9
PRÉDICTION (valeur, rayon 3.2) : masse ≈ 9.7
============================================
Un rapport clair : les statistiques, la comparaison, et surtout la prédiction.

La documentation

Docstrings, commentaires, README et conclusion.

La documentation, c'est cinq choses

📝
Les blocs du calepin

Des cellules de texte qui expliquent ta démarche, étape par étape.

🏷️
Les docstrings

Une courte phrase en en-tête de chaque fonction, qui dit ce qu'elle fait.

💬
Les commentaires

En bout de ligne, seulement pour expliquer ce qui est complexe.

📄
Le README

Le résumé du programme : à quoi il sert, entrées, traitements, sorties.

⭐ Vise un code qui se lit comme une phrase

Donne des noms parlants à tes fonctions et à tes variables (code sémantique) : leur nom dit ce qu'elles font ou ce qu'elles contiennent.

for planete in listePlanetes:  se lit « pour chaque planète dans la liste des planètes ». Bien nommé, ton code s'explique presque tout seul.

README + conclusion scientifique

Ton README décrit ton programme selon le cadre :

  • À quoi il sert pour Maya (ton sujet)
  • Les ENTRÉES : tes données, tes colonnes
  • Les TRAITEMENTS : statistiques, régression, rôle de chaque fonction
  • Les SORTIES : le rapport, la prédiction, les graphiques
⚠️ Personnalisé pour TON sujet, pas une description générale.

Ta conclusion répond en scientifique :

  • La relation : x et y vont-ils dans le même sens ?
  • La prédiction : a-t-elle du sens ?
  • Les catégories : que vois-tu en comparant les deux groupes ?
📝 À écrire dans une cellule de texte (Markdown), à la fin de ton calepin Colab.

Récapitulatif

La grande finale : tout ce qui compte dans la note.

Grille d'évaluation

Données20
Calculs mathématiques20
Graphiques20
Rapport20
Documentation20
Total100
BONUS - qualité de l'ajustement ET barres d'erreur+10
Critères
  • Code découpé en fonctions courtes au rôle clair.
  • Chaque fonction documentée (docstring).
  • Noms sémantiques : sans abréviations, en français sans accent.
  • Les noms de fonctions commencent par un verbe à l'infinitif.
⚠ Un code remis sans versions ni sauvegardes pas à pas ne sera pas évalué : note de zéro.

Ta checklist complète

Données

  • Téléchargement distant (URL ou Drive)
  • Lecture d'un fichier : 3 grandeurs et 2 textes
  • Structures de données :
    • liste de hashmap pour les données source
    • hashmap pour chaque rapport ou graphique

Calculs mathématiques

  • Statistiques descriptives
  • Comparaison de sous-groupes
  • Fonction de bibliothèque mathématique
  • Prédiction de formule ou valeur
  • Jeux d'essais (2 asserts)

Graphiques

  • Graphique de plusieurs courbes en couleurs
  • Une figure de double-répartition :
    • Subplots de 4 répartitions ou plus :
      tartes, barres ou histogrammes
    • Diagramme à barres empilé
  • Nuage de points + droite d'ajustement
  • Graphiques habillés : titre, axes, légende

Rapport

  • Rapport affiché à l'écran
  • Statistiques enregistrées dans un .txt
  • Graphiques enregistrés en images

Documentation

  • Blocs du calepin
  • Docstrings
  • Commentaires
  • README + conclusion scientifique
  • Code sémantique

⭐ Bonus (+10)

  • Qualité de l'ajustement (R²)
  • Barres d'erreur

Coche au fur et à mesure : ton suivi est gardé sur ton appareil.

Comment travailler ce projet

  • Travaille directement dans le lien Colab remis par la prof pour le projet.

Travaille pas à pas

  • Avance une cellule à la fois : écris, exécute, vérifie, puis continue (raffinement graduel).
  • Affiche temporairement tes valeurs intermédiaires pour t'assurer que tout est correct.
  • Garde tes fonctions courtes et nommées par un verbe : un code clair se corrige mieux.

Pas à pas, avec des fonctions

Le même principe s'applique à tes fonctions : deux façons d'avancer, au choix.

① Coder, puis envelopper

Tu écris ton code directement dans la cellule, tu le fais marcher, puis tu l'enveloppes dans une fonction et tu testes l'appel.

moyenne = sum(valeurs) / len(valeurs) print(moyenne) # ca marche -> on enveloppe def calculerMoyenne(valeurs): return sum(valeurs) / len(valeurs) print(calculerMoyenne(valeurs))

② Prototyper la fonction vide

Tu crées tout de suite la fonction avec juste return "", tu l'appelles immédiatement, puis tu codes pas à pas dans la cellule.

def calculerMoyenne(valeurs): return "" print(calculerMoyenne(valeurs)) # l'appel marche -> on remplit def calculerMoyenne(valeurs): return sum(valeurs) / len(valeurs)

Utilisation de l'intelligence artificielle

Permis

  • Se faire expliquer une notion ou une erreur
  • Regarder des exemples de code similaires
  • Recherche de données scientifiques
  • Conversion de données

À faire toi-même

  • Comprendre et expliquer chaque ligne
  • Comprendre et adapter chaque ligne

Copier une solution complète sans la comprendre n'est pas accepté : ça se voit en évaluation.

Le calendrier de réalisation

Lundi
Choisis tes données et déclare ton sujet.
Mardi
Charge tes données (URL ou URL Drive) dans ton calepin.
Mercredi ou jeudi
Partage ta 1re statistique par clavardage ou visioconférence, et fais valider tes idées de calculs et graphiques.
Lundi 8 h 00
Remise finale de ton programme, avec tes données complètes ou volumineuses (plus de 100 données).
Le point de validation du milieu de semaine (clavardage ou visio) est obligatoire.

Décollage !

Code sémantique et découpé, données maîtrisées, communication claire.

Maya compte sur toi.