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