REMISElundi 15 juin8 h 00 du matin

Devoir - Projet 2

Le recensement de la forêt

Mission : Forêt boréale

Semaine 2 - Programmation modulaire

420-SN1-RE - Programmation en sciences

Carnet de terrain - Dre Maya de la Boucle

Dans la forêt boréale

Nouvelle mission : la forêt boréale. Mon équipe a recensé les arbres de plusieurs parcelles : espèce, hauteur, diamètre, âge.

J'aimerais un programme bien organisé qui charge ces données, en sort des statistiques et me trace des graphiques pour mon rapport. - Maya

Ta mission

.csv
ENTRÉE
Le fichier des arbres recensés
42=+-x
TRAITEMENT
  • Calculer des statistiques (hauteur moyenne, arbre le plus haut, nombre par espèce)
  • Afficher 4 graphiques représentant des groupements pertinents de données
rapport.txt
SORTIE
Des graphiques habillés et un rapport

Les données de Maya

Maya te remet un fichier .csv : une ligne par arbre recensé, quatre colonnes.

espece,hauteur,diametre,age
epinette,18.4,32,67
bouleau,12.1,21,34
sapin,9.7,18,22
epinette,21.3,38,80
bouleau,14.6,25,41

Soit l'espèce, la hauteur (m), le diamètre (cm) et l'âge (années). Pour l'instant, c'est un petit échantillon.

12.1 12.4

Des données de test (un échafaud)

especehauteurdiametreage
epinette18.43267
bouleau12.12134
sapin9.71822
epinette21.33880
bouleau14.62541
sapin8.01518
epinette27.84495
bouleau13.02338
À copier-coller (exécutable)
contenu = """espece,hauteur,diametre,age
epinette,18.4,32,67
bouleau,12.1,21,34
sapin,9.7,18,22
epinette,21.3,38,80
bouleau,14.6,25,41
sapin,8.0,15,18
epinette,27.8,44,95
bouleau,13.0,23,38
"""
🏗️ Un échafaud : des données temporaires pour bâtir et tester ton programme. Le tableau sert à lire ; le bloc de code (la variable contenu, exécutable) se copie-colle dans la cellule de données du calepin. Lundi midi, tu colles les vraies données de Maya au même endroit.

Les mêmes données, en mémoire (liste de dictionnaires)

arbres = [
    {"espece": "epinette", "hauteur": 18.4, "diametre": 32, "age": 67},
    {"espece": "bouleau ", "hauteur": 12.1, "diametre": 21, "age": 34},
    {"espece": "sapin   ", "hauteur": 9.7 , "diametre": 18, "age": 22},
    {"espece": "epinette", "hauteur": 21.3, "diametre": 38, "age": 80},
    {"espece": "bouleau ", "hauteur": 14.6, "diametre": 25, "age": 41},
    {"espece": "sapin   ", "hauteur": 8.0 , "diametre": 15, "age": 18},
    {"espece": "epinette", "hauteur": 27.8, "diametre": 44, "age": 95},
    {"espece": "bouleau ", "hauteur": 13.0, "diametre": 23, "age": 38},
]
🧠 Le même échafaud, mais en mémoire : une liste de dictionnaires (des tableaux associatifs), chaque arbre est un {clé: valeur}. C'est exactement ce que ta fonction lireArbres doit produire à partir du fichier. Tu peux aussi coller cet échafaud pour tester tes calculs sans lire le fichier.

Un échantillon maintenant, les vraies données lundi

🧪 L'échantillon (remise de 8 h)

  • Un petit jeu de données d'exemple, déjà dans le calepin.
  • Sers-t'en pour écrire et tester ton programme, une fonction à la fois.
  • À 8 h, tu remets ton programme qui fonctionne sur l'échantillon.

📦 Lundi 15 juin, midi : les vraies données

  • Maya envoie le vrai fichier, beaucoup plus volumineux.
  • Tu le colles, tu réexécutes tout : ton programme sort le rapport et les graphiques finaux.
Ton code doit marcher sur l'échantillon ET ensuite sur les vraies données, sans rien réécrire.

Ce que ton programme doit faire

  • Charger les données du fichier
  • Calculer des statistiques sur les arbres
  • Tracer des graphiques soignés (titre, axes, légende)
  • Rédiger un rapport synthèse pour Maya, qui sera affiché et enregistré dans un fichier

Les fonctions à programmer

Chaque nom commence par un verbe à l'infinitif.

  • lireArbres(chemin)
  • calculerHauteurMoyenne(arbres)
  • trouverArbreDominant(arbres)
  • compterParEspece(arbres)
  • afficherRapport(statistiques)
  • … des fonctions pour tes diagrammes
L'arbre dominant, c'est le plus haut - celui qui domine la canopée.

Bien ranger tes données : trois structures

1. Lire le fichier

une liste de dictionnaires
arbres = [
  {"espece":"epinette",
   "hauteur":18.4, ...},
  {"espece":"bouleau", ...},
]

Un dictionnaire par arbre, tous dans une seule liste. C'est ce que produit lireArbres.

2. Chaque graphique

un dictionnaire par graphique
# barres / camembert : categorie -> nombre
compteParEspece = {"epinette":3,
                   "bouleau":3}

# nuage de points : deux listes paralleles
croissance = {"age":     [67, 34, 22],
              "hauteur": [18.4, 12.1, 9.7]}

Un dict par graphique : soit catégorie vers nombre, soit un hashmap de deux listes (x et y) pour un nuage de points.

3. Le rapport

un dictionnaire de résultats
statistiques = {
  "hauteurMoyenne": 15.7,
  "arbreDominant": {...},
  "compteParEspece": {...},
}

Toutes tes stats rassemblées dans un seul dict, passé à afficherRapport(statistiques).

Une partie = une structure. Les données d'un graphique tiennent dans un seul tableau, jamais éparpillées dans dix variables séparées.

Les jeux d'essais

Des tests pour valider tes fonctions de calcul sur les données de test. Colle-les après tes fonctions, exécute : si rien ne plante, c'est bon.

À copier-coller (exécutable)
# `arbres` doit deja etre charge depuis le fichier de test

# L'arbre le plus haut est une epinette de 27.8 m
dominant = trouverArbreDominant(arbres)
assert dominant["espece"] == "epinette"
assert dominant["hauteur"] == 27.8

# La hauteur moyenne vaut environ 15.27 m
assert round(calculerHauteurMoyenne(arbres), 2) == 15.27

print("Tests reussis !")

La sortie attendue

========================================
🌲 RAPPORT DU RECENSEMENT - FORÊT 🌲
========================================
🌳 Arbres recensés : 128
📏 Hauteur moyenne : 14.3 m
🏆 Plus haut : 27.8 m (épinette)
🌲 Épinettes : 71
🍂 Bouleaux : 39
🌿 Sapins : 18
========================================
✅ Analyse terminée. Graphique prêt !
========================================
Ton programme affiche ce rapport et l'enregistre dans un fichier rapport-foret.txt.

Le graphique attendu

Nombre d'arbres par espèce020406080Nombre d'arbres713918ÉpinettesBouleauxSapinsÉpinettesBouleauxSapins
Un graphique habillé : un titre, des axes nommés et une légende.

Conifères ou feuillus ?

Répartition de la forêt70 %30 %Conifèresépinettes + sapins - 89Feuillusbouleaux - 39
On regroupe les espèces : épinette et sapin sont des conifères, le bouleau est un feuillu.

La croissance : hauteur selon l'âge

Hauteur selon l'âge, par espèce0102030020406080100120Âge (années)Hauteur (m)ÉpinettesBouleauxSapins
Chaque point est un arbre, coloré selon son espèce : la hauteur augmente avec l'âge.

Distribution des hauteurs

Combien d'arbres par tranche de hauteur01020304050Nombre d'arbres62241341870-55-1010-1515-2020-2525-30Hauteur (m)
On range les arbres par tranches de hauteur : la plupart mesurent entre 10 et 20 m.

Bonus : espèces par tranche d'âge

Composition de la forêt selon l'âge0204060Nombre d'arbresJeunes0-30 ansMatures30-70 ansVieux70-120 ansÉpinettesBouleauxSapins
Chaque barre = une tranche d'âge ; les couleurs empilées montrent sa composition d'espèces.

Bonus (au choix) : des fleurs dans la forêt

La voie créative du bonus, en trois étapes :

🌸 La fleur doit avoir une apparence totalement différente de celles du cours, et le code doit être différent.
Une fleur dans une fonction, appelée 10 fois : voilà une petite forêt fleurie.

La documentation, c'est quatre 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.

Les quatre comptent dans la note « Documentation » de la grille.

Le README.md à remettre

.md

Ton README décrit ton programme selon le cadre :

  • À quoi il sert pour Maya (1-2 phrases)
  • Les ENTRÉES : décris un peu les données (le recensement d'arbres : espèce, hauteur, diamètre, âge)
  • Les TRAITEMENTS : ce que le programme calcule
  • Les SORTIES : les graphiques (il y en a plusieurs) et le rapport (affiché et enregistré dans un fichier)
⚠️ Un README personnalisé pour CE programme : pas une description générale qui irait pour n'importe quel projet du même genre.

Grille d'évaluation

Lecture du fichier20
Calcul des statistiques20
Affichage du rapport20
Affichage des graphiques20
Résultats des essais5
Documentation15
Total100
BONUS (au choix) - les barres empilées (espèces par tranche d'âge) OU 10 fleurs dessinées dans la forêt (turtle), code collé dans le calepin+10
Critères d'évaluation
  • Le programme doit être découpé en fonctions courtes au rôle clair.
  • Chaque fonction est documentée par un commentaire qui dit ce qu'elle fait.
  • Les variables et fonctions ont des noms sémantiques (significatifs) : sans abréviations, sans acronymes, en français mais sans accent.
  • Le nom d'une fonction commence par un verbe à l'infinitif (lire, calculer, trouver, compter, tracer, afficher...).
⚠ Un code remis sans versions ni sauvegardes pas à pas ne sera pas évalué : note de zéro.

Décrocher le plein 20 sur les calculs

La note maximale des calculs n'est atteinte que si deux conditions sont réunies, en plus de bons chiffres :

✅ Découpé en fonctions

  • Chaque calcul vit dans sa propre fonction au nom clair (calculerHauteurMoyenne, trouverArbreDominant...).
  • Chaque fonction est dans sa propre boîte séparée (une cellule du calepin), pas tout dans un seul bloc fourre-tout.

✅ Un seul tableau par graphique

  • Les données d'un graphique tiennent dans un seul gros tableau (un dictionnaire ou une liste).
  • Pas de petites listes ni de variables séparées éparpillées (hauteur1, hauteur2, hauteur3...).
Un code en un seul bloc, ou des données dispersées dans dix variables, plafonne la note même si les résultats sont exacts.

Ce que tu remets

1. Ton calepin : le code en blocs clairs, avec des commentaires.

2. Un README qui décrit ton programme (gabarit fourni).

3. La sortie avec les vraies données de Maya reçues lundi 15 juin midi (donc après la remise du code, une fois les données collées).

Comment travailler ce devoir

  • Réalise pas à pas l'exercice de pratique de chaque séance. Pour compter, un exercice doit être commencé le jour de sa présentation. Il y a un exercice de pratique par jour.
  • Travaille directement dans le lien Colab remis par la professeure. Ne fais pas de copie avant d'avoir fini.
  • Ne cherche pas à tout écrire d'un coup : une cellule à la fois, une ligne à la fois avec des affichages temporaires à chaque fois. Exécute, vérifie, puis continue.
  • Avance par petits morceaux qui fonctionnent : c'est le raffinement graduel. Ne rajoute pas de code tant que le code déjà présent n'affiche pas les bons chiffres. Dans un code graduel, différents codes de test apparaissent et disparaissent.

Utilisation de l'intelligence artificielle

Permis

  • Se faire expliquer une notion ou une erreur
  • Regarder des exemples de code similaires

À faire toi-même

  • Construire ta solution étape par étape
  • Comprendre et expliquer chaque ligne

Copier une solution complète sans la comprendre n'est pas accepté : ça se voit à la section Explique ta démarche et dans l'Historique du code.

Au travail !

Code clair, commentaires, README, français soigné.

Maya compte sur toi.