{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Données structurées TP n° 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Écrire votre nom ici \n", "\n", "Nom : \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Objectif :\n", "\n", "***On dispose d'un fichier (reg2018.txt) qui permet uniquement de connaître le code INSEE des chefs-lieux de région, et pas leur nom.***\n", "\n", "***Le but de l'activité va consister à croiser les données de ce fichier avec les données sur les communes de France afin d'afficher au final la liste des régions avec le nom de leur chef-lieu.***\n", "\n", "
\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Le fichier reg2018.txt\n", "\n", "On récupère le fichier reg2018.txt\n", "\n", "**Ses descripteurs sont décrit ci-dessous :**\n", "\n", "\n", "\n", "\n", "Comme vous le constatez le chef-lieu d'une région est précisé par un code (INSEE) ( vous trouverez davantage d'informations sur les code ici )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Le fichier des communes de France : comsimp2018.txt\n", "\n", "On récupère le fichier comsimp2018.txt\n", "\n", "**Ses descripteurs sont décrit ci-dessous :**\n", "\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "***Ces deux collections ont un descripteur en commun (REG) et (REGION)***\n", "\n", "***De plus : Une commune dont le code CHEFLIEU est 4 est chef lieu de région***\n", "\n", "## La méthode :\n", "\n", "* Parcourir la liste des communes\n", "* Si son code CHEFLIEU est égal à 4\n", " * Parcourir la liste des régions\n", " * Si les codes régions sont égaux\n", " \n", " **On a trouvé la région et son chef-lieu**\n", "\n", "\n", "**En d'autre termes:**\n", "\n", " * Parcourir l'ensemble des communes dont la valeur du descripteur 1 (=CHEFLIEU) est égal à '4' de façon à ne retenir que les communes chef-lieu de région,\n", "\n", " * Pour chacune de ces communes, parcourir l'ensemble des régions et,\n", " * Si le descripteur 0 (=REGION) de l'une des régions est identique au descripteur 2 (=REG) de la commune (ce qui veut dire qu'on a trouvé la région de la commune concernée),\n", " * afficher dans la console de Python la valeur du descripteur 3 (=NCC) de la région suivie de celle du descripteur 9 (=NCC) de la commune, c'est à dire le nom de la région et celui de la commune." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "## Manipuler des fichiers (txt ou csv)\n", "\n", "*****Placez le fichier reg2018.txt dans le même dossier que ce notebook*****\n", "\n", "Le code ci-dessous : \n", "* Charge le fichier\n", "* Stocke dans la liste datas_regions, les lignes du fichier ( sauf celle des desripteurs)\n", "* Affiche la première ligne : ['01', '97105', '3', 'GUADELOUPE', 'Guadeloupe']" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import csv\n", "with open('reg2018.txt', 'r', encoding='latin1') as f:\n", " dialecte_fichier_csv = csv.Sniffer().sniff(f.readline())# repère le type de séparateurs (',')(';')etc..\n", " datas_regions = list(csv.reader(f, dialect=dialecte_fichier_csv))\n", "\n", "print(datas_regions[0]) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Pour avoir accès à 'GUADELOUPE' il faut écrire : print(datas_regions[0][3])**\n", "\n", "***C'est à dire la 3ème valeur de la liste : datas_regions[0]***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "### Faire des boucles sur la liste datas_regions\n", "\n", "**Ce programme affiche les données de toutes les régions :**\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import csv\n", "with open('reg2018.txt', 'r', encoding='latin1') as f:\n", " dialecte_fichier_csv = csv.Sniffer().sniff(f.readline())\n", " datas_regions = list(csv.reader(f, dialect=dialecte_fichier_csv))\n", " \n", "# On parcourt la liste avec une boucle\n", "for region in datas_regions:\n", " print(region)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Et celui-ci affiche seulement les noms**" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import csv\n", "with open('reg2018.txt', 'r', encoding='latin1') as f:\n", " dialecte_fichier_csv = csv.Sniffer().sniff(f.readline())\n", " datas_regions = list(csv.reader(f, dialect=dialecte_fichier_csv))\n", " \n", "# On parcourt la liste avec une boucle\n", "for region in datas_regions:\n", " print(region[4])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Cette instruction affiche la longueur de la liste datas_regions**" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import csv\n", "with open('reg2018.txt', 'r', encoding='latin1') as f:\n", " dialecte_fichier_csv = csv.Sniffer().sniff(f.readline())\n", " datas_regions = list(csv.reader(f, dialect=dialecte_fichier_csv))\n", " \n", "print(len(datas_regions))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "## À faire :\n", "\n", "* **Placez les deux fichiers (reg2018.txt) et (commsimp2018.txt) dans le dossier de ce notebook**\n", "* **Le code ci-dessous charge les deux fichiers dans les listes (datas_regions) et datas_communes)**\n", "\n", "**Il faut le compléter pour qu'il affiche chaque région avec son chef-lieu**" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import csv\n", "\n", "with open('reg2018.txt', 'r', encoding='latin1') as f:\n", " dialecte_fichier_csv = csv.Sniffer().sniff(f.readline())\n", " datas_regions = list(csv.reader(f, dialect=dialecte_fichier_csv))\n", "\n", "with open('comsimp2018.txt', 'r', encoding='latin1') as f:\n", " dialecte_fichier_csv = csv.Sniffer().sniff(f.readline())\n", " datas_communes = list(csv.reader(f, dialect=dialecte_fichier_csv))\n", " \n", "print(\"Les régions avec le nom de leur chefs-lieux de Région\")\n", "for commune in datas_communes:\n", " if commune[1]=='...':\n", " for region in datas_regions:\n", " if commune[...]==region[...]:\n", " print(region[...], ' : ', commune[...])\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "\n", "## Faire afficher ces résultats sur une carte\n", "\n", "\n", "Reprenons le programme précédent en y intégrant les éléments nécessaires pour un affichage sur une carte:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import csv\n", "import geopy\n", "import folium\n", "\n", "with open('reg2018.txt', 'r', encoding='latin1') as f:\n", " dialecte_fichier_csv = csv.Sniffer().sniff(f.readline())\n", " datas_regions = list(csv.reader(f, dialect=dialecte_fichier_csv))\n", "\n", "with open('comsimp2018.txt', 'r', encoding='latin1') as f:\n", " dialecte_fichier_csv = csv.Sniffer().sniff(f.readline())\n", " datas_communes = list(csv.reader(f, dialect=dialecte_fichier_csv))\n", "\n", "# fonctionnel (sans clé api)\n", "from geopy.geocoders import ArcGIS\n", "geolocator = ArcGIS()\n", "\n", "# on récupère les coordonnées GPS de Paris\n", "location = geolocator.geocode(\"Paris\")\n", "gps_ville = [location.latitude, location.longitude]\n", "# initialisation de la carte : on prend Paris comme centre\n", "# avoir choisi zoom_start=1 signifie qu'on va voir le monde entier\n", "# des boutons +/- permettrons de zoomer sur la carte au besoin.\n", "carte = folium.Map(location=gps_ville, zoom_start=1,tiles='Stamen Toner') \n", " \n", " \n", "print(\"Les régions avec le nom de leur chefs-lieux de Région\")\n", "for commune in datas_communes:\n", " if commune[1]=='...':\n", " # nom de la commune\n", " nom = commune[9]\n", " # géolocalisation de la commune\n", " location = geolocator.geocode(nom)\n", " coordonnees_gps = [location.latitude, location.longitude]\n", " # ajout à la carte de la commune\n", " folium.Marker(coordonnees_gps,popup=nom,).add_to(carte)\n", " for region in datas_regions:\n", " if commune[...]==region[...]:\n", " print(region[...], ' : ', commune[...]) \n", "display(carte)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# À faire :\n", "\n", "Récupérer le fichier depts2018.txt\n", "\n", "Voici sa structure :\n", "\n", "\n", "\n", "***Écrire un script en Python permettant, à partir des fichiers depts2018.txt et comsimp2018.txt d'afficher la liste des noms de département avec celui de leur chefs-lieux.***\n", "\n", "***On utilisera les deux collections dont le descripteur DEP est en commun et on procédera en adaptant la méthode employée pour les régions.***\n", "\n", "***On fera attention à ce qu'une commune chef-lieu de région est aussi chef-lieu de département.***" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Écrire le script ici" ] } ], "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }