Aller au contenu principal

TP2 🧼 Analyse de donnĂ©es

Explications

Une vidéo expliquant en détail le TP et fournissant quelques conseils est disponible en bas de page.

🧠 Contexte

Les données sont partout autour de nous. Savoir les analyser et en tirer des conclusions est une compétence essentielle dans de nombreux domaines, en particulier en science.

Dans ce TP, vous allez choisir un ensemble de données réelles, les analyser à l'aide de Python et produire des visualisations pour illustrer vos découvertes.

🎯 Objectifs pĂ©dagogiques

À la fin de ce travail, vous serez capable de :

  • Lire et traiter des fichiers CSV avec Pandas
  • CrĂ©er des visualisations de donnĂ©es avec Matplotlib
  • InterprĂ©ter des donnĂ©es scientifiques rĂ©elles
  • Écrire dans un fichier texte un rapport
Créer le projet

Pour faire ce TP, vous devez créer un nouveau projet PyCharm et utiliser un répertoire GitHub dÚs le début.

  • Si votre enseignant utilise GitHub Classroom, utilisez le rĂ©pertoire créé par votre enseignant.
  • Si votre enseignant n'utilise pas GitHub Classroom, crĂ©ez votre propre rĂ©pertoire et partagez-lui l'accĂšs en lecture.
👀 Plagiat

â—đŸ€– 👀 đŸš«

Si votre travail est suspecté de plagiat (code copié d'un(e) autre étudiant(e), code généré par IA, notions non abordées en classe, etc.), deux choses peuvent se produire :

  • Le plagiat est prouvĂ© par nos outils : note de 0, automatiquement.
  • Le plagiat est plutĂŽt Ă©vident, mais une validation est requise : vous serez convoquĂ©(e) au bureau de votre enseignant(e). Vous devrez rĂ©pondre Ă  certaines questions pour prouver que vous comprenez et maĂźtrisez le code qui a Ă©tĂ© utilisĂ©. Si vous ne rĂ©ussissez pas Ă  rĂ©pondre Ă  certaines questions, vous aurez la note de 0 (si vous ne comprenez pas votre propre code, c'est que vous avez plagiĂ©, d'une maniĂšre ou d'une autre).
📝 Pour faire ce TP, vous devez :
  • Suivre le lien donnĂ© pour chercher, trouver et tĂ©lĂ©charger le fichier CSV de donnĂ©es appropriĂ© en lien avec le projet.
  • Écrire un script Python qui lit le fichier CSV, analyse les donnĂ©es et produit :
    • des figures (en format PNG) en utilisant les bibliothĂšques Pandas et Matplotlib.
    • un fichier texte contenant les rĂ©ponses Ă  des questions d'analyse.
1 point 📂 Fichiers dans le projet et structure du fichier analyse.py

Votre projet doit contenir exactement les 2 scripts Python mentionnés ci-dessous ainsi que le fichier .gitignore et rien d'autre (ne laissez traßner aucun script inutile).

tp2/
├── autocorrection.py # ce fichier vous est fourni et sert à l'autocorrection de votre travail
├── analyse.py # vous devez crĂ©er ce script, il va contenir le code de votre TP
└── .gitignore # indique les fichiers que Git doit omettre lors de la crĂ©ation d'un commit

Téléchargez le fichier autocorrection.py et le fichier .gitignore et placez-les dans votre projet.
Si le fichier .gitignore est téléchargé sous un autre nom (ex : gitignore.txt), renommez-le en .gitignore (sans extension et avec le point au début).
Tous les autres fichiers utilisĂ©s (CSV) ou produits (PNG, TXT) par votre programme ne doivent pas ĂȘtre commitĂ©s dans votre dĂ©pĂŽt Git.

Concernant la structure du fichier analyse.py, il doit :

  • possĂ©der exactement les 11 fonctions demandĂ©es, pas 1 de plus ou de moins!
  • ne contenir aucun code dans la portĂ©e globale, tout code doit ĂȘtre dans une fonction ;
  • respecter toutes les directives et contraintes, elles seront mentionnĂ©es au fur et Ă  mesure.
Le rĂŽle du fichier .gitignore

GitHub est avant tout une plateforme conçue pour héberger des fichiers légers contenant du code source.
Par principe, certains éléments ne doivent jamais figurer dans un dépÎt Git :

  • Les fichiers volumineux : ils ralentissent les opĂ©rations de clonage et de mise Ă  jour.
  • Les fichiers de configuration d'IDE : par exemple, le dossier .idea de PyCharm, qui est propre Ă  votre environnement de travail local.
  • Les fichiers gĂ©nĂ©rĂ©s : tout ce qui peut ĂȘtre produit automatiquement par l'exĂ©cution de votre programme.

En suivant ces principes, le fichier CSV que vous devrez tĂ©lĂ©charger est particuliĂšrement massif et ne devrait pas ĂȘtre sauvegardĂ© sur GitHub. Vous devrez donc retĂ©lĂ©charger le fichier CSV et le replacer dans votre dossier de projet Ă  chaque fois que vous changerez de poste dans les laboratoires du CĂ©gep. Concernant les fichiers TXT et PNG, ils sont dans le cadre de ce TP le rĂ©sultat direct de l'exĂ©cution de votre code, il est donc inutile de les versionner : nous prĂ©fĂ©rons que votre dĂ©pĂŽt ne contienne que la "recette" (votre code) et non les produits finis.

Le fichier .gitignore sert à quoi? Il indique à Git d'ignorer (de ne pas sauvegarder dans le répertoire) certains fichiers ou dossiers en fonction de modÚles (patterns) définis à l'intérieur.
Dans le cadre de ce projet, il a été configuré pour exclure automatiquement les fichiers CSV, PNG et TXT de vos commits.

1 point RĂ©pertoire Git 🐈‍⬛ et documentation des fonctions
  • Au moins 5 commits de tailles comparables (il n'y a pas un commit avec tout dedans et les autres vides)
  • Les commits dĂ©crivent l'avancement du projet dans un français sans faute (voir instructions)
  • Chaque fonction doit ĂȘtre documentĂ©e Ă  l'aide d'un docstring dans un français sans faute.
⚠ Note importante sur l'utilisation d'Excel ⚠

Bien qu'Excel soit l'outil par défaut pour lire des fichiers CSV, il n'est pas adapté aux jeux de données massifs scientifiques que nous utilisons.

  • Affichage incomplet : Au-delĂ  d'un certain seuil (environ 1 million de lignes), Excel tronque les donnĂ©es et n'affiche pas la totalitĂ© du fichier.
  • Risque d'altĂ©ration : Excel a tendance Ă  reformater automatiquement les donnĂ©es, ce qui peut corrompre l'intĂ©gritĂ© de votre fichier CSV.

Conseil : Évitez d'ouvrir le fichier CSV avec Excel!

astuce
  • Commencez par explorer les donnĂ©es pour comprendre leur structure et leur contenu, en utilisant des fonctions comme head(), info() et describe() de Pandas.

🌳 Analyse des arbres rĂ©pertoriĂ©s dans la Ville de QuĂ©bec​

📝 Description
  • La Ville de QuĂ©bec a rĂ©pertoriĂ© les arbres situĂ©s sur son territoire.
    L'objectif de ce projet est d'analyser ces données pour comprendre la répartition des espÚces d'arbres, leur taille, etc.
🔱 Source de donnĂ©es
3 points 🔍 ÉlĂ©ments Ă  analyser

Écrivez du code pour rĂ©pondre aux questions suivantes (Ă©crivez une fonction par question) :

  • #1 - Quelles sont les variables prĂ©sentes dans le jeu de donnĂ©es?
    La fonction doit ĂȘtre la seule Ă  possĂ©der dans sa docstring l'abrĂ©viation QA1 et retourner une liste de string.

  • #2 - Le nom de la topographie oĂč se trouve l'arbre avec le tronc le plus grand?
    La fonction doit ĂȘtre la seule Ă  possĂ©der dans sa docstring l'abrĂ©viation QA2 et retourner une string.

  • #3 - Combien dĂ©nombre-t-on d'espĂšces diffĂ©rentes chez les feuillus et les conifĂšres?
    La fonction doit ĂȘtre la seule Ă  possĂ©der dans sa docstring l'abrĂ©viation QA3 et retourner un tuple composĂ© du nombre de feuillus suivi du nombre de conifĂšre.

  • #4 - Quelles sont les espĂšces d'arbres (en français) que l'on retrouve dans le Parc AimĂ©e-Miville? Trier les alphabĂ©tiquement.
    La fonction doit ĂȘtre la seule Ă  possĂ©der dans sa docstring l'abrĂ©viation QA4 et retourner une liste de string.

  • #5 - De quelle espĂšce est l'arbre avec le tronc le plus gros? (en français)
    La fonction doit ĂȘtre la seule Ă  possĂ©der dans sa docstring l'abrĂ©viation QA5 et retourner une string.

  • #6 - Quel est le diamĂštre moyen du tronc des feuillus dans Ă  l'UniversitĂ© Laval? Des configĂšres?
    La fonction doit ĂȘtre la seule Ă  possĂ©der dans sa docstring l'abrĂ©viation QA6 et retourner un dictionnaire avec ces 2 clĂ©s : diametre_feuillus et diametre_coniferes.

CONTRAINTES À RESPECTER
Concernant ces fonctions, elles doivent :

  • Pouvoir ĂȘtre appelĂ©es sans paramĂštre;
  • Retourner le rĂ©sultat dans le format indiquĂ©;
  • Chacune faire appel Ă  la fonction pd.read_csv();
  • Chacune nettoyer, si nĂ©cessaire, les donnĂ©es en fonction des besoins de la question;
  • PossĂ©der l'abrĂ©viation demandĂ©e dans les docstrings (nĂ©cessaire pour l'autocorrecteur).

Aucune de ces fonctions ne doit appeler la fonction print()!

Autocorrecteur

Ici, on joue selon les rÚgles du réel : les réponses ne tombent pas du ciel.
Pour savoir si vous avez visé juste, fiez-vous au script d'autocorrection.

1 point ✏ CrĂ©ation du fichier sommaire.txt

Développez une fonction dont le rÎle est d'enregistrer toutes les questions d'analyse et leurs réponses respectives dans un seul fichier texte.

  • Nom du fichier : Le fichier doit impĂ©rativement s'appeler sommaire.txt.
  • Contenu : Il doit inclure Ă  la fois l'Ă©noncĂ© de la question (ex : « Quel est... ? ») et la rĂ©ponse obtenue (ex : « 52 »).
  • Documentation : La docstring de la fonction doit obligatoirement inclure l'abrĂ©viation QASommaire.
  • Structure : Cette fonction doit appeler les six fonctions dĂ©veloppĂ©es prĂ©cĂ©demment pour rĂ©cupĂ©rer les donnĂ©es nĂ©cessaires.
  • ClartĂ© : Le contenu du fichier doit ĂȘtre organisĂ© de maniĂšre claire et lisible, avec une question suivie de sa rĂ©ponse, puis la question suivante, etc.

Cette fonction ne prend aucun paramĂštre et ne retourne aucune valeur.

4 points 📊 Figures à produire

Vous devez produire 4 figures, chacune nécessitant la création d'une fonction distincte (total de 4 fonctions).

Chaque fonction doit :

  • Utiliser pd.read_csv() pour charger les donnĂ©es;
  • Effectuer le nettoyage de donnĂ©es requis par la problĂ©matique lorsque vous le jugez nĂ©cessaire;
  • PrĂ©parer un DataFrame contenant exclusivement les colonnes et les lignes nĂ©cessaires Ă  la figure;
  • GĂ©nĂ©rer le graphique demandĂ© Ă  l'aide de matplotlib Ă  l'aide des donnĂ©es du DataFrame;
  • Exporter le rĂ©sultat final au format .png;
  • S’exĂ©cuter sans paramĂštre;
  • Ne rien retourner.

Il est IMPOSSIBLE de créer un graphique à partir d'un DataFrame avec les mauvaises données.
Assurez-vous que le DataFrame contient les bonnes données avant de débuter la réalisation du graphique!
Un aperçu du contenu des DataFrames est généralement mis à votre disposition, profitez-en!


LES 4 FIGURES À PRODUIRE

Carte - Ville de Québec

Un graphique montrant la localisation de tous les arbres de la Ville de Québec.

  • L'image gĂ©nĂ©rĂ©e doit se nommĂ©e figure1.png;

ASTUCES

  • Retirer les lignes du DataFrame pour lesquelles il n'y a pas de valeur pour la colonne TYPE_ARBRE;
  • RĂ©cupĂ©rer une liste des types d'arbres Ă  partir du DataFrame;
  • Pour chacun des types d'arbres de la liste :
    • RĂ©cupĂ©rez les donnĂ©es pour ce type d'arbre;
    • Ajoutez-les au graphique Ă  l'aide d'un nuage de points avec une taille de marqueur de 0.01;
  • La lĂ©gende doit avoir le titre Type d'arbre et avoir une mise Ă  l'Ă©chelle des marqueurs de 50.
✅ Autocorrection des 6 questions d'analyse

Le script autocorrection.py se limite Ă  la correction des 6 questions d'analyse.
Il détecte automatiquement votre progression et exécute des tests en conséquence.

⚠ Pour que le script fonctionne correctement, il faut absolument que les fonctions possĂšdent dans leurs docstrings les abrĂ©viations demandĂ©es.

Le script nécessite au préalable l'installation du package requests (voir la procédure d'installation d'un package). Cette bibliothÚque permet de télécharger des fichiers en ligne par programmation ; elle est utilisée ici pour vérifier si une nouvelle version du script est disponible et pour la télécharger automatiquement.

Limitations du script
Le script possÚde certaines limites et ne vérifie pas les points suivants (qui peuvent vous faire perdre des points) :

  • La cohĂ©rence de vos docstrings ainsi que la qualitĂ© du français;
  • La prĂ©sence de code inutile ou redondant Ă  l'intĂ©rieur de vos fonctions;
  • Le respect de la consigne exigeant au moins cinq commits dans votre dĂ©pĂŽt GitHub;
  • Les autres Ă©lĂ©ments Ă  rĂ©aliser, comme la crĂ©ation du fichier sommaire.txt et la conformitĂ© des figures Ă  produire.
Fonctionnement global 2 points négatifs

Le projet fonctionne sans plantage et correctement, et le code est clair et facile à lire. Ce pointage fonctionne en négatif. Si le projet fonctionne correctement en tout temps, vous conservez votre note. Dans le cas contraire, vous perdez des points avec un maximum de 2.

  • Plantage (un script qui plante lorsqu'on l'exĂ©cute) -1 point
  • Code illisible (ex : noms de variables incomprĂ©hensibles, difficultĂ© Ă  comprendre le code) -1 point
  • Information affichĂ©e incohĂ©rente -1 point
  • Autre cas...

Explications dĂ©taillĂ©es​