{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Cas d'étude : suivi temporel des oiseaux communs\n", "\n", "On revient sur notre table de suivi des oiseaux entre 2001 et 2018. \n", "\n", "Un petit code pour vérifier que tout est en place avant de passer à la suite :\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import csv\n", "\n", "fichier = open('data/tendance_STOC.csv', 'r') # ouverture du fichier en lecture\n", "\n", "lecteur = list(csv.DictReader(fichier, delimiter=';'))\n", "fichier.close()\n", "\n", "stoc = [] # création d'une liste vide\n", "for ligne in lecteur: \n", " stoc.append(dict(ligne)) # ajout \" à la volée\" des dictionnaires représentant les enregistrements de la table\n", "\n", " # ...affichage pour contrôle du résultat: \n", "for elt in stoc:\n", " print(elt)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On va poursuivre plusieurs objectifs :\n", " - trier les données pour mettre en avant les espèces les plus menacées\n", " - améliorer la présentation des données grâce à l'utilisation d'une bibliothèque graphique\n", " \n", " ## 1- Tri des données :\n", " \n", "Trier la table de données selon le critère **'pourcentage de variation 2001-2018'**.\n", " \n", "On souhaite voir en **premier les espèces les plus menacées**. \n", "\n", "La table triée sera appelée **stoc_trie**" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Trier de la table de données \n", "import csv\n", "\n", "fichier = open('data/tendance_STOC.csv', 'r') # ouverture du fichier en lecture\n", "\n", "lecteur = list(csv.DictReader(fichier, delimiter=';'))\n", "fichier.close()\n", "\n", "stoc = [] # création d'une liste vide\n", "for ligne in lecteur: \n", " stoc.append(dict(ligne)) # ajout \" à la volée\" des dictionnaires représentant les enregistrements de la table\n", "\n", "# definition de la fonction associée à 'key' :\n", "def variation(elt):\n", " return float(elt['pourcentage de variation 2001-2018'])\n", "\n", "# compléter le code :\n", "stoc_trie = \n", "\n", "for elt in stoc_trie:\n", " print(elt)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2- Améliorer la présentation des données\n", "\n", "Suivre le tutoriel sur la présentation de données à l'aide du notebook : **complements_matplotlib_barh_corrige.ipynb** \n", "\n", "Pour réaliser ce graphique, on aura besoin de deux listes de données :\n", " - une qui donnera en ordonnée les noms des espèces en face de chaque barre. On la nommera 'liste_oiseaux'\n", " - l'autre qui permettra d'affecter la bonne longueur à chaque barre du graphique. On la nommera 'variations'\n", " \n", " Compléter le code suivant pour obtenir le graphe complet :\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline \n", "\n", "import csv\n", "import matplotlib.pyplot as plt\n", "\n", "fichier = open('data/tendance_STOC.csv', 'r') # ouverture du fichier en lecture\n", "\n", "lecteur = list(csv.DictReader(fichier, delimiter=';'))\n", "fichier.close()\n", "\n", "stoc = [] # création d'une liste vide\n", "for ligne in lecteur: \n", " stoc.append(dict(ligne)) # ajout \" à la volée\" des dictionnaires représentant les enregistrements de la table\n", "\n", "# definition de la fonction associée à 'key' :\n", "def variation(elt):\n", " return float(elt['pourcentage de variation 2001-2018'])\n", "\n", "# Compléter le code (création des listes) :\n", "stoc_trie = \n", "\n", "# créer en compréhension les listes : 'liste_oiseaux' et 'variations' :\n", "liste_oiseaux = \n", "variations = \n", "\n", "# code pour la représentation graphique (on pourra s'inspirer en l'adaptant du code d'exemple étudié dans \n", "# le notebook sur les graphiques en barre):\n", "plt.rcdefaults()\n", "plt.gcf().set_size_inches(15, 30) # on définit ici les dimensions du graphique\n", "\n", "# à compléter :\n", "y_pos = \n", "plt.barh( ??? , ??? ,height=0.6, align='edge', alpha=0.8)\n", "\n", "plt.yticks( , ) \n", "plt.xticks(range(-100,800,100))\n", "\n", "plt.xlabel(' ??? ')\n", "plt.title(' ??? ')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Analyse des résultats :\n", "\n", " Ce diagramme nous montre que certaines espèces ont eu dans cette période une évolution très favorable, voire même spectaculaire ! Ceci est dû aux **programmes de conservation** de certains milieux naturels (grande aigrette) ou d’espèces (cigogne blanche, outarde canepetière). De même, les espèces dites « généralistes » (qui peuvent s’adapter aux différents milieux ruraux, forestiers ou urbains) se portent mieux et progressent (mésange charbonnière)\n", "\n", "\n", "A l'inverse un nombre bien plus grand d'espèces ont vu leur effectif diminuer. Les raisons de ces diminutions sont multiples. Tout d'abord on constate que ces **diminutions concernent essentiellement les espèces spécialistes des milieux agricoles** (Tarier des prés, pipit farlouse, alouette des champs, moineau friquet, bruant jaune, perdrix grise, caille des blés, … ). Leur déclin est **dû à l’intensification des pratiques agricoles depuis la deuxième moitié du XXe siècle**, qui entraîne la destruction de leurs habitats : \n", " - coupe d’arbres isolés et arrachage de haies dans lesquels les oiseaux nichent, \n", " - taille de plus en plus grande des champs = simplification du paysage contrairement à ce qu'offrirait une polyculture, \n", " - utilisation croissante de produits phytosanitaires empoisonnant les insectes dont les oiseaux se nourrissent (raréfaction de nourriture + empoisonnement). \n", " - Les fauches de plus en plus précoces sont également responsables du déclin des espèces nichant au sol comme les cailles de blé, les jeunes n’étant pas assez âgés pour s’envoler et fuir lors de la fauche. \n", " \n", " **Les oiseaux spécialistes sont donc principalement victimes de la destruction de leurs habitats.** \n", " \n", " D’autres facteurs comme la **chasse** peuvent expliquer le déclin de certaines espèces (courlis cendré et courlis corlieu- pourtant protégé), **alors même que celles-ci font l’objet d’une protection au niveau européen...**\n", "\n", "\n", "La vision globale des données est un peu \"polluée\" par la présence des espèces en très forte augmentation. On se propose de représenter uniquement les espèces dont l'effectif est en diminution **significative**, et de les représenter, de haut en bas, de la plus menacée à la moins menacée.\n", "\n", "Avec quelques efforts supplémentaires, on pourra faire cette représentation avec des couleurs différentes pour chaque barre :\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline \n", "\n", "import csv\n", "import matplotlib.pyplot as plt\n", "import matplotlib.cm as cm\n", "\n", "fichier = open('data/tendance_STOC.csv', 'r') # ouverture du fichier en lecture\n", "\n", "lecteur = list(csv.DictReader(fichier, delimiter=';'))\n", "fichier.close()\n", "\n", "stoc = [] # création d'une liste vide\n", "for ligne in lecteur: \n", " stoc.append(dict(ligne)) # ajout \" à la volée\" des dictionnaires représentant les enregistrements de la table\n", "\n", "# definition de la fonction associée à 'key' :\n", "def variation(elt):\n", " return float(elt['pourcentage de variation 2001-2018'])\n", "\n", "\n", "stoc_trie = ???\n", "\n", "# création de la structure extraction en compréhension :\n", "extraction = ???\n", "\n", "# stoc_trie est constitué à partir de extraction et non plus du stoc complet :\n", "stoc_trie = ???\n", "\n", "\n", "liste_oiseaux = ???\n", "variations = ???\n", "y_pos = ???\n", "\n", "\n", "plt.rcdefaults()\n", "plt.gcf().set_size_inches(15, 15) # on définit ici les dimensions du graphique\n", "\n", "# on crée une palette de couleurs. Elle contient autant de couleurs différentes\n", "# qu'il n'y a d'éléments dans la liste 'liste_oiseaux':\n", "palette = cm.get_cmap('viridis', len(liste_oiseaux) )\n", "plt.barh(???, ???,height=0.6, align='edge',color=palette.colors, alpha=0.8)\n", "plt.yticks(???, ???)\n", "\n", " \n", "plt.xticks(range(-100,12,5))\n", "plt.xlabel('???')\n", "plt.title('???')\n", "\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }