Pratique de geopandas: données vélib
Installations préalables :
!pip install pandas fiona shapely pyproj rtree # à faire obligatoirement en premier pour utiliser rtree ou pygeos pour les jointures spatiales
!pip install contextily
!pip install geopandas
import geopandas as gpd
Lire et enrichir des données spatiales
Dans cette partie, nous utiliserons la fonction suivante, qui facilite
le téléchargement et le dézippage des données proposées sur data.gouv
:
import requests
import tempfile
import zipfile
temporary_location = tempfile.gettempdir()
def download_unzip(url, dirname = tempfile.gettempdir(), destname = "borders"):
myfile = requests.get(url)
open(dirname + '/' + destname + '.zip', 'wb').write(myfile.content)
with zipfile.ZipFile(dirname + '/' + destname + '.zip', 'r') as zip_ref:
zip_ref.extractall(dirname + '/' + destname)
Exercice 1: lire et explorer la structure de fichiers géographiques
- Utiliser la fonction
download_unzip
avec l’url https://www.data.gouv.fr/fr/datasets/r/07b7c9a2-d1e2-4da6-9f20-01a7b72d4b12 pour télécharger les données communales. - Importer le fichier avec la package
geopandas
(si vous avez laissé les paramètres par défaut, le fichier devrait être à l’emplacementtemporary_location + "/borders/communes-20190101.json"
). Vous pouvez le nommercommunes_borders
- Regarder les premières lignes des données. Identifier la différence avec un DataFrame standard.
- Afficher l’attribut
crs
decommunes_borders
. Ce dernier contrôle la transformation de l’espace tridimensionnel terrestre en une surface plane. - Afficher les communes de l’Aveyron (département 12) et utiliser la méthode
plot
- Réprésenter la carte de Paris : quel est le problème ?
En effet, on ne dispose ainsi pas des limites des arrondissements parisiens, ce qui appauvrit grandement la carte de Paris. On peut les récupérer directement depuis le site d’open data du grand Paris (cf. tutoriel du chapitre précédent).
Exercice 2: compléter des données spatiales issues de sources différentes
- Importer les données de découpage des arrondissements parisiens à l’adresse https://opendata.paris.fr/explore/dataset/arrondissements/download/?format=geojson&timezone=Europe/Berlin&lang=fr
- Vérifier sur une carte que les découpages des arrondissements sont bien présents
- Vérifier l’attribut
crs
. Est-il cohérent avec celui des données communales ? - Retirer Paris du jeu de données communales et utiliser les arrondissements
pour enrichir (nommer l’objet obtenu
data_borders
). Ici, on peut ne pas se soucier de la variable commune de superficie aux niveaux différents car on va la recréer. En revanche, renommer la variablec_arinsee
eninsee
avec la méthoderename
et faire attention aux types des variables - Créer une variable
dep
stockant le département - Représenter les communes de la petite couronne parisienne (75, 92, 93, 94)
Utiliser des données géographiques comme des couches graphiques
Souvent, le découpage communal ne sert qu’en fond de cartes, pour donner des repères. En complément de celui-ci, on peut désirer exploiter un autre jeu de données. On va partir des données de localisation des stations velib, disponibles sur le site d’open data de la ville de Paris et requêtables directement par l’url https://opendata.paris.fr/explore/dataset/velib-emplacement-des-stations/download/?format=geojson&timezone=Europe/Berlin&lang=fr
Exercice 3: importer et explorer les données velib
- Importer les données velib sous le nom
station
- Représenter sur une carte les 50 stations les plus importantes (variable
capacity
). Vous pouvez également afficher le fonds de carte des arrondissements en ne gardant que les départements de la petite couronne (75, 92, 93, 94). Cette page peut vous aider pour afficher plusieurs couches à la fois. - Afficher également les réseaux de transport en communs, disponibles ici. L’url à requêter est https://data.iledefrance-mobilites.fr/explore/dataset/traces-du-reseau-ferre-idf/download/?format=geojson&timezone=Europe/Berlin&lang=fr
Jointures spatiales
Les jointures attributaires fonctionnent comme avec un DataFrame pandas
. Pour conserver un objet spatial in fine, il faut faire attention à utiliser en premier (base de gauche) l’objet geopandas
. En revanche, l’un des intérêts des objets geopandas est qu’on peut également faire une jointure sur la dimension spatiale.
La documentation à laquelle se référer est ici.
Exercice 4: Associer les stations aux communes et arrondissements auxquels elles appartiennent
- Faire une jointure spatiale pour enrichir les données de stations en y ajoutant des informations de
data_paris
. Appeler cet objetstations_info
- Représenter la carte des stations du 19e arrondissement (s’aider de la variable
c_ar
). Vous pouvez mettre en fond de carte les arrondissements parisiens. - Compter le nombre de stations velib et le nombre de places velib par arrondissement ou commune (pour vous aider, vous pouvez compléter vos connaissances avec ce tutoriel). Représenter sur une carte chacune des informations
- Représenter les mêmes informations mais en densité (diviser par la surface de l’arrondissement ou commune en km2)
Trouver la station la plus proche
Une aide ici
Cet exemple peut également vous aider à comprendre certains concepts :
Exercice 5 (optionnel): Trouver la station de métro la plus proche d’une station de vélib
- Charger la localisation des stations de transports présente ici : https://data.ratp.fr/explore/dataset/accessibilite-des-gares-et-stations-metro-et-rer-ratp/download/?format=geojson&timezone=Europe/Berlin&lang=fr. Appelez-la
stations_transport
et ne gardez que les variables ’nomptar’ et ‘geometry’. - Trouver la station de transport la plus proche de la station de vélib “Edgard Quinet - Gaité”. La ligne de code
ensemble_stations = stations_transport.unary_union
vous sera utile ainsi que l’importation de la fonctionfrom shapely.ops import nearest_points
. - Généraliser aux 10 premières lignes de la table
stations
des vélibs en indiquant pour chaque station velib quelle est la station de transport en commun la plus proche dans une nouvelle colonne appeléeNearest
.