Pratique de geopandas avec les données vélib

Download nbviewer Onyxia
Binder Open In Colab githubdev

</p>

Installations préalables :

In [2]:
!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
!pip install pygeos

Les instructions d’installation du package cartiflette sont quant à elles détaillées dans le chapitre précédent.

In [3]:
import geopandas as gpd

Lire et enrichir des données spatiales

Dans cette partie, nous utiliserons le package cartiflette qui facilite la récupération de contours de cartes. Une version antérieure de cet exercice, présentée sous forme d’exercice supplémentaire 👇️, utilisait des fonds de carte issus de data.gouv.

In [4]:
 
/src/cartiflette/cartiflette/download/dev.py:153: SyntaxWarning:

"is" with a literal. Did you mean "=="?
In [6]:
 
ID NOM NOM_M INSEE_COM STATUT POPULATION INSEE_CAN INSEE_ARR INSEE_DEP INSEE_REG SIREN_EPCI geometry
0 COMMUNE_0000000009736048 Paris PARIS 75056 Capitale d'état 2165423 NR 1 75 11 200054781 POLYGON ((653313.800 6857558.100, 653249.300 6...
0 COMMUNE_0000000009736037 Levallois-Perret LEVALLOIS-PERRET 92044 Commune simple 66082 16 2 92 11 200054781/200057982 POLYGON ((647761.400 6867306.900, 647839.200 6...
1 COMMUNE_0000000009736055 Bois-Colombes BOIS-COLOMBES 92009 Commune simple 28841 11 2 92 11 200054781/200057990 POLYGON ((646224.700 6867615.800, 646229.000 6...
2 COMMUNE_0000000009736538 Malakoff MALAKOFF 92046 Commune simple 30950 18 1 92 11 200054781/200057966 POLYGON ((646995.300 6857373.400, 647177.500 6...
3 COMMUNE_0000000009736038 Clichy CLICHY 92024 Commune simple 63089 09 2 92 11 200054781/200057990 POLYGON ((648952.800 6866241.200, 648865.900 6...
In [7]:
 
<Derived Projected CRS: EPSG:2154>
Name: RGF93 v1 / Lambert-93
Axis Info [cartesian]:
- X[east]: Easting (metre)
- Y[north]: Northing (metre)
Area of Use:
- name: France - onshore and offshore, mainland and Corsica (France métropolitaine including Corsica).
- bounds: (-9.86, 41.15, 10.38, 51.56)
Coordinate Operation:
- name: Lambert-93
- method: Lambert Conic Conformal (2SP)
Datum: Reseau Geodesique Francais 1993 v1
- Ellipsoid: GRS 1980
- Prime Meridian: Greenwich

La carte du 92 est la suivante:

In [8]:
 

Quant à Paris, à l’issue de la question 5, la carte aura l’aspect suivant:

In [9]:
 

En effet, on ne dispose ainsi pas des limites des arrondissements parisiens, ce qui appauvrit grandement la carte de Paris. On pourrait les récupérer directement depuis le site d’open-data du Grand Paris, ce qui est proposé en exercice supplémentaire 👇️. On propose ici d’utiliser à nouveau cartiflette pour cela afin de disposer du fonds de carte officiel.

La carte de Paris intra-muros est, après la récupération des arrondissements avec cartiflette de ce type là:

In [11]:
 
In [12]:
 
epsg:2154
epsg:2154
True

La carte obtenue à l’issue de la question 6, c’est-à-dire après avoir consolidé les données, devrait avoir l’aspect suivant:

In [14]:
 

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

In [15]:
 
capacity name stationcode geometry
0 48 Le Brun - Gobelins 13007 POINT (2.35347 48.83509)
1 20 Beaux-Arts - Bonaparte 6021 POINT (2.33485 48.85645)
2 18 Raspail - Varenne 7004 POINT (2.32639 48.85315)
3 30 Jules Guesde - Pont du Port à l'Anglais 44017 POINT (2.41721 48.79629)
4 0 Verger - Colonel Guichard 21328 POINT (2.26704 48.81638)

La carte attendu à l’issue de la question 3 a l’aspect suivant:

In [17]:
 
Text(0.5, 1.0, 'Les 50 principales stations de Vélib')
In [18]:
 
['TRAMWAY' 'RER' 'TRAIN' 'TER' 'METRO' 'NAVETTE' 'RER C']

L’ajout du réseau de métro permet d’obtenir une carte ressemblant à celle-ci:

In [19]:
 
Text(0.5, 1.0, 'Les 50 principales stations de Vélib')

Pour faire une belle carte, il faudrait couper les lignes de métro via une jointure spatiale ou utiliser un fonds de carte conceptuel. L’exercice suivant propose de mettre en oeuvre la deuxième méthode. La première est proposée en exercice supplémentaire 👇️.

Par exemple, en utilisant le fond Stamen.Watercolor, on obtient la carte suivante. Celle-ci permet déjà de mieux localiser les stations.

In [20]:
 

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 grâce à sjoin.

La documentation à laquelle se référer est ici.

In [21]:
 
capacity name stationcode geometry index_right ID NOM NOM_M INSEE_COM STATUT POPULATION INSEE_CAN INSEE_ARR INSEE_DEP INSEE_REG SIREN_EPCI INSEE_ARM
0 48 Le Brun - Gobelins 13007 POINT (2.35347 48.83509) 8 ARR_MUNI0000000009736531 Paris 13e Arrondissement PARIS 13E ARRONDISSEMENT 75056 NaN 180005 NaN NaN 75 NaN NaN 75113
75 20 Ivry - Baudricourt 13037 POINT (2.36311 48.82470) 8 ARR_MUNI0000000009736531 Paris 13e Arrondissement PARIS 13E ARRONDISSEMENT 75056 NaN 180005 NaN NaN 75 NaN NaN 75113
113 18 Ivry - Simone Weil 13039 POINT (2.36591 48.82328) 8 ARR_MUNI0000000009736531 Paris 13e Arrondissement PARIS 13E ARRONDISSEMENT 75056 NaN 180005 NaN NaN 75 NaN NaN 75113
121 26 Auguste Blanqui - Corvisart 13009 POINT (2.35027 48.83010) 8 ARR_MUNI0000000009736531 Paris 13e Arrondissement PARIS 13E ARRONDISSEMENT 75056 NaN 180005 NaN NaN 75 NaN NaN 75113
122 32 Place de Rungis 13025 POINT (2.34738 48.82246) 8 ARR_MUNI0000000009736531 Paris 13e Arrondissement PARIS 13E ARRONDISSEMENT 75056 NaN 180005 NaN NaN 75 NaN NaN 75113

Pour la question 2, la première méthode consiste à afficher toute la ville mais à ne représenter que les points des stations du 19e:

In [22]:
 
<AxesSubplot: >

Néanmoins, il est préférable de se centrer sur le 19e en premier lieu, ce qui donne une carte comme celle-ci:

In [23]: