{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Les tuples (suite)\n", "\n", "Ce deuxième notebook sur les tuples va nous permettre d'approfondir leur utilisation.\n", "\n", "On reprend le problème des régions et départements. Le notebook précédent nous a permis de créer pour une région donnée, un tuple du type :\n", "\n", " **nom_region = ( ( N° du dpt_1 , \"Nom du dpt_1\" , Superficie_1), ( N° du dpt_2 , \"Nom du dpt_2\" , Superficie_2),...)**\n", " \n", " On veut associer à ce premier tuple, un secon tuple donnant la population pour chaque département de la région pour une année donnée. La structure de ce tuple sera :\n", " \n", " **pop_region_annee = (annee, (population_dpt1, population_dpt2, ..., population_dernier_dpt))**\n", " \n", "### 1- Récupérer des informations dans deux tuples\n", "\n", " Une recherche sur Internet nous a permis d'obtenir la population pour les départements de la région Hauts de France en 2018 :\n", " \n", " \n", "| Numéro | Nom | Population |\n", "| -------| ----------------- | -------------- |\n", "| 02 | Aisne | 533316 |\n", "| 59 | Nord | 2606234 |\n", "| 60 | Oise | 827153 |\n", "| 62 | Pas de Calais | 1466743 |\n", "| 80 | Somme | 570662 |\n", " \n", " \n", " On a donc maintenant à disposition les deux tuples suivants :\n", " \n", " **hdf = ((2,\"Aisne\", 7362), (59,\"Nord\", 5743),\n", " (60, \"Oise\", 5860), (62,\"Pas de Calais\", 6671), (80,\"Somme\", 6170))**\n", " \n", " et \n", " \n", " **pop_hdf_2018 = (2018, (533316, 2606234, 827153, 1466743, 570662))**\n", "\n", "### Comme les sportifs le font : un petit échauffement avant de se lancer : \n", "\n", "**pop_hfd_2018** est un tuple contenant:\n", "\n", " -un premier élément de type entier : 2018\n", " -et un second qui est un tuple : (533316, 2606234, 827153, 1466743, 570662)\n", " \n", "Dans la cellule d'entraînement ci-dessous, essayer successivement les instructions suivantes :\n", "\n", " \n", "**pop_hdf_2018\\[0] :**\n", " - que vous a renvoyé cette instruction ?\n", " \n", "**pop_hdf_2018\\[1] :**\n", " - que vous a renvoyé cette instruction ?\n", " - comment récupérer dans ce tuple interne :\n", " - la population du Nord en 2018, c'est à dire : 2606234 ? \n", " - celle de la Somme en 2018, c'est à dire 570662 ?\n", " " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pop_hdf_2018 = (2018, (533316, 2606234, 827153, 1466743, 570662))\n", "\n", "# instruction à tester :\n", "???" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Maintenant, allons plus loin :\n", "\n", "Ecrire un programme permettant **d'aller chercher les informations dans ces deux tuples** pour \n", "afficher un tableau tel que celui-ci :\n", " ![title](images/dpt_pop_1.png)\n", "\n", "\n", "*Remarque : pour obtenir cet aspect de tableau on utilise dans les print( ) :*\n", " \n", " - des tabulations obtenues en insérant la \"séquence d'échappement\" : \\t dans les chaînes\n", " de caractères ou entre les éléments à afficher\n", " - le symbole '|' obtenu avec les touches AltGr et 6\n", " \n", "Le code ci-dessous donne les deux tuples et le début de construction du tableau...\n", "... à vous de trouver le reste !" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "hdf = ((2,\"Aisne \", 7362), (59,\"Nord \", 5743),\n", " (60, \"Oise \", 5860), (62,\"Pas de Calais\", 6671), (80,\"Somme \", 6170))\n", "\n", "\n", "pop_hdf_2018 = (2018, (533316, 2606234, 827153, 1466743, 570662))\n", "print('|----------------------------------------------------------------|')\n", "print('| Département \\t |Superficie \\t\\t | Population \\t |')\n", "# suite du code :\n", "???\n", "...\n", "???" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2 - Une petite amélioration :\n", "\n", "On souhaite voir apparaître en dessous de l'en-tête population, l'année correspondante ...\n", "MAIS cette date **sera prélevée par programmation dans le tuple pop_hdf_2018** pour être affichée :\n", "\n", " ![title](images/dpt_pop_2.png)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "hdf = ((2,\"Aisne \", 7362), (59,\"Nord \", 5743),\n", " (60, \"Oise \", 5860), (62,\"Pas de Calais\", 6671), (80,\"Somme \", 6170))\n", "\n", "\n", "pop_hdf_2018 = (2018, (533316, 2606234, 827153, 1466743, 570662))\n", "print('|----------------------------------------------------------------|')\n", "print('| Département \\t |Superficie \\t\\t | Population \\t |')\n", "# suite du code :\n", "???\n", "...\n", "???" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3- Densité de population\n", "\n", "La densité de la population donne le nombre d'habitants par km².\n", "\n", "**Elle est obtenue en divisant la population par la superficie (exprimée en km²).**\n", "\n", "Modifier le code précédent pour obtenir une quatrième colonne donnant (en habitants/km²) \n", "la densité de population de chaque département. Le résultat sera donné avec une précision\n", "égale au 1/10ème ( = on ne gardera qu'un chiffre après la virgule) :\n", "\n", " ![title](images/dpt_pop_3.png)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "hdf = ((2,\"Aisne \", 7362), (59,\"Nord \", 5743),\n", " (60, \"Oise \", 5860), (62,\"Pas de Calais\", 6671), (80,\"Somme \", 6170))\n", "\n", "\n", "pop_hdf_2018 = (2018, (533316, 2606234, 827153, 1466743, 570662))\n", "# suite du code :\n", "???\n", "...\n", "???" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4- Tracer une représentation graphique\n", "\n", "matplotlib est un \"package\" contenant plusieurs modules dont le module pyplot qui permet de tracer des graphiques. Pour pouvoir utiliser les méthodes du module pyplot il faut donc l'importer. Comme il se trouve à l'intérieur du package matplotlib alors l'importation se fait ainsi : \n", "\n", "**import matplotlib.pyplot**\n", "\n", "Pour utiliser une méthode de pyplot, il faudrait à chaque fois écrire :\n", "\n", "*matplotlib.pyplot.nom_de_la_méthode* ce qui serait fastidieux.\n", "\n", "Python permet de faire de **l'aliasing**, c'est à dire remplacer un nom par un autre. \n", "\n", "**Ainsi il est possible de remplacer \"matplotlib.pyplot\" par un nom plus court et généralement on lui donne l'alias \"plt\" :**\n", "\n", "**import matplotlib.pyplot as plt**\n", "\n", "Pour utiliser une méthode de pyplot il n'y a qu'à écrire : \n", "\n", "*plt.nom_de_la_méthode*\n", "\n", "C'est ce qui est fait dans le code ci-dessous. Le tester :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# la première ligne ci-dessous est indispensable dans le notebook mais il faut la supprimer\n", "# si on veut utiliser le code qui suit dans Thonny\n", "%matplotlib inline \n", "import matplotlib.pyplot as plt # plt est un \"alias\" pour éviter de taper à\n", " # chaque fois matplotlib.pyplot\n", "\n", "# les coordonnées de chaque point du graphique sont réparties dans deux listes :\n", "# l'une pour les abscisses et l'autre pour les ordonnées\n", "# appelées ci-dessous absc et ordo mais elle peuvent avoir n'importe quel nom\n", "absc = [2, 3, 5, 8, 11, 15] # on pourra s'amuser à modifier ces valeurs\n", "ordo = [5, 7, 11, 13, 17, 20] # pour voir les modifications dans le graphique\n", "\n", "plt.plot(absc, ordo) # en anglais : \"to plot\" = \"tracer un graphique\"\n", " # la méthode plot() requiert 2 paramètres : la série des abscisses\n", " # et la série des ordonnées sous forme de listes\n", "plt.title('mon graphique')\n", "plt.xlabel('mes abscisses')\n", "plt.ylabel('mes ordonnées')\n", "plt.grid() # \"grid\" = \"grille\" . C'est donc pour afficher la grille dans le graphique\n", "\n", "plt.show() # pour afficher le graphique pourrait être supprimée dans ce notebook\n", " # mais pas dans Thonny" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5- Application : représenter l'évolution de la population d'un département\n", "\n", "On a récupéré pour d'autres années la population des habitants des départements des Hauts de France :\n", "\n", "pop_hdf_1982 = (1982, (533970, 2520526, 661781, 1412413, 544570))\n", "\n", "pop_hdf_1990 = (1990, (537259, 2531855, 725603, 1433203, 547825))\n", "\n", "pop_hdf_1999 = (1999, (535489, 2555020, 766441, 1441568, 555551))\n", "\n", "pop_hdf_2006 = (2006, (537061, 2565257, 792975, 1453387, 564319))\n", "\n", "pop_hdf_2008 = (2008, (538790, 2564959, 799725, 1459531, 568086))\n", "\n", "pop_hdf_2013 = (2013, (540067, 2595536, 815400, 1465205, 571675))\n", "\n", "pop_hdf_2017 = (2017, (534490, 2604361, 824503, 1468018, 572443))\n", "\n", "pop_hdf_2018 = (2018, (533316, 2606234, 827153, 1466743, 570662))\n", "\n", "Tous ces tuples de tuples ont été intégrés dans une liste nommée **pop_hdf** qui est donc une liste de tuples de tuples...donnée dans le code ci-dessous.\n", "\n", "Avant de se lancer dans la représentation graphique, il est conseillé de bien comprendre comment on peut accéder à telle ou telle valeur contenue dans cette liste. On vous propose d'utiliser la cellule ci-dessous comment entraînement pour y essayer successivement les instructions suivantes et répondre aux questions posées (penser à prendre note de vos résultats) :\n", "\n", "**pop_hdf\\[0] :**\n", " - que vous a renvoyé cette instruction ?\n", " - comment récupérer l'année dans ce tuple : écrire l'instruction qui renvoie : 1982\n", " - quelle instruction permettrait de trouver dans la liste *pop_hdf* l'année *1990* ? , l'année *1999* ? etc\n", " \n", "**pop_hdf\\[0]\\[1] :**\n", " - que vous a renvoyé cette instruction ?\n", " - comment récupérer dans ce tuple la population du Nord cette année là, c'est à dire 2520526 ? \n", " - quelle instruction permettrait de récupérer la population du Nord en 1990 ? , en 1999 ? etc\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# la liste de tuples de tuples :\n", "pop_hdf = [\n", " (1982, (533970, 2520526, 661781, 1412413, 544570)),\n", " (1990, (537259, 2531855, 725603, 1433203, 547825)),\n", " (1999, (535489, 2555020, 766441, 1441568, 555551)),\n", " (2006, (537061, 2565257, 792975, 1453387, 564319)),\n", " (2008, (538790, 2564959, 799725, 1459531, 568086)),\n", " (2013, (540067, 2595536, 815400, 1465205, 571675)),\n", " (2017, (534490, 2604361, 824503, 1468018, 572443)),\n", " (2018, (533316, 2606234, 827153, 1466743, 570662))\n", " ]\n", "# instruction à tester :\n", "pop_hdf[0]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### Représenter l'évolution de la population du département du Nord entre 1982 et 2018.\n", "\n", "L'intégralité du code est fourni, mais **vous devez remplacer les '?'** placés dans la partie **\"remplissage des listes\"** par ce qui sera nécessaire pour obtenir un graphique tel que celui-ci :\n", "\n", " ![title](images/evolution_pop_nord.png)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline \n", "import matplotlib.pyplot as plt\n", "\n", "hdf = ((2,\"Aisne \", 7362), (59,\"Nord \", 5743),\n", " (60, \"Oise \", 5860), (62,\"Pas de Calais\", 6671), (80,\"Somme \", 6170))\n", "\n", "pop_hdf = [\n", " (1982, (533970, 2520526, 661781, 1412413, 544570)),\n", " (1990, (537259, 2531855, 725603, 1433203, 547825)),\n", " (1999, (535489, 2555020, 766441, 1441568, 555551)),\n", " (2006, (537061, 2565257, 792975, 1453387, 564319)),\n", " (2008, (538790, 2564959, 799725, 1459531, 568086)),\n", " (2013, (540067, 2595536, 815400, 1465205, 571675)),\n", " (2017, (534490, 2604361, 824503, 1468018, 572443)),\n", " (2018, (533316, 2606234, 827153, 1466743, 570662))\n", " ]\n", "# création des listes d'abscisses et d'ordonnées\n", "absc = []\n", "ordo = []\n", "# remplissage des listes : remplacer les '?' pour obtenir un code fonctionnel\n", "for i in range(len(hdf)):\n", " absc.append(pop_hdf[???][???])\n", " ordo.append(pop_hdf[???][???][???])\n", " \n", "plt.plot(absc, ordo)\n", "plt.title('Evolution de la population dans le Nord')\n", "plt.xlabel('années')\n", "plt.ylabel('habitants')\n", "plt.grid()\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-final" } }, "nbformat": 4, "nbformat_minor": 2 }