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