{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "# Traitement de données en table\n", "\n", "## 1.1 Exemple d'un fichier texte tabulé :\n", "\n", "On va travailler pour commencer avec une version réduite du fichier departements.txt de façon à ne pas être submergés par les données.\n", "Idée : si on sait traiter les données dans un fichier de quelques lignes, alors on saura le faire avec davantage de lignes.\n", "\n", "### 1.1.1 Ouverture d'un fichier\n", "\n", "Exécuter le code suivant :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fichier = open('data/departements_reduit.txt', 'r') # ouverture du fichier en lecture\n", "contenu = fichier.readlines() # readlines permet de lire toutes les lignes du fichier\n", "fichier.close # toujours penser à refermer le fichier. Ce qu'il contient a été mis dans la variable contenu\n", "print('Type de la variable contenu : ', type(contenu), \" Nombre d'éléments dedans : \", len(contenu), '\\n')\n", "print(contenu)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Le résultat de l'exécution de ce code montre que la variable contenu :\n", " - est une liste\n", " - qu'elle contient 4 éléments\n", " \n", "On souhaite obtenir une liste de listes, chaque sous-liste représentant un **enregistrement** de notre table de données. Par exemple la sous-liste concernant le premier département aurait la forme :\n", "\n", "**\\['1', 'Ain', 'Auvergne-Rhône-Alpes', 'Bourg-en-Bresse', '5762', '631877', '109.7']** \n", "\n", "On va donc :\n", " - créer une nouvelle liste vide appelée 'france'\n", " - récupérer un par un les éléments de la liste 'contenu' (chaque élément est une chaîne de caractères qui correspond en fait à une ligne de notre table de données)\n", " - enlever à chacune de ces chaînes le caractère '\\n' (nouvelle ligne) avec la méthode rstrip()\n", " - découper chacune de ces chaînes au nivau de chaque tabulation pour récupérer les 'valeurs' des différents 'attributs' avec la méthode split()\n", " - ajouter cette chaîne modifiée à la liste 'france' avec la méthode append() :\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fichier = open('data/departements_reduit.txt', 'r') # ouverture du fichier en lecture\n", "contenu = fichier.readlines() # readlines permet de lire toutes les lignes du fichier\n", "fichier.close # toujours penser à refermer le fichier. Ce qu'il contient a été mis dans la variable contenu\n", "\n", "france = []\n", "for elt in contenu: # elt représente en fait une ligne du fichier texte\n", " elt = elt.rstrip('\\n') # on retire le caractère 'newline' ('\\n') à la fin de chaque élément de la liste\n", " france.append(elt.split('\\t')) # on ajoute à la liste 'france' l'élément découpé au niveau de chaque tabulation ('\\t')\n", " \n", "print(france)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Modifier le code pour avoir un affichage ligne par ligne de chacune des sous-listes qui constituent la liste 'france' :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fichier = open('data/departements_reduit.txt', 'r') # ouverture du fichier en lecture\n", "contenu = fichier.readlines() # readlines permet de lire toutes les lignes du fichier\n", "fichier.close # toujours penser à refermer le fichier. Ce qu'il contient a été mis dans la variable contenu\n", "\n", "france = []\n", "for elt in contenu: # elt représente en fait une ligne du fichier texte\n", " elt = elt.rstrip('\\n') # on retire le caractère 'newline' ('\\n') à la fin de chaque élément de la liste\n", " france.append(elt.split('\\t')) # on ajoute à la liste 'france' l'élément découpé sur chaque tabulation ('\\t')\n", " \n", "# affichage à réaliser comme demandé :\n", "???\n", "...\n", "???\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.1.2 - Traitement des données\n", "\n", "On est ici sur un cas déjà rencontré : celui de la liste de liste.\n", "\n", "Pour la liste de listes **france** :\n", "- que représente **france\\[i]** ?\n", "- que représente **france\\[0]**\n", "- dans le fichier **departements_reduit.txt**, quelle valeur maximum peut prendre i ?\n", "\n", "Faire les tests dans la cellule ci-dessous :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# tests :\n", "???\n", "...\n", "???\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " - que représente france\\[i]\\[j] ?\n", " - quelle valeur maximum peut prendre j ?\n", " - comment faire pour récupérer la superficie d'un département puis faire des calculs avec ?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n", "\n", "# 1- récupérer la superficie d'un département :\n", "???\n", "...\n", "???\n", "\n", "# 2- faire la somme des superficies de tous les départements du fichier departements_reduit.txt :\n", "# à quel problème est-on confronté :\n", "???\n", "...\n", "???\n", "\n", "# 3- Réaliser le calcul de densité pour un département et afficher avec un chiffre après la virgule \n", "# la densité calculée ainsi quela densité donnée par le fichier\n", "# relire le 4.1.2 Présenter un résultat numérique du cours sur la carte Microbit\n", "???\n", "...\n", "???\n", "\n", "# 4- Comment faire pour vérifier si le calcul fait et la valeur annoncée pour la densité sont identiques ? \n", "# (A quel problème est-on confronté ?)\n", "???\n", "...\n", "???\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On va travailler maintenant avec le fichier complet : 'departements.txt' :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# écrire ci-dessous le code nécessaire pour travailler avec les données du fichier 'departements.txt' :\n", "???\n", "...\n", "???\n", "\n", "\n", "\n", "# test pour deux départements :\n", "print(france[1])\n", "print(france[60])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- pourquoi france\\[1] correspond à l'enregistrement de l'Allier alors qu'il faut faire france\\[60] pour obtenir l'enregistrement du Nord ?\n", "\n", "Ecrire alors une fonction **ce_departement(liste_dpt, numero)** permettant d'accéder à l'enregistrement d'un département particulier situé dans une liste nommée **liste_dpt**. Quel doit être le type de numero pour que le programme fonctionne quel que soit le département concerné. \n", "\n", "La fonction doit seulement renvoyer la sous-liste correspondant au numéro désiré. \n", "\n", "L'affichage sera pris en charge dans le programme principal par un appel de la fonction dans la fonction print( ).\n", "\n", "Remarque : Bien vérifier le programme sur différents exemples. (Il pourra être utile d'avoir bien consulté le fichier departements.txt avant de se lancer dans ce programme." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# définition de la fonction :\n", "def ce_departement(liste_dpt,numero):\n", " \"\"\" fonction qui renvoie un enregistrement correspondant au numéro de département demandé\n", " :param liste_dpt: (list) une liste de départements (le numéro du dpt en est le premier élément)\n", " :param numero: (str) le numéro du département\n", " \"\"\"\n", " # compléter le code de cette fonction :\n", " ???\n", " ...\n", " ???\n", " \n", "# programme principal: \n", "fichier = open('data/departements.txt', 'r') # ouverture du fichier en lecture\n", "contenu = fichier.readlines() # readlines permet de lire toutes les lignes du fichier\n", "fichier.close # toujours penser à refermer le fichier. Ce qu'il contient a été mis dans la variable contenu\n", "\n", "france = []\n", "for elt in contenu: # elt représente en fait une ligne du fichier texte\n", " elt = elt.rstrip('\\n') # on retire le caractère 'newline' à la fin de chaque élément de la liste\n", " france.append(elt.split('\\t')) # on ajoute à la liste 'france' l'élément découpé sur chaque tabulation ('\\t')\n", "\n", "# affichage pour un département :\n", "???\n", "...\n", "???" ] } ], "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 }