Affichage et tris de données avec Python
Méthode : Affichage des données sur une carte OpenStreetMap
On se propose d'afficher sur une carte les établissements de l'académie de Lyon à l'aide d'un programme Python.
Pour cela, voici la méthode très simple à suivre :
Copier-coller le programme ci-dessous dans l'éditeur Geany (ou un autre environnement de développement pour Python),
Enregistrer votre programme avec le nom
AffichageCarte.py
juste à côté du fichierCSV
précédemment crée (ou téléchargé),Compléter la section #CONSTANTES (lignes 10 à 15) :
les 3 premières valeurs à rentrer permettront de centrer la carte sur l'académie de Lyon,
Vous pouvez vous aider du site web https://www.openstreetmap.org/ qui fournit une URL[1] centrée sur la carte de la sorte :
https://www.openstreetmap.org/#map=NIVEAU_ZOOM/LATITUDE/LONGITUDE
Bien lire les commentaires dans le programme qui sont derrière #
Une fois les 6 constantes complétées, lancer l'exécution du programme Python à l'aide de la touche F5,
Répondez à la question puis valider,
La navigateur Firefox devrait afficher la carte avec des marqueurs...
#!/usr/bin/env python
# -*- coding: utf-8 -*-
## Import des modules utiles au bon fonctionnement du programme Python
import folium, os, webbrowser, csv
## CONSTANTES
Latitude_centre = #exemple 49.5
Longitude_centre = #exemple 1.5
Zoom_depart = #sur openstreetmap.org, le nombre entier après map=
Fichier_html = 'xxxx.html' #nom du fichier html généré avec l'extension .html
Fichier_csv = 'yyyy.csv' #nom de votre fichier CSV avec l'extension .csv
Separateur = '?' #le séparateur utilisé dans votre fichier CSV
## FONCTIONS
def carte(Carte, Fichier_csv, Fichier_html, Separateur):
"""Fonction qui réalise une carte au format HTML avec des tuiles OpenStreeMap
Elle est centrée sur la latitude et longitude définie dans les constantes
Elle est affichée avec le zoom défini dans les constantes
Elle utilise le fichier CSV défini dans les constantes et affiche tous les enregistrements du fichier
Elle crée le fichier HTML défini dans les constantes
Elle utilse le séparateur défini dans les constantes"""
with open(Fichier_csv, newline='') as fichier:
lecture = csv.DictReader(fichier, delimiter= Separateur)
MesEtabs = list(lecture) #Je transforme en liste pour manipuler les établissements
for etab in MesEtabs:
if etab['latitude'] != '': #Si le champ lat ou long n'est pas vide
latitude = float(etab['latitude']) #Transformation en float de la latitude
longitude = float(etab['longitude'])
folium.Marker( location=[latitude, longitude],
tooltip=etab['Nom_etablissement'], #Au survol, nom de l'établissement
popup=f"{etab['Nom_etablissement']} à {etab['Nom_commune']}", #J'affiche le nom de l'établissement et la commune
icon=folium.Icon(icon="home", color="green"), #Icone home dans le marqueur
).add_to(Carte)
Carte.save(Fichier_html)
def carte_triee(Carte, Fichier_csv, Fichier_html, Separateur):
"""Fonction qui réalise une carte au format HTML avec des tuiles OpenStreeMap
Elle est centrée sur la latitude et longitude définie dans les constantes
Elle est affichée avec le zoom défini dans les constantes
Elle utilise le fichier CSV défini dans les constantes et affiche les lycées en vert et les collèges en bleu
Elle crée le fichier HTML défini dans les constantes
Elle utilse le séparateur défini dans les constantes"""
with open(Fichier_csv, newline='') as fichier:
lecture = csv.DictReader(fichier, delimiter= Separateur)
MesEtabs = list(lecture) #Je transforme en liste pour manipuler les établissements
for etab in MesEtabs:
if etab['latitude'] != '': #Si le champ lat ou long n'est pas vide
latitude = float(etab['latitude']) #Transformation en float de la latitude
longitude = float(etab['longitude'])
if etab['Type_etablissement'] == 'Lycée':
folium.Marker( location=[latitude, longitude],
tooltip=etab['Nom_etablissement'], #Au survol, nom de l'établissement
popup=f"{etab['Nom_etablissement']} à {etab['Nom_commune']}", #J'affiche le nom de l'établissement et la commune
icon=folium.Icon(icon="home", color="green"), #Icone home dans le marqueur
).add_to(Carte)
elif etab['Type_etablissement'] == 'Collège':
folium.Marker( location=[latitude, longitude],
tooltip=etab['Nom_etablissement'], #Au survol, nom de l'établissement
popup=f"{etab['Nom_etablissement']} à {etab['Nom_commune']}", #J'affiche le nom de l'établissement et la commune
icon=folium.Icon(icon="home", color="blue"), #Icone home dans le marqueur
).add_to(Carte)
else: #EREA
folium.Marker( location=[latitude, longitude],
tooltip=etab['Nom_etablissement'], #Au survol, nom de l'établissement
popup=f"{etab['Nom_etablissement']} à {etab['Nom_commune']}", #J'affiche le nom de l'établissement et la commune
icon=folium.Icon(icon="home", color="purple"), #Icone home dans le marqueur
).add_to(Carte)
Carte.save(Fichier_html)
## PROGRAMME PRINCIPAL
reponse = input("""Quelle carte souhaitez-vous consulter ?\n
- une carte avec tous les établissements (taper 1),
- une carte avec la distinction collèges et les lycées (taper 2) ?\n
Réponse : """)
if reponse == '1':
MaCarte = folium.Map(location=(Latitude_centre, Longitude_centre), zoom_start= Zoom_depart)
carte(MaCarte, Fichier_csv, Fichier_html, Separateur)
else:
MaCarte = folium.Map(location=(Latitude_centre, Longitude_centre), zoom_start= Zoom_depart)
carte_triee(MaCarte, Fichier_csv, Fichier_html, Separateur)
webbrowser.open('file://' + os.path.realpath(Fichier_html)) #Ouverture automatique du fichier HTML
Vous pouvez relancer le programme pour afficher la 2ème carte.
N'hésitez pas à analyses les marqueurs pour voir ce qu'ils affichent...
Simulation : Analyse du code Python et modification de la carte
Nous souhaitons changer les couleurs des marqueurs.
La documentation nous précise cela :
The color of the marker. You can use:
[‘red’, ‘blue’, ‘green’, ‘purple’, ‘orange’, ‘darkred’, ’lightred’, ‘beige’, ‘darkblue’, ‘darkgreen’, ‘cadetblue’, ‘darkpurple’, ‘white’, ‘pink’, ‘lightblue’, ‘lightgreen’, ‘gray’, ‘black’, ‘lightgray’]
Changer la couleur des marqueurs avec vos couleurs préférées !
Fondamental :
Faites valider par votre enseignant !
Simulation : Tri des données avec Python
La fonction Python carte_triee()
permet de trier les collèges et les lycées. À présent, vous allez trier sur le nom de la commune.
Trouver le descripteur de votre fichier CSV qui permet de trouver le nom de la commune de chaque établissement puis réaliser cette carte ci-contre
marqueurs verts pour les établissements de la commune de Lyon,
marqueurs bleus pour les établissements de la commune de Villeurbanne,
marqueurs violets pour tous les autres...
Simulation :
On souhaite à présent afficher uniquement les établissements ayant une section sport ou européenne
(ou les 2). Modifier la fonction carte()
en conséquence.
Fondamental :
Faites valider par votre enseignant !
Complément : Pour aller plus loin !
Améliorer votre carte en :
ajoutant des informations dans la pop-up,
modifiant les icônes en utilisant cette bibliothèque (actuellement, nous utilisons 'home'),
affichant uniquement des établissements de plus de 600 élèves, quel est le problème rencontré ?
à vous de trouver d'autres illustrations d'affichage des données avec Python...