You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/manipulation/03_geopandas_tutorial.qmd
+30-35Lines changed: 30 additions & 35 deletions
Original file line number
Diff line number
Diff line change
@@ -60,19 +60,14 @@ Il peut servir de pendant à celui-ci pour l'utilisateur de `R`.
60
60
61
61
Quelques installations préalables sont nécessaires :
62
62
63
-
```python
64
-
#| output: false
63
+
```{python}
64
+
#| message : false
65
65
!pip install pandas fiona shapely pyproj rtree # à faire obligatoirement en premier pour utiliser rtree ou pygeos pour les jointures spatiales
66
66
!pip install contextily
67
67
!pip install geopandas
68
68
!pip install topojson
69
69
```
70
70
71
-
```{python}
72
-
#| echo: false
73
-
!pip install topojson
74
-
```
75
-
76
71
Pour être en mesure d'exécuter ce tutoriel, les imports suivants
77
72
seront utiles.
78
73
@@ -92,19 +87,19 @@ import matplotlib.pyplot as plt
92
87
93
88
**Le terme "données spatiales" désigne les données qui portent sur les caractéristiques géographiques des objets (localisation, contours, liens)**.
94
89
Les caractéristiques géographiques des objets sont décrites à l'aide d'un **système de coordonnées**
95
-
qui permettent une représentation dans un espace euclidien ($(x,y)$).
90
+
qui permettent une représentation dans un espace euclidien $(x,y)$.
96
91
Le passage de l'espace réel (la Terre, qui est une sphère) à l'espace plan
97
92
se fait grâce à un **système de projection**. Voici quelques exemples
98
93
de données spatiales :
99
94
100
-
* Une table décrivant des bâtiments, avec les coordonnées géographiques de chaque bâtiment;
101
-
* Le découpage communal du territoire, avec le contour du territoire de chaque commune;
95
+
* Une table décrivant des bâtiments, avec les coordonnées géographiques de chaque bâtiment;
96
+
* Le découpage communal du territoire, avec le contour du territoire de chaque commune;
102
97
* Les routes terrestres, avec les coordonnées décrivant leur parcours en 3 dimensions (longitude, latitude, altitude).
103
98
104
99
Les données spatiales rassemblent classiquement deux types de données :
105
100
106
-
1. des **données géographiques** (ou géométries): objets géométriques tels que des points, des vecteurs, des polygones, ou des maillages (*raster*). Exemple: la forme de chaque chaque commune, les coordonnées d'un bâtiment;
107
-
2. des **données attributaires** (ou attributs): des mesures et des caractéristiques associés aux objets géométriques. Exemple: la population de chaque commune, le nombre de fenêtres et le nombre d'étages d'un bâtiment.
101
+
1. des **données géographiques** (ou géométries): objets géométriques tels que des points, des vecteurs, des polygones, ou des maillages (*raster*). Exemple: la forme de chaque commune, les coordonnées d'un bâtiment;
102
+
2. des **données attributaires** (ou attributs): des mesures et des caractéristiques associées aux objets géométriques. Exemple: la population de chaque commune, le nombre de fenêtres et le nombre d'étages d'un bâtiment.
108
103
109
104
**Les données spatiales sont fréquemment traitées à l'aide d'un système d'information géographique (SIG)**, c'est-à-dire un système d'information capable de stocker, d'organiser et de présenter des données alphanumériques spatialement référencées par des coordonnées dans un système de référence (CRS). `Python` dispose de fonctionnalités lui permettant de réaliser les mêmes tâches qu'un SIG (traitement de données spatiales, représentations cartographiques).
110
105
@@ -119,11 +114,11 @@ DataFrame `Pandas` mais propose des méthodes adaptées au traitement des donné
119
114
120
115
Ainsi, grâce à `Geopandas`, on pourra effectuer des manipulations sur les attributs des données comme avec `pandas` mais on pourra également faire des manipulations sur la dimension spatiale des données. En particulier,
121
116
122
-
* Calculer des distances et des surfaces;
123
-
* Agréger rapidement des zonages (regrouper les communes en département par exemple);
124
-
* Trouver dans quelle commune se trouve un bâtiment à partir de ses coordonnées géographiques;
125
-
* Recalculer des coordonnées dans un autre système de projection.
126
-
* Faire une carte, rapidement et simplement
117
+
* Calculer des distances et des surfaces;
118
+
* Agréger rapidement des zonages (regrouper les communes en département par exemple);
119
+
* Trouver dans quelle commune se trouve un bâtiment à partir de ses coordonnées géographiques;
120
+
* Recalculer des coordonnées dans un autre système de projection ;
121
+
* Faire une carte, rapidement et simplement.
127
122
128
123
::: {.cell .markdown}
129
124
```{=html}
@@ -147,7 +142,7 @@ d'automatiser le traitement et la représentation des données. D'ailleurs,
147
142
148
143
### Résumé
149
144
150
-
En résumé, un objet `GeoPandas` comporte les éléments suivantes:
145
+
En résumé, un objet `GeoPandas` comporte les éléments suivantes:
@@ -199,11 +194,11 @@ Un mauvais système de représentation
199
194
fausse l'appréciation visuelle mais peut aussi entraîner des erreurs dans
200
195
les calculs sur la dimension spatiale.
201
196
202
-
**Les systèmes de projection font l'objet de standards internationaux et sont souvent désignés par des codes dits codes EPSG**. Ce [site](https://epsg.io/) est un bon aide-mémoire. Les plus fréquents, pour les utilisateurs français, sont les suivants (plus d'infos [ici](https://geodesie.ign.fr/contenu/fichiers/documentation/SRCfrance.pdf)):
197
+
**Les systèmes de projection font l'objet de standards internationaux et sont souvent désignés par des codes dits codes EPSG**. Ce [site](https://epsg.io/) est un bon aide-mémoire. Les plus fréquents, pour les utilisateurs français, sont les suivants (plus d'infos [ici](https://geodesie.ign.fr/contenu/fichiers/documentation/SRCfrance.pdf)):
203
198
204
-
*`2154`: système de projection Lambert 93. Il s'agit du système de projection officiel. La plupart des données diffusées par l'administration pour la métropole sont disponibles dans ce système de projection.
205
-
*`27572`: Lambert II étendu. Il s'agit de l'ancien système de projection officiel. Les données spatiales anciennes peuvent être dans ce format.
206
-
*`4326`: WGS 84 ou système de pseudo-Mercator ou encore _Web Mercator_. Ce n'est en réalité pas un système de projection mais un système de coordonnées (longitude / latitude) qui permet simplement un repérage angulaire sur l'ellipsoïde. Il est utilisé pour les données GPS. Il s'agit du système le plus
199
+
*`2154`: système de projection Lambert 93. Il s'agit du système de projection officiel. La plupart des données diffusées par l'administration pour la métropole sont disponibles dans ce système de projection.
200
+
*`27572`: Lambert II étendu. Il s'agit de l'ancien système de projection officiel. Les données spatiales anciennes peuvent être dans ce format.
201
+
*`4326`: WGS 84 ou système de pseudo-Mercator ou encore _Web Mercator_. Ce n'est en réalité pas un système de projection mais un système de coordonnées (longitude / latitude) qui permet simplement un repérage angulaire sur l'ellipsoïde. Il est utilisé pour les données GPS. Il s'agit du système le plus
207
202
usuel, notamment quand on travaille avec des fonds de carte _web_.
208
203
209
204
@@ -374,23 +369,23 @@ Dans le système Lambert 93 (2154) :
374
369
375
370
Les formats les plus communs de données spatiales sont les suivants :
376
371
377
-
*_shapefile_ (`.shp`): format (**propriétaire**) le plus commun de données géographiques.
372
+
*_shapefile_ (`.shp`): format (**propriétaire**) le plus commun de données géographiques.
378
373
La table de données (attributs) est stockée dans un fichier séparé des
379
374
données spatiales. En faisant `geopandas.read_file("monfichier.shp")`, le
380
-
package fait lui-même le lien entre les observations et leur représentation spatiale ;
375
+
package fait lui-même le lien entre les observations et leur représentation spatiale.
381
376
*_geopackage_ (`.gpkg`) : ce (relativement) nouveau format **libre** en un seul fichier également (lui recommandé par l'OGC) vise progressivement à se substituer au shapefile. Il est par exemple le format par défaut dans QGIS.
382
377
*_geojson_ (`.json`) : ce format, non préconisé par l'OGC, est largement utilisé pour le développement _web_
383
378
comme dans la librairie `leaflet.js`.
384
379
La dimension spatiale est stockée dans le même fichier que les attributs.
385
380
Ces fichiers sont généralement beaucoup plus légers que les *shapefiles* mais possèdent des limites s'agissant de gros jeux de données.
386
-
*_topojson_ (`.json`): une variante du `geojson` qui se développe progressivement pour assister les visualisations _web_. Au lieu de stocker l'ensemble des points permettant de représenter une
381
+
*_topojson_ (`.json`): une variante du `geojson` qui se développe progressivement pour assister les visualisations _web_. Au lieu de stocker l'ensemble des points permettant de représenter une
387
382
géométrie, seuls les arcs sont conservés. Cela allège substantiellement le poids du fichier et
388
383
permet, avec une librairie adaptée, de reconstruire l'ensemble des contours géographiques.
389
384
390
385
Cette [page](https://si.ecrins-parcnational.com/blog/2020-02-geojson-shapefile-geopackage.html) compare plus en détail les principes formats de données géographiques.
391
386
L'aide de [`Geopandas`](https://geopandas.org/io.html) propose des bouts de code en fonction des différentes situations dans lesquelles on se trouve.
392
387
393
-
### Exemple: récupérer les découpages territoriaux
388
+
### Exemple: récupérer les découpages territoriaux
394
389
395
390
L'un des fonds de carte les plus fréquents qu'on utilise est celui des
396
391
limites administratives des communes.
@@ -627,7 +622,7 @@ stations.crs
627
622
628
623
Les données sont dans le système de projection WGS84 qui est celui du
629
624
système GPS. Celui-ci s'intègre bien avec les fonds de carte
630
-
`Stamen`, `OpenStreetMap` ou `Google Maps`. En toute rigueur, si on
625
+
`OpenStreetMap` ou `Google Maps`. En toute rigueur, si on
631
626
désire effectuer certains calculs géométriques (mesurer des surfaces...), il est
632
627
nécessaire de re-projeter les données dans un système qui préserve la géométrie
Concernant la gestion des projections avec `GeoPandas`,
927
922
la [documentation officielle](https://geopandas.org/projections.html) est très bien
928
923
faite. Elle fournit notamment l'avertissement suivant qu'il est
929
-
bon d'avoir en tête:
924
+
bon d'avoir en tête:
930
925
931
926
> Be aware that most of the time you don’t have to set a projection. Data loaded from a reputable source (using the geopandas.read_file() command) should always include projection information. You can see an objects current CRS through the GeoSeries.crs attribute.
932
927
>
@@ -935,20 +930,20 @@ bon d'avoir en tête:
935
930

936
931
937
932
938
-
Pour déterminer le système de projection d'une base de données, on peut vérifier l'attribut `crs`:
933
+
Pour déterminer le système de projection d'une base de données, on peut vérifier l'attribut `crs`:
939
934
940
935
```{python}
941
936
communes.crs
942
937
```
943
938
944
939
Les deux principales méthodes pour définir le système de projection utilisé sont :
945
940
946
-
***`df.set_crs`**: cette commande sert à préciser quel est le système de projection utilisé, c'est-à-dire comment les coordonnées *(x,y)* sont reliées à la surface terrestre. **Cette commande ne doit pas être utilisée pour transformer le système de coordonnées, seulement pour le définir**.
947
-
***`df.to_crs`**: **cette commande sert à projeter les points d'une géométrie dans une autre, c'est-à-dire à recalculer les coordonnées selon un autre système de projection.**
941
+
***`df.set_crs`**: cette commande sert à préciser quel est le système de projection utilisé, c'est-à-dire comment les coordonnées *(x,y)* sont reliées à la surface terrestre. **Cette commande ne doit pas être utilisée pour transformer le système de coordonnées, seulement pour le définir**.
942
+
***`df.to_crs`**: **cette commande sert à projeter les points d'une géométrie dans une autre, c'est-à-dire à recalculer les coordonnées selon un autre système de projection.**
948
943
949
944
Dans le cas particulier de production de carte avec un fond `OpenStreetMaps` ou une carte dynamique `leaflet`, il est nécessaire de dé-projeter les données (par exemple à partir du Lambert-93) pour atterrir dans le système non-projeté WGS 84 (code EPSG 4326). Ce site [dédié aux projections géographiques](https://epsg.io/) peut-être utile pour retrouver le système de projection d'un fichier où il n'est pas indiqué.
950
945
951
-
La définition du système de projection se fait de la manière suivante (:warning: avant de le faire, se souvenir de l'avertissement !):
946
+
La définition du système de projection se fait de la manière suivante (:warning: avant de le faire, se souvenir de l'avertissement !):
Copy file name to clipboardExpand all lines: content/manipulation/04a_webscraping_TP.qmd
+12-18Lines changed: 12 additions & 18 deletions
Original file line number
Diff line number
Diff line change
@@ -128,8 +128,8 @@ où le _web scraping_ est plus proche du comportement dans le _Far West_.
128
128
### Les bonnes pratiques
129
129
130
130
La possibilité de récupérer des données par l'intermédiaire
131
-
d'un robot ne signifie pas qu'on peut se permettre de n'être
132
-
pas civilisé. En effet, lorsqu'il est non-maîtrisé, le
131
+
d'un robot ne signifie pas qu'on peut se permettre de ne pas être
132
+
civilisé. En effet, lorsqu'il est non-maîtrisé, le
133
133
_webscraping_ peut ressembler à une attaque informatique
134
134
classique pour faire sauter un site _web_ : le déni de service.
135
135
Le cours d'[Antoine Palazzolo](https://inseefrlab.github.io/formation-webscraping/) revient
@@ -319,7 +319,7 @@ Pour être en mesure d'utiliser `Selenium`, il est nécessaire
319
319
de faire communiquer `Python` avec un navigateur _web_ (Firefox ou Chromium).
320
320
Le _package_`webdriver-manager` permet de faire savoir à `Python` où
321
321
se trouve ce navigateur s'il est déjà installé dans un chemin standard.
322
-
Pour l'installer, le code de la cellule ci-dessous peut être utilisé
322
+
Pour l'installer, le code de la cellule ci-dessous peut être utilisé.
323
323
324
324
```{=html}
325
325
</div>
@@ -338,7 +338,7 @@ nommé `webdriver-manager`:
338
338
On va commencer doucement. Prenons une page _wikipedia_,
339
339
par exemple celle de la Ligue 1 de football, millésime 2019-2020 : [Championnat de France de football 2019-2020](https://fr.wikipedia.org/wiki/Championnat_de_France_de_football_2019-2020). On va souhaiter récupérer la liste des équipes, ainsi que les url des pages Wikipedia de ces équipes.
340
340
341
-
Etape :one: : se connecter à la page wikipedia et obtenir le code source.
341
+
Etape 1️⃣ : se connecter à la page wikipedia et obtenir le code source.
342
342
Pour cela, le plus simple est d'utiliser le package `urllib` ou, mieux, `requests`.
343
343
Nous allons ici utiliser la fonction `request` du _package_`urllib`:
0 commit comments