🌲 Projet 2 - Le recensement de la forêt
Devoir · Semaine 2 - Programmation modulaire · Mission : Forêt boréale

📋 Voir l'énoncé du projet - la mission, les données, la sortie attendue, les graphiques et la grille.

📓 Carnet de terrain - Dre Maya de la Boucle

Native de Sainte-Data

Nouvelle mission, nouveau décor : la forêt boréale. Pendant deux semaines, mon équipe a recensé les arbres de plusieurs parcelles : espèce, hauteur, diamètre, âge.

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

Tu vas écrire un programme modulaire (découpé en fonctions) qui lit un fichier de données, calcule des statistiques et affiche des graphiques habillés. C'est le travail quotidien en science des données : transformer un fichier brut en information visuelle et en conclusions.

🧭 Comment travailler ce devoir

  • Travaille dans le lien Colab remis par la professeure pour ce devoir (un lien différent pour chaque projet).
    N'utilise pas une copie au hasard.
  • Ce calepin se construit étape par étape : ne cherche pas à tout écrire d'un coup.
    Fais une cellule, exécute-la, vérifie le résultat, puis passe à la suivante.
  • Affiche temporairement tes valeurs intermédiaires.
  • Avance par petits morceaux qui fonctionnent : c'est la méthode du raffinement graduel vue en classe.
🤖 Utilisation de l'intelligence artificielle

L'IA (ChatGPT, Claude, Gemini, etc.) est permise pour :
  • te faire expliquer une notion ou un message d'erreur ;
  • regarder des exemples de code similaires pour comprendre une technique.
Mais la solution doit être travaillée étape par étape, par toi : tu dois comprendre et pouvoir expliquer chaque ligne de ton code.
Copier-coller une solution complète sans la comprendre n'est pas accepté et se verra en évaluation.

📂 Les données de Maya¶

Le fichier recensement-foret.csv contient une ligne par arbre et quatre colonnes : espece, hauteur (m), diametre (cm), age (années).

Les espèces sont epinette, bouleau et sapin (l'épinette et le sapin sont des conifères ; le bouleau est un feuillu).

Pour développer ton code, la cellule suivante recrée un petit fichier d'exemple (l'échantillon).

Le déroulement de lundi 15 juin :

  • 8 h : tu remets ton programme qui fonctionne sur l'échantillon (rapport + graphiques produits sur ce petit fichier).
  • midi (12 h) : Maya t'envoie les vraies données (beaucoup plus volumineuses). Tu les colles dans cette cellule, tu réexécutes tout, et ton programme produit la sortie finale sans que tu aies à réécrire ton code.
📁 Cette cellule crée un fichier

En exécutant la cellule ci-dessous, ton code écrit le fichier recensement-foret.csv dans le dossier de travail. C'est ce fichier que ta fonction lireArbres va ensuite lire.

Pour voir le fichier, ouvre le panneau latéral des fichiers : dans Colab, clique sur l'icône dossier 📁 à gauche (puis 🔄 pour rafraîchir) ; dans Jupyter, regarde l'explorateur de fichiers à gauche.
In [ ]:
# Donnees de test (echafaud) pour developper ton code.
# LUNDI MIDI (12 h) : colle les VRAIES donnees de Maya entre les triples
# guillemets (a la place de l'echafaud), puis reexecute tout.
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
sapin,10.0,20,25
epinette,24.0,40,85
bouleau,15.0,27,45
sapin,9.0,17,21
epinette,19.5,34,72
bouleau,11.0,19,30
sapin,8.5,16,20
epinette,22.5,39,82
"""
with open("recensement-foret.csv", "w", encoding="utf-8") as fichier:
    fichier.write(contenu)
print("Fichier pret :", len(contenu.strip().splitlines()) - 1, "arbres.")
🎯 Le travail demandé

En utilisant les notions de la semaine 2 (fonctions, dictionnaires, lecture de fichier, matplotlib) :

Règle de nommage : le nom de chaque fonction commence par un verbe à l'infinitif (lire, calculer, trouver, compter, tracer, afficher).

  1. lireArbres(chemin) : lire le fichier et renvoyer la liste des arbres (une liste de dictionnaires).
  2. calculerHauteurMoyenne(arbres) : renvoyer la hauteur moyenne.
  3. trouverArbreDominant(arbres) : renvoyer l'arbre le plus haut (l'arbre dominant = celui qui domine la canopée).
  4. compterParEspece(arbres) : renvoyer le nombre d'arbres par espèce.
  5. tracerGraphique(arbres) et les autres fonctions de tracé de la section graphiques ci-dessous.
  6. afficherRapport(statistiques) : afficher un rapport synthèse pour Maya et l'enregistrer dans un fichier rapport-foret.txt.

Les jeux d'essais (assert) te seront fournis par la professeure pour valider certaines fonctions.

🧪 À toi de jouer

Complète chaque cellule de code sous l'encadré qui l'explique, dans l'ordre.

Documente l'en-tête de chaque fonction par une courte docstring qui dit ce qu'elle fait, et ajoute un commentaire en bout de ligne pour les calculs complexes.

Crée tes propres cellules de code et de texte au fur et à mesure : ajoute des cellules de texte pour expliquer ta démarche étape par étape, et des cellules de code pour tester par petits morceaux (raffinement graduel).

In [ ]:
# Etape 1 : lire le fichier
# A COMPLETER : def lireArbres(chemin): ...
In [ ]:
# Etape 2 : calculer les statistiques
# A COMPLETER : calculerHauteurMoyenne, trouverArbreDominant, compterParEspece
In [ ]:
# Etape 3 : afficher le rapport ET l'enregistrer dans rapport-foret.txt
# A COMPLETER : def afficherRapport(statistiques): ...
📊 Les graphiques

Produis ces quatre graphiques obligatoires, tous habillés (titre, axes nommés, légende au besoin) :

  1. Nombre d'arbres par espèce - diagramme à barres
  2. Conifères vs feuillus - camembert
  3. Hauteur selon l'âge, colorée par espèce - nuage de points (la croissance)
  4. Distribution des hauteurs - histogramme

Prépare une fonction pour chaque graphique. Ajoute des blocs de texte et de code au fur et à mesure pour les construire et les expliquer.

In [ ]:
# Les graphiques obligatoires (titre, axes nommes, legende)
import matplotlib.pyplot as plt
✍️ Explique chaque graphique

En une phrase par graphique : qu'est-ce qu'il montre, et quelle conclusion en tires-tu ?

Barres - nombre par espèce : ...

Camembert - conifères vs feuillus : ...

Nuage - hauteur selon l'âge : ...

Histogramme - distribution des hauteurs : ...

📋 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.
⭐ Point bonus (+10) - au choix

Pour aller plus loin (facultatif). Au choix - une seule des deux voies te donne le +10 :
  • 🌳 Voie analyse : ajoute les barres empilées - la répartition des espèces par tranche d'âge (jeunes / matures / vieux), une analyse de plus avec son graphique.
  • 🌸 Voie créative : fais pousser 10 fleurs dans la forêt, en trois étapes :
    1. Prépare ta fleur dans le jardin de turtle.
    2. Transforme ta fleur en fonction paramétrée : une fonction qui dessine une fleur, avec des paramètres que tu choisis (position, taille, couleur...).
    3. Dessine-la dans la forêt : places-y 10 fleurs avec ta fonction, puis colle ton code ici.
    La fleur doit avoir une apparence totalement différente de celles du cours, et le code doit être différent.
In [ ]:
# Ton bonus ici (au choix) : les barres empilees OU le code de tes 10 fleurs dans la foret

Ce que tu remets¶

  1. Ton calepin complété et exécuté (les sorties doivent être visibles) : le code en blocs clairs, avec des commentaires au-dessus de chaque fonction.
  2. Ta documentation : les blocs de texte du calepin + les commentaires + le README (le fichier README.md complété). Le README décrit ton programme selon le cadre entrées - traitements - sorties et explique ta démarche.
  3. La sortie : à 8 h, celle produite sur l'échantillon ; puis, après avoir collé les vraies données de Maya à midi, la sortie finale (rapport + graphiques).
📔 Carnet de bord (ton README)

  • À quoi sert ton programme (1-2 phrases)
  • Les ENTRÉES : quelles données le programme reçoit-il ?
  • Les TRAITEMENTS : quels calculs fait-il, et le rôle de chaque fonction ?
  • Les SORTIES : le rapport (affiché et enregistré dans le fichier rapport-foret.txt) et les graphiques (il y en a plusieurs)
  • Ta démarche : en tes propres mots, pourquoi tu as découpé le programme ainsi (le rôle de chaque fonction, ton choix d'approche)
  • Comment tu sais que ton résultat est correct (tes jeux d'essais)
Tu dois remettre un fichier README séparé (gabarit README.md dans le dossier du projet).

⚠️ Ton README doit être personnalisé pour CE programme, pas une description générale qui irait pour n'importe quel projet du même genre. Dis à quoi il sert pour Maya, décris un peu ses données (le recensement d'arbres : espèce, hauteur, diamètre, âge), et nomme ses sorties : le rapport (affiché et enregistré dans un fichier) et les graphiques (il y en a plusieurs).