#!/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