Retour au catalogue
Season 40 11 Épisodes 38 min 2026

GeoPandas

v1.1 — Édition 2026. Un cours audio couvrant GeoPandas 1.1, la puissante bibliothèque Python pour les données géospatiales. Apprenez à gérer les opérations géométriques, manipuler les données spatiales, travailler avec les projections et générer des cartes.

Analyse géospatiale Science des données
GeoPandas
Lecture en cours
Click play to start
0:00
0:00
1
Découvrez GeoPandas : La colonne de géométrie active
Une introduction aux structures de données fondamentales de GeoPandas : la GeoSeries et le GeoDataFrame. Apprenez comment GeoPandas étend la célèbre bibliothèque pandas pour gérer les objets géospatiaux et comprenez le concept essentiel de la colonne de géométrie active.
3m 29s
2
Lecture et écriture : Entrées/Sorties rapides avec Pyogrio
Une plongée approfondie dans le chargement et la sauvegarde de données spatiales. Découvrez comment GeoPandas exploite le moteur Pyogrio et Apache Arrow pour accélérer considérablement les entrées/sorties de fichiers, ainsi que l'utilisation des filtres spatiaux et des boîtes englobantes (bounding-box) lors du chargement.
3m 27s
3
La forme de la Terre : Projections et CRS
Comprenez les systèmes de coordonnées de référence (CRS) et pourquoi ils sont vitaux pour la précision spatiale. Apprenez la différence entre les coordonnées géographiques et projetées, et comment transformer vos géométries en toute sécurité avec GeoPandas.
3m 40s
4
Façonner l'espace : Zones tampons, centroïdes et enveloppes convexes
Découvrez comment générer de toutes nouvelles géométries à partir de celles existantes. Cet épisode couvre les méthodes constructives essentielles comme le calcul des centroïdes, la génération de zones tampons et le tracé d'enveloppes convexes.
3m 11s
5
Prédicats spatiaux : Intersects, Within et Contains
Apprenez à poser des questions sur les relations entre différentes formes. Nous explorons les prédicats spatiaux binaires — comme intersects, within et contains — pour tester la façon dont les géométries interagissent dans l'espace.
3m 47s
6
Boostez vos requêtes : L'index spatial R-Tree
Découvrez le moteur secret derrière les performances de GeoPandas. Cet épisode révèle comment l'index spatial STR R-tree utilise des boîtes englobantes pour réduire considérablement le coût de calcul des requêtes spatiales.
3m 35s
7
Fusionner les mondes : Jointures spatiales et de proximité
Faites passer l'intégration de données au niveau supérieur. Apprenez à fusionner deux GeoDataFrames distincts en vous basant entièrement sur leurs relations spatiales à l'aide des jointures spatiales (`sjoin`) et des jointures de proximité (`sjoin_nearest`).
3m 33s
8
Opérations ensemblistes : Créer des géométries avec les overlays
Découvrez comment découper, fusionner et diviser des formes qui se chevauchent. Cet épisode couvre la puissante méthode `overlay`, en expliquant comment calculer des intersections, des unions et des différences pour créer de toutes nouvelles géométries.
3m 34s
9
GroupBy spatial : Agrégation avec Dissolve
Apprenez à regrouper des données spatiales. Nous explorons la méthode `dissolve`, qui agit comme un GroupBy spatial, fusionnant de petites géométries en de plus grandes tout en agrégeant de manière transparente leurs attributs tabulaires.
3m 03s
10
Cartographie statique : Créer des choroplèthes et tracer des couches
Transformez vos données spatiales en visuels captivants. Cet épisode couvre l'intégration de GeoPandas avec Matplotlib, vous apprenant à créer des cartes choroplèthes personnalisées, à superposer plusieurs jeux de données et à gérer les données manquantes.
3m 50s
11
Exploration interactive et au-delà
Donnez vie à vos cartes. Nous examinons la méthode `explore()` pour créer des cartes interactives basées sur le web. Enfin, nous clôturons ce voyage avec GeoPandas et vous préparons à commencer à créer des applications spatiales concrètes.
3m 34s

Épisodes

1

Découvrez GeoPandas : La colonne de géométrie active

3m 29s

Une introduction aux structures de données fondamentales de GeoPandas : la GeoSeries et le GeoDataFrame. Apprenez comment GeoPandas étend la célèbre bibliothèque pandas pour gérer les objets géospatiaux et comprenez le concept essentiel de la colonne de géométrie active.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. GeoPandas, épisode 1 sur 11. Les systèmes géographiques traditionnels t'obligent généralement à garder exactement une seule forme géométrique par fichier, ce qui veut dire que si tu as besoin de la frontière d'un comté et de son point central, tu dois maintenir deux fichiers séparés. GeoPandas casse cette contrainte, en te permettant de stocker des frontières, des points centraux et des zones tampons côte à côte dans une seule table. Découvre GeoPandas : la colonne de géométrie active. GeoPandas est une extension de la librairie d'analyse de données pandas. Il reprend les structures familières de DataFrame et de Series et y ajoute des capacités spatiales. Sous le capot, GeoPandas sert de pont entre les données tabulaires et la géométrie spatiale. Il gère la structure de la table lui-même, tout en déléguant les vrais calculs mathématiques des points, des lignes et des polygones à un moteur spatial appelé Shapely. Quand tu demandes à GeoPandas de calculer une surface ou de trouver une frontière, il passe les formes correspondantes à Shapely, récupère le résultat mathématique, et le réaligne directement dans ta ligne de données. Les deux structures de données principales qui rendent ça possible sont la GeoSeries et le GeoDataFrame. Une GeoSeries est une colonne unique où chaque ligne contient un objet geometry Shapely. Un GeoDataFrame est un DataFrame pandas standard qui contient au moins une colonne GeoSeries. Vu qu'un seul GeoDataFrame peut contenir plusieurs colonnes spatiales en même temps, le système a besoin de savoir laquelle cibler quand tu lances une commande spatiale. C'est géré via la colonne de géométrie active. Voici le point clé. La colonne de géométrie active est un état fonctionnel, pas une string spécifique. Les utilisateurs confondent souvent une colonne littéralement nommée geometry avec le concept sous-jacent de la colonne de géométrie active. Par défaut, lors du chargement des données, GeoPandas va chercher une colonne nommée geometry et lui assigner le statut actif. Mais tes colonnes spatiales peuvent s'appeler absolument n'importe comment. Ce qui compte, c'est de savoir laquelle possède le statut actif, parce que les méthodes spatiales sont routées spécifiquement vers cette colonne active. Prends l'exemple d'un dataset de comtés locaux. Tu as une colonne appelée county_borders qui stocke les contours complexes en polygones de chaque région. Dans la même table, tu as une autre colonne appelée county_centroids qui stocke un point unique au milieu de chaque région. Si la colonne borders possède le statut actif, demander au dataframe de calculer la surface va te retourner la superficie totale en miles carrés du comté. N'importe quel calcul de distance que tu lances fera la mesure à partir du bord extérieur de la frontière de ce comté. Si tu veux plutôt mesurer la distance entre les points centraux des comtés, tu changes le contexte spatial. Tu appelles une méthode nommée set_geometry et tu fournis le nom de la colonne centroids. Immédiatement, county_centroids devient la géométrie active. La colonne borders reste parfaitement intacte, et conserve tes polygones, mais le système la traite maintenant comme une simple autre colonne de données. Si tu lances un calcul de distance maintenant, GeoPandas cible automatiquement les points centraux. Tu bascules entre les contextes spatiaux instantanément sans fusionner de tables ni gérer des datasets en double. Ce qu'il faut surtout retenir, c'est qu'un GeoDataFrame est un conteneur spatial capable de stocker autant de couches de geometry que tu en as besoin, mais la géométrie active dicte quel outil spatial est actuellement engagé. Si tu aimes le podcast et que tu veux aider à soutenir l'émission, tu peux chercher DevStoriesEU sur Patreon. C'est tout pour celui-ci. Merci d'avoir écouté, et continue à développer !
2

Lecture et écriture : Entrées/Sorties rapides avec Pyogrio

3m 27s

Une plongée approfondie dans le chargement et la sauvegarde de données spatiales. Découvrez comment GeoPandas exploite le moteur Pyogrio et Apache Arrow pour accélérer considérablement les entrées/sorties de fichiers, ainsi que l'utilisation des filtres spatiaux et des boîtes englobantes (bounding-box) lors du chargement.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. GeoPandas, épisode 2 sur 11. Tu charges un shapefile de cinq gigaoctets en mémoire, juste pour supprimer immédiatement 90 % des rows en utilisant les filtres pandas standards. Ta RAM explose, ton script rame, et tu perds du temps. En fait, tu peux slicer ces données spatiales avant même qu'elles ne quittent le disque dur. Aujourd'hui, on s'intéresse à la lecture et à l'écriture : des I/O rapides avec Pyogrio. Les fonctions principales que tu vas utiliser pour faire entrer et sortir des données de GeoPandas sont read file et to file. Historiquement, GeoPandas utilisait une library appelée Fiona en interne. Ça marchait, mais c'était lent. Le GeoPandas moderne utilise Pyogrio par défaut. Pyogrio est une interface directe et hautement optimisée vers GDAL, qui est la library C de base qui fait tourner presque tous les logiciels géospatiaux open source. Pyogrio est rapide par défaut, mais tu peux le forcer à être beaucoup plus rapide. Quand tu appelles read file ou to file, tu peux passer un argument appelé use arrow, défini sur true. Ça dit à Pyogrio de gérer les données en utilisant les structures de mémoire d'Apache Arrow. Au lieu de lire le fichier et de traduire chaque coordonnée et attribut un par un en un objet Python, l'intégration Arrow traite les données par gros batches, très efficaces en mémoire. Ça permet de bypasser complètement l'overhead habituel de Python. Si tu gères des millions de records, activer le flag Arrow transforme une opération de lecture ou d'écriture qui prend plusieurs minutes en une opération qui prend quelques secondes. Mais l'optimisation la plus efficace, c'est tout simplement de lire moins de données. Une erreur très courante, c'est de lire un dataset massif en entier dans un GeoDataFrame, puis d'utiliser l'indexation pandas standard pour le filtrer après coup. Ça provoque des pics de mémoire énormes et totalement inutiles. GeoPandas te permet de filtrer les données pendant l'opération read file elle-même, ce qui garde ton empreinte mémoire stable. Disons que tu as un fichier contenant l'emprise au sol de tous les bâtiments de l'État de New York, mais que tu ne t'intéresses qu'aux bâtiments autour de Coney Island. Si tu passes un tuple de bounding box à l'argument b box dans read file, le moteur C sous-jacent vérifie l'index spatial du fichier sur le disque. Il ignore complètement tout bâtiment en dehors de cette box définie. Tu obtiens un tout petit DataFrame contenant uniquement ce dont tu as besoin, et ta RAM remarque à peine l'opération. Si une simple bounding box rectangulaire n'est pas assez précise pour tes besoins, tu peux utiliser l'argument mask. Tu passes une geometry spécifique, comme un polygon complexe représentant les limites exactes d'un quartier, directement dans read file. Le moteur évalue cette forme et ne va charger que les rows qui intersectent ton polygon. C'est un peu plus lourd en calcul qu'une bounding box de base, mais c'est ultra précis. Le filtrage spatial couvre la géographie, mais tu peux aussi filtrer les attributs standards. La fonction read file accepte un paramètre where. Il prend une clause WHERE SQL standard sous forme de string. Si tu veux uniquement les bâtiments taggués comme residential, tu passes une string indiquant que la colonne type est égale à residential. GDAL parse cette instruction SQL et filtre les rows au niveau C avant de passer quoi que ce soit à Python. Tu peux même combiner une bounding box et une clause where dans le même appel de lecture pour slicer la géographie et les attributs en même temps. Voici l'idée clé. Pousser tes filtres jusqu'à l'opération de lecture signifie que le gros du travail se fait dans du code C hautement optimisé, et non dans la mémoire Python. La méthode la plus rapide dans l'absolu pour traiter des données spatiales, c'est de ne jamais charger les parties dont tu n'as pas besoin. Merci d'avoir passé quelques minutes avec moi. À la prochaine, à plus.
3

La forme de la Terre : Projections et CRS

3m 40s

Comprenez les systèmes de coordonnées de référence (CRS) et pourquoi ils sont vitaux pour la précision spatiale. Apprenez la différence entre les coordonnées géographiques et projetées, et comment transformer vos géométries en toute sécurité avec GeoPandas.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. GeoPandas, épisode 3 sur 11. Tu calcules la distance entre deux villes et le résultat est de 2,4 au lieu de 200 miles. Ton code a tourné parfaitement, mais ta réponse est complètement inutile. Le coupable, c'est la façon dont tes données spatiales sont mappées sur le monde physique, ce qui nous amène à la forme de la Terre : les projections et le C R S. Chaque GeoSeries et GeoDataFrame possède un attribut appelé dot C R S. Ça stocke un objet pyproj C R S. Ce sont les métadonnées qui disent exactement à GeoPandas ce que représentent vraiment les nombres dans ta colonne geometry. Sans système de référence de coordonnées, une coordonnée comme moins 73 virgule 40 est juste un point sur une grille infinie et abstraite. Avec un C R S, ça devient un emplacement spécifique et connu sur Terre. Il y a deux grandes catégories de systèmes de coordonnées que tu dois comprendre. Les systèmes de coordonnées géographiques représentent la Terre comme un globe en trois dimensions. Leurs coordonnées sont des angles mesurés depuis le centre de la Terre, exprimés en degrés de longitude et de latitude. Un exemple très courant est l'EPSG 4326, qui est le système utilisé par le GPS mondial. Les systèmes de coordonnées projetées, en revanche, représentent la Terre aplatie sur une surface en deux dimensions. Leurs coordonnées utilisent des mesures linéaires, comme les mètres ou les US Survey feet. Voici le point clé. Les opérations spatiales sous le capot de GeoPandas partent du principe que tes données existent sur un plan cartésien plat. Si tes données sont dans un système de coordonnées géographiques comme l'EPSG 4326 et que tu demandes à GeoPandas de calculer la surface des quartiers de New York, il va faire les calculs en traitant les degrés comme s'ils étaient de simples carrés sur une grille. Tu obtiendras un résultat comme 0,083. Ça veut dire 0,083 degré carré, ce qui est une métrique qui ne veut rien dire. Les degrés changent de largeur physique selon à quelle distance tu te trouves de l'équateur, donc tu ne peux pas les utiliser pour mesurer une distance ou une surface absolue. Pour faire des calculs dans le monde réel, tu dois projeter tes données géographiques dans un système de coordonnées projetées. Tu fais ça en utilisant une méthode appelée to C R S. Si tu prends ces données de New York et que tu passes EPSG 2263 à la méthode to C R S, GeoPandas va transformer mathématiquement chaque coordonnée dans ta colonne geometry. EPSG 2263 est un système projeté spécifique à New York qui mesure les distances en pieds. Maintenant, quand tu lances exactement le même calcul de surface, tu obtiens un résultat en millions de pieds carrés, ce qui est une vraie mesure utilisable. Il y a un piège classique ici. Les développeurs essaient souvent de corriger des projections manquantes en utilisant la méthode set C R S au lieu de la méthode to C R S. Set C R S n'est pas un outil de conversion. On l'utilise uniquement quand tes données spatiales ont été chargées en manquant complètement de système de référence de coordonnées. Ça assigne simplement les métadonnées, pour dire à GeoPandas ce que les nombres dans ta colonne geometry sont déjà, sans modifier les nombres eux-mêmes. Tu utilises to C R S quand les données ont déjà un C R S valide, et que tu veux convertir mathématiquement ces coordonnées dans un tout nouveau système. Si tes calculs de surface ou de distance ont l'air absurdement petits, ça veut presque toujours dire que tu demandes à GeoPandas de faire des calculs à plat sur des degrés sphériques, et que tu dois projeter tes données. C'est tout pour aujourd'hui. Merci d'avoir écouté — va construire un truc cool.
4

Façonner l'espace : Zones tampons, centroïdes et enveloppes convexes

3m 11s

Découvrez comment générer de toutes nouvelles géométries à partir de celles existantes. Cet épisode couvre les méthodes constructives essentielles comme le calcul des centroïdes, la génération de zones tampons et le tracé d'enveloppes convexes.

Télécharger
Bonjour, ici Alex de DEV STORIES DOT EU. GeoPandas, épisode 4 sur 11. Parfois, la forme que tu dois analyser n'est pas celle qu'on t'a donnée. Tu peux importer une liste d'emplacements de magasins sous forme de points isolés, mais ce qu'il te faut vraiment comprendre, c'est la zone de livraison qui les entoure. Ça demande de modeler mathématiquement les points et les lignes pour créer des limites dynamiques en utilisant le Shaping Space : les buffers, les centroids et les convex hulls. Ces manipulations géométriques constructives agissent comme la pâte à modeler des données spatiales. Tu pars de géométries brutes et tu utilises ces méthodes intégrées pour calculer de toutes nouvelles formes adaptées à ton analyse. Dans GeoPandas, ces méthodes s'appliquent élément par élément à l'ensemble de la GeoSeries active. Si tu as dix mille formes, une seule commande en génère dix mille nouvelles. Tout ça repose sous le capot sur la librairie Shapely pour effectuer les calculs géométriques. La manipulation la plus courante, c'est la méthode buffer. Un buffer crée un polygone qui représente tous les points situés à une distance donnée de ta forme d'origine. Prends un scénario où tu as des géométries de points qui représentent des cafés. Tu veux définir une zone de livraison de deux kilomètres pour chaque emplacement. Tu appelles la méthode buffer sur tes points et tu lui passes ta distance. GeoPandas trace instantanément un cercle autour de chaque magasin, transformant ton dataset de points en un dataset de polygones. Fais bien attention à ça. Faire une opération de buffer nécessite un Coordinate Reference System projeté. Si tes géométries sont dans un format géographique comme la latitude et la longitude, une distance de dix signifie dix degrés, et non dix mètres. Comme la largeur physique des degrés de longitude rétrécit à mesure que tu t'éloignes de l'équateur, faire un buffer sur des données non projetées donne des ovales fortement déformés et étirés au lieu de cercles uniformes. Projette toujours tes données dans un système métrique avant de calculer des distances. Parfois, tu as besoin de réduire une forme au lieu de l'agrandir. Si tu as des polygones complexes qui représentent des quartiers et que tu dois les réduire à des points uniques pour des calculs de distance ou des labels sur une carte, tu utilises l'attribut centroid. Le centroid calcule le centre de masse mathématique de chaque géométrie, renvoyant un point central parfait pour chaque polygone ou ligne de ton dataset. Pour isoler les bords d'une forme, tu utilises l'attribut boundary. Si tu as un polygone qui représente un comté, boundary supprime tout l'intérieur. Il renvoie une géométrie de dimension inférieure, transformant le polygone en un ensemble de lignes qui ne font que délimiter le comté. Si tu appelles boundary sur une ligne, il renvoie les points uniques à chaque extrémité de cette ligne. C'est là que ça devient intéressant. Tu as aussi l'attribut convex hull. Imagine un ensemble de points dispersés qui représentent des observations d'animaux dans une forêt. Si tu tendais un élastique tout autour des points les plus à l'extérieur et que tu le relâchais d'un coup sec, la forme que cet élastique prendrait, c'est le convex hull. Il renvoie le plus petit polygone convexe possible qui englobe toute la géométrie. C'est un moyen incroyablement rapide de calculer l'empreinte physique globale d'un ensemble de coordonnées dispersées. La géométrie constructive signifie que tu n'es jamais coincé avec les limites spatiales que tu as importées ; tu peux toujours calculer les zones exactes que ton analyse demande vraiment. Merci d'avoir passé quelques minutes avec moi. À la prochaine, prends soin de toi.
5

Prédicats spatiaux : Intersects, Within et Contains

3m 47s

Apprenez à poser des questions sur les relations entre différentes formes. Nous explorons les prédicats spatiaux binaires — comme intersects, within et contains — pour tester la façon dont les géométries interagissent dans l'espace.

Télécharger
Salut, ici Alex de DEV STORIES DOT EU. GeoPandas, épisode 5 sur 11. Se demander si une coordonnée GPS spécifique se trouve à l'intérieur des limites complexes et irrégulières d'une ville, ça ressemble à un gros problème de maths qui demande beaucoup de calculs et du ray-casting. Mais dans cette librairie, c'est géré par une seule ligne de logique booléenne. On va parler des Spatial Predicates : Intersects, Within, et Contains. Si tu utilises le pandas standard, tu es déjà à l'aise avec le filtrage conditionnel. Tu prends une colonne de dataframe, tu vérifies si ses valeurs sont supérieures à dix, et tu récupères une Series de valeurs True et False. Ensuite, tu passes directement cette Series booléenne dans les crochets de ton dataframe pour filtrer tes lignes. Les Spatial Predicates font exactement la même chose. Au lieu de filtrer par un nombre, tu filtres par une vérité spatiale. Tu compares des formes. Un Spatial Predicate, c'est une méthode qui teste la relation topologique entre une GeoSeries entière et une seule géométrie de référence. Quand tu appelles une méthode de prédicat sur ta colonne geometry active, GeoPandas évalue chaque ligne par rapport à cette forme de référence. Il fait les calculs géométriques sous le capot et te renvoie une Series booléenne pandas standard. Le test de relation le plus courant, c'est intersects. Quand tu appelles la méthode intersects, elle renvoie True si la frontière ou l'intérieur d'une géométrie de ton dataset touche ou chevauche la géométrie de référence de n'importe quelle façon. Si deux polygones partagent un seul point sur leur bord extérieur, ils s'intersectent. Si un segment de ligne traverse un polygone, ils s'intersectent. C'est un fourre-tout assez large pour n'importe quel espace physique partagé. Ensuite, on a les méthodes contains et within. On les confond souvent parce que ce sont des opérations inverses. La logique est strictement directionnelle. Si le Polygone A est la limite d'une grande ville et le Point B est un café, la ville contient le café. Le café est à l'intérieur de la ville. Si le Polygone A contains le Point B, alors le Point B est within le Polygone A. Tu utilises la méthode contains quand ta GeoSeries contient de grandes géométries de délimitation, et que tu passes une forme de référence plus petite. Elle renvoie True uniquement si la forme de référence est complètement enfermée par la géométrie de la ligne. À l'inverse, tu appelles la méthode within quand ta GeoSeries contient les éléments plus petits, comme des milliers de points de coordonnées individuels, et que tu veux tester s'ils tombent entièrement à l'intérieur d'un seul polygone de référence plus grand. Fais bien attention à cette partie. Parce que ces méthodes renvoient des boolean masks standards, tu peux les chain directement dans tes data pipelines. Disons que tu as un dataframe des arrondissements d'une ville. Tu as appliqué un buffer pour étendre leurs limites. Maintenant, tu veux savoir lesquels de ces arrondissements étendus avec le buffer chevauchent le polygone original, sans buffer, de Brooklyn. D'abord, tu isoles le polygone original unique de Brooklyn pour qu'il serve de géométrie de référence. Ensuite, tu prends ton dataframe d'arrondissements avec buffer et tu appelles la méthode intersects sur sa colonne geometry, en lui passant la forme de Brooklyn. GeoPandas évalue chaque ligne. Il renvoie True pour les arrondissements avec buffer qui touchent le polygone de Brooklyn, et False pour ceux qui ne le touchent pas. Tu places cette Series résultante de True et False directement à l'intérieur des crochets de sélection de ton dataframe. Le dataframe drop instantanément les lignes False. Tu te retrouves avec un dataset filtré géographiquement, obtenu entièrement grâce à des opérations standards sur des données tabulaires. En traitant les relations d'espace physique comme de simples questions True ou False, tu fais le pont entre la cartographie complexe et la logique de base des dataframes. C'est tout pour cet épisode. Merci d'avoir écouté, et continue de développer !
6

Boostez vos requêtes : L'index spatial R-Tree

3m 35s

Découvrez le moteur secret derrière les performances de GeoPandas. Cet épisode révèle comment l'index spatial STR R-tree utilise des boîtes englobantes pour réduire considérablement le coût de calcul des requêtes spatiales.

Télécharger
Bonjour, ici Alex de DEV STORIES DOT EU. GeoPandas, épisode 6 sur 11. Tes requêtes géospatiales prennent des heures à tourner, font ramer ta machine et mettent ta patience à rude épreuve. Tu demandes probablement à ton CPU de vérifier chaque point par rapport à chaque limite, ce qui scale très mal. La solution à ce bottleneck, c'est de booster tes requêtes avec le spatial index R-Tree. Tu as un million de points GPS et cinquante polygones de quartiers. Si tu testes chaque point contre chaque polygone pour voir à quel quartier il appartient, tu exécutes cinquante millions de calculs géométriques complexes. Trouver si une coordonnée se trouve à l'intérieur d'un polygone irrégulier est une opération mathématique lourde. Faire ça avec un full scan crée un problème de scaling exponentiel qui détruit les performances. Un spatial index résout ça en agissant comme une table des matières pour ta carte. GeoPandas utilise une structure spécifique appelée R-tree, construite avec l'algorithme Sort-Tile-Recursive. Le R signifie rectangle. Le tree regroupe les objets logiquement en fonction de leur emplacement. L'idée clé ici, c'est le pre-filter. Au lieu de vérifier les bordures exactes et irrégulières d'un polygone de quartier, l'index dessine une simple boîte rectangulaire autour. C'est ce qu'on appelle une envelope ou une bounding box. Vérifier si une coordonnée tombe dans un rectangle basique ne demande presque aucun effort de calcul. L'index rejette immédiatement tout point qui n'est même pas à l'intérieur de la bounding box rectangulaire du quartier. Tu réduis instantanément les candidats d'un million à peut-être quelques milliers. Ça nous amène à une réalité cruciale en deux étapes du spatial querying. Un hit sur le spatial index signifie seulement que les bounding boxes s'intersectent. Un point peut se trouver à l'intérieur du rectangle, mais juste à l'extérieur de la vraie limite courbe du quartier. Le hit sur la bounding box n'est que l'étape un. L'étape deux, c'est le check de géométrie exact sur ce sous-ensemble plus petit de candidats. Tu accèdes à ce moteur via la méthode sindex dot query. Si tu passes une seule geometry, ça retourne un array d'indices entiers qui correspondent aux geometries de ta GeoSeries dont les bounding boxes intersectent ton input. Pour forcer l'index à gérer cette deuxième étape cruciale, passe l'argument predicate égal à intersects. GeoPandas va alors utiliser le check de bounding box, qui est peu coûteux, pour trouver les candidats, et lancer automatiquement le check de géométrie exact, beaucoup plus lourd, uniquement sur les survivants. Tu peux aussi passer un array entier de geometries dans la query en une seule fois. Cette array query retourne un array d'indices en deux dimensions, qui associe les matchs entre ton input array et la GeoSeries indexée. La première ligne donne l'index de ton input geometry, et la deuxième ligne donne l'index de la geometry correspondante dans le tree. Parfois tu n'as pas besoin d'une intersection, tu as juste besoin de proximité. La méthode sindex dot nearest prend une input geometry et retourne l'index de la geometry la plus proche dans le tree. C'est super efficace pour faire du snapping d'une coordonnée isolée sur un réseau routier, ou pour trouver la station météo la plus proche sans calculer la distance avec chaque station du continent. Les opérations spatiales complexes sont mathématiquement coûteuses. Ne force jamais ton CPU à calculer des intersections géométriques exactes quand un simple check de rectangle peut éliminer 99 % des candidats d'entrée de jeu. Si tu trouves ces épisodes utiles et que tu veux soutenir l'émission, tu peux chercher DevStoriesEU sur Patreon. C'est tout pour aujourd'hui. Merci d'avoir écouté, et continue de créer !
7

Fusionner les mondes : Jointures spatiales et de proximité

3m 33s

Faites passer l'intégration de données au niveau supérieur. Apprenez à fusionner deux GeoDataFrames distincts en vous basant entièrement sur leurs relations spatiales à l'aide des jointures spatiales (`sjoin`) et des jointures de proximité (`sjoin_nearest`).

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. GeoPandas, épisode 7 sur 11. Comment tu fusionnes une liste de restaurants avec une liste de zones de recensement quand elles ne partagent aucune colonne d'ID ? Tu laisses leurs coordonnées géographiques faire le matching. Aujourd'hui, on parle de fusionner des mondes : les spatial joins et les nearest joins. Un spatial join, c'est l'équivalent géographique d'un SQL join. Au lieu de lier des tables sur un ID partagé de type string ou integer, tu les joins en fonction de leur relation physique dans l'espace. Tu utilises la fonction sjoin pour ça. Imagine un scénario où tu as un GeoDataFrame de points de supermarchés et un GeoDataFrame séparé de polygones des quartiers de Chicago. Tu veux attacher le nom du quartier à chaque row de supermarché. Pour faire ça, tu appelles sjoin sur le dataframe des supermarchés et tu passes le dataframe des quartiers comme argument de droite. La fonction repose sur deux arguments principaux. Le premier, c'est how. Ça fonctionne exactement comme les database joins standards. Un inner join garde uniquement les magasins qui tombent à l'intérieur d'un quartier. Un left join garde tous tes supermarchés, en ajoutant des valeurs null si un magasin se trouve en dehors des limites du quartier. Un right join garde tous les quartiers, en les dupliquant s'ils contiennent plusieurs magasins, et en les gardant avec des données de magasin vides s'ils n'en ont aucun. Le deuxième argument, c'est predicate. Ça définit la condition spatiale qui doit être remplie pour un match. La valeur par défaut c'est intersects, ce qui veut dire que les géométries se touchent ou se chevauchent d'une manière ou d'une autre. Tu peux aussi utiliser within, pour t'assurer qu'un point est strictement à l'intérieur d'un polygone, ou contains, si tu vérifies qu'un polygone englobe entièrement un point. Voici le truc important. Quand tu fais un spatial join, tu combines deux tables avec des colonnes geometry, mais le GeoDataFrame qui en résulte ne peut avoir qu'une seule geometry active. Par défaut, sjoin conserve la geometry du dataframe de gauche et supprime la geometry du dataframe de droite, tout en gardant toutes ses colonnes d'attributs standards. Si tu joins des points de supermarchés à gauche à des polygones de quartiers à droite, ton output sera une table de points qui inclut maintenant les noms des quartiers. Si tu as vraiment besoin que la table résultante contienne les formes des polygones, tu dois inverser l'ordre de ton join. Mets les quartiers dans la table de gauche et les magasins dans la table de droite. Parfois, tes datasets ne se chevauchent pas du tout. Si tu veux trouver la station de métro la plus proche pour chaque supermarché, les intersections ne vont pas t'aider. Pour ça, tu utilises la fonction sjoin nearest. Elle fonctionne de manière similaire à un spatial join standard, mais elle matche les géométries en fonction de la proximité plutôt que de l'intersection. Tu peux passer un argument distance column sous forme de string à sjoin nearest. Ça dit à la fonction d'ajouter une nouvelle colonne à tes résultats, contenant la distance exacte calculée entre les éléments matchés. Tu peux aussi fournir un seuil max distance. Ça restreint le join pour qu'il matche uniquement si le plus proche voisin est dans un rayon spécifié, ce qui t'évite de lier un magasin à une station à l'autre bout de la ville juste parce que c'est la plus proche disponible. Sous le capot, ces deux fonctions reposent fortement sur un spatial index. Elles ne calculent pas la distance ou l'intersection entre chaque point et chaque polygone, ce qui prendrait un temps fou. Elles utilisent l'index pour évaluer d'abord les bounding boxes, en écartant rapidement les géométries qui ne sont pas du tout proches les unes des autres avant de faire les gros calculs mathématiques. Traiter la localisation physique comme ta foreign key ultime te permet de relier des datasets qui, autrement, n'auraient absolument rien en commun. C'est tout pour cet épisode. Merci de m'avoir écouté, et continue à développer !
8

Opérations ensemblistes : Créer des géométries avec les overlays

3m 34s

Découvrez comment découper, fusionner et diviser des formes qui se chevauchent. Cet épisode couvre la puissante méthode `overlay`, en expliquant comment calculer des intersections, des unions et des différences pour créer de toutes nouvelles géométries.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. GeoPandas, épisode 8 sur 11. Un spatial join t'indique si une zone inondable touche une propriété. Mais il laisse les limites de la propriété complètement intactes dans ton dataset. Si tu as besoin d'un tout nouveau polygone qui montre exactement quelle partie de la propriété est sous l'eau, un join ne suffit pas. Tu as besoin d'opérations ensemblistes, et plus précisément de créer des géométries avec des overlays. C'est courant de confondre les spatial joins, qui utilisent la méthode sjoin, avec les overlays. Voici la différence. Un spatial join teste une relation, en ajoutant les attributs d'une couche à une autre tout en gardant la géométrie d'origine exactement pareille. Un overlay découpe physiquement les géométries. Imagine un emporte-pièce. Tu as deux pâtes étalées qui se chevauchent, qui représentent deux GeoDataFrames différents. Un overlay appuie sur les deux couches et les découpe l'une contre l'autre. Le résultat, c'est un tout nouveau set de pièces de puzzle. Partout où ces deux couches se chevauchaient, la nouvelle pièce hérite des attributs de données des deux couches d'origine. Tu fais ça en utilisant la méthode overlay sur un GeoDataFrame, en lui passant un deuxième GeoDataFrame et en spécifiant le type d'opération avec le paramètre how. Il y a cinq types logiques que tu peux passer au paramètre how. Le premier, c'est intersection. Ça te retourne uniquement les zones géographiques exactes où les deux couches se chevauchent. Toute partie des géométries qui ne se chevauche pas est supprimée. Le deuxième, c'est union. L'union retourne tout. Ça merge les deux couches en un seul GeoDataFrame, mais ça découpe les géométries partout où elles se croisent. Tu obtiens des morceaux qui représentent juste la couche un, des morceaux qui représentent juste la couche deux, et des morceaux qui représentent le chevauchement. Le troisième, c'est symmetric difference. C'est l'exact opposé d'une intersection. Ça retourne les zones qui appartiennent à la couche un ou à la couche deux, mais ça découpe et supprime spécifiquement les zones où elles se chevauchent. Le quatrième, c'est difference. Ça garde les géométries de ta première couche, mais ça soustrait les zones couvertes par la deuxième couche. C'est comme croquer dans ta première forme en utilisant la deuxième géométrie comme des dents. Le cinquième, c'est identity. Celui-là est très spécifique. Ça garde les limites extérieures de ta première couche complètement intactes, mais ça divise l'intérieur partout où la deuxième couche l'intersecte. Les morceaux qui se chevauchent récupèrent les attributs de la deuxième couche, pendant que le reste de la première couche reste comme il était. Pour voir pourquoi c'est important, prends un urbaniste qui évalue l'accès aux supermarchés. Il a une couche pour les limites des quartiers et une couche de points pour les supermarchés. D'abord, il fait un buffer sur les points des supermarchés pour en faire des polygones d'un kilomètre. S'il faisait un spatial join standard entre les quartiers et les buffers, il flaggerait juste quels quartiers contiennent un buffer. Mais en appelant la méthode overlay avec le paramètre how réglé sur intersection, il découpe physiquement les formes des quartiers en utilisant les formes des buffers. L'output est un nouveau GeoDataFrame qui contient uniquement l'empreinte exacte du terrain à moins d'un kilomètre d'un magasin, clippée parfaitement sur les limites du quartier. Voici le point clé. Les overlays calculent de nouveaux nœuds d'intersection pour chaque limite croisée, ce qui les rend très lourds en calcul. N'utilise pas un overlay juste pour vérifier des attributs qui se chevauchent, utilise-le seulement quand tu as vraiment besoin de générer de toutes nouvelles limites géométriques à partir de la collision de deux couches. C'est tout pour cet épisode. Merci de ton écoute, et continue de builder !
9

GroupBy spatial : Agrégation avec Dissolve

3m 03s

Apprenez à regrouper des données spatiales. Nous explorons la méthode `dissolve`, qui agit comme un GroupBy spatial, fusionnant de petites géométries en de plus grandes tout en agrégeant de manière transparente leurs attributs tabulaires.

Télécharger
Bonjour, ici Alex de DEV STORIES DOT EU. GeoPandas, épisode 9 sur 11. Tu as un dataset spatial de plus de trois mille comtés, mais ton analyse nécessite une carte propre des cinquante États. Pas besoin de mettre ton travail en pause pour chercher un nouveau dataset en ligne, il te suffit de faire disparaître les frontières internes. On résout ça en utilisant un spatial group-by, et plus précisément une méthode appelée dissolve. Les données sont souvent fournies à un niveau très granulaire. Tu peux avoir des pâtés de maisons quand tu as besoin de quartiers, ou des secteurs de recensement quand tu as besoin de municipalités entières. Dissolve est ton outil pour remonter dans la hiérarchie géographique. Il prend plein de petites formes, les fusionne en de plus grandes en se basant sur un attribut commun, et agrège leurs données sous-jacentes. Si tu as l'habitude de l'analyse de données standard, tu peux voir dissolve comme une opération de spatial group-by. Prenons un scénario concret. Tu as un dataframe spatial du Népal découpé en tout petits districts. Ton dataset contient la géométrie polygonale de chaque district, un chiffre de population, et une colonne de texte indiquant la zone administrative plus large à laquelle le district appartient. Tu veux une carte qui montre uniquement les zones. Tu appelles la méthode dissolve sur ton dataframe spatial et tu fournis la colonne de zone comme cible de regroupement. GeoPandas effectue alors deux opérations distinctes simultanément. D'abord, il gère les géométries spatiales. Il regroupe toutes les lignes de district par leur nom de zone, prend leurs géométries, et les unit ensemble en une seule feature. Les frontières internes des districts sont effacées, te laissant avec une seule limite extérieure continue pour la nouvelle zone. Ensuite, il doit décider quoi faire avec les données tabulaires attachées à ces formes, comme ta colonne de population. Voici le point clé. Beaucoup d'utilisateurs lancent la méthode dissolve, regardent leur nouvelle carte des zones, et se rendent compte que les chiffres de population sont complètement faux. Ce n'est pas une erreur de géométrie. Par défaut, la méthode dissolve gère les données tabulaires en prenant simplement la valeur de la toute première ligne qu'elle rencontre dans chaque groupe. Elle ignore le reste. Pour agréger correctement les quantités numériques, tu dois utiliser explicitement le paramètre aggregate function. Quand tu appelles dissolve en groupant par zone, tu passes aussi le paramètre aggregate function défini sur sum. Maintenant, pendant que GeoPandas fusionne physiquement les formes des districts, il additionne aussi mathématiquement les chiffres de population des districts. La ligne de zone résultante contiendra la population totale agrégée correcte. Ce paramètre accepte aussi d'autres fonctions statistiques standards. Si tes données granulaires contenaient le revenu moyen des ménages, tu pourrais passer mean au lieu de sum. Si elles contenaient des mesures d'élévation, tu pourrais passer max pour trouver le point le plus haut dans la nouvelle région fusionnée. Dissolve combine l'union spatiale et l'agrégation tabulaire en une seule étape synchronisée, te donnant un contrôle total sur l'échelle géographique de tes données. Merci d'avoir écouté, happy coding tout le monde !
10

Cartographie statique : Créer des choroplèthes et tracer des couches

3m 50s

Transformez vos données spatiales en visuels captivants. Cet épisode couvre l'intégration de GeoPandas avec Matplotlib, vous apprenant à créer des cartes choroplèthes personnalisées, à superposer plusieurs jeux de données et à gérer les données manquantes.

Télécharger
Bonjour, ici Alex de DEV STORIES DOT EU. GeoPandas, épisode 10 sur 11. Tu n'as pas besoin d'exporter tes données spatiales vers un lourd logiciel SIG de bureau juste pour voir à quoi elles ressemblent. Tu peux générer des visuels prêts à être publiés directement dans ton environnement Python. La solution, c'est le Static Mapping : construire des choroplèthes et plotter des layers. Le cœur de la visualisation dans GeoPandas, c'est la méthode plot. Chaque GeoDataFrame la possède. Appeler plot sans argument dessine immédiatement ta géométrie. C'est sans effort, mais sous le capot, ça wrap matplotlib. Ça veut dire que tu obtiens une carte en une seule ligne de code, mais tu gardes toute la puissance de matplotlib pour tweaker les couleurs, les axes et les styles. Un plot basique dessine juste des formes. Pour faire une carte choroplèthe, où les formes sont colorées en fonction des valeurs des données, tu utilises l'argument column. Tu passes le nom de la colonne qui contient tes données. GeoPandas va mapper les valeurs de cette colonne sur une échelle de couleurs. Pour aider les spectateurs à comprendre cette échelle, tu peux ajouter une légende en passant legend égal True. Par défaut, plotter une colonne numérique continue crée un dégradé de couleurs lisse. Souvent, c'est mieux de grouper tes données dans des bins distincts. GeoPandas s'intègre avec une librairie appelée mapclassify pour faire ça. En ajoutant l'argument scheme à ta méthode plot, tu peux trier tes données en classes. Par exemple, setter scheme sur quantiles divise tes géométries en groupes de taille égale basés sur leurs valeurs, ce qui rend les patterns spatiaux beaucoup plus faciles à lire. Les datasets du monde réel ont souvent des trous. Si tu construis une carte choroplèthe et qu'il manque la valeur de la donnée que tu plottes dans certaines lignes, GeoPandas va complètement les dropper de la carte. Ça laisse des espaces vides bizarres. Pour corriger ça, tu utilises l'argument missing keywords. Tu passes un dictionnaire d'options de style, comme setter la couleur sur gris clair, pour que ces formes apparaissent quand même sur la carte sans fausser la lecture des données. Maintenant, la deuxième partie de tout ça, c'est l'overlay de plusieurs datasets. La plupart des cartes utiles combinent plusieurs layers. Supposons que tu aies un base layer des quartiers d'une ville et que tu veuilles faire un overlay avec un scatter plot de l'emplacement des supermarchés. Tu fais ça en partageant un objet axis de matplotlib. D'abord, tu crées un axis. Ensuite, tu plottes les polygones de tes quartiers en passant cet axis à la méthode plot. Puis, tu plottes les points de tes supermarchés en passant exactement ce même axis. Les deux datasets sont dessinés sur le même canvas. Pour contrôler quel layer se met au-dessus, tu utilises l'argument z order. Un z order plus bas va en dessous. Donc, tu donnes à tes quartiers un z order de 1, et à tes supermarchés un z order de 2. Les points vont render proprement par-dessus les polygones. Fais bien attention à cette partie. Parfois, tu veux que tes polygones de base soient complètement transparents pour ne voir que leurs bordures. Si tu settes l'argument face color sur None, en tant qu'objet Python sans guillemets, matplotlib l'ignore et applique une couleur de remplissage par défaut. Tu dois setter face color sur la string none pour le rendre transparent. Alternativement, tu peux bypasser ça complètement en appelant la propriété boundary sur ton GeoDataFrame et en plottant ça à la place. C'est une approche beaucoup plus sûre pour dessiner juste les contours. La vraie force du mapping dans GeoPandas, c'est son escalade fluide depuis des checks de données rapides jusqu'à des graphiques prêts à être publiés. Tu obtiens un visuel immédiat avec un seul appel de méthode, mais tu ne perds jamais le contrôle sous-jacent de matplotlib quand tu as besoin de layer des histoires spatiales complexes. C'est tout pour cet épisode. Merci pour ton écoute, et continue à build !
11

Exploration interactive et au-delà

3m 34s

Donnez vie à vos cartes. Nous examinons la méthode `explore()` pour créer des cartes interactives basées sur le web. Enfin, nous clôturons ce voyage avec GeoPandas et vous préparons à commencer à créer des applications spatiales concrètes.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. GeoPandas, épisode 11 sur 11. Les cartes statiques sont super pour une présentation finale, mais quand tu es en pleine phase d'analyse, une image plate est incroyablement limitante. Tu as besoin de zoomer sur un quartier précis, de te déplacer le long d'une rivière, et de survoler une forme pour inspecter les données brutes qui se cachent en dessous. L'exploration interactive et bien plus encore, c'est exactement ce que couvre cet épisode. Dans les épisodes précédents, on a utilisé la méthode plot pour dessiner des images statiques de nos géométries. GeoPandas propose aussi une alternative qui s'appelle explore. Quand tu appelles explore sur un GeoDataFrame, ça génère une carte web complètement interactive directement dans ton environnement. Sous le capot, ça utilise une library Python qui s'appelle Folium, qui est elle-même construite sur la célèbre library de cartographie JavaScript Leaflet. La beauté de la méthode explore, c'est que son API imite parfaitement la méthode plot. Tu n'as pas besoin d'apprendre un tout nouveau set d'arguments pour passer d'une image statique à une carte interactive. Prends le dataset des arrondissements de New York. Tu appelles explore sur le dataset et tu passes l'argument column défini sur area. L'output est immédiat et tactile. Une carte apparaît montrant la ville, et tu peux utiliser ta souris pour te déplacer et scroller pour zoomer sur des rues spécifiques. Voici le point clé. Quand tu survoles Brooklyn ou Queens avec ton curseur, un tooltip apparaît automatiquement. Ce tooltip affiche les données tabulaires sous-jacentes pour cette géométrie spécifique, y compris la valeur exacte de area que tu lui as indiquée pour colorer la carte. Tu obtiens le contexte visuel et les nombres bruts exactement en même temps. Il y a un détail technique que tu dois garder en tête. Tu dois comprendre ce que la méthode explore retourne vraiment. La méthode plot génère un fichier image léger. La méthode explore retourne un objet lourd bourré de HTML et de JavaScript. C'est génial quand tu travailles dans un Jupyter Notebook, parce que le navigateur fait le rendu de la carte interactive à la perfection. Mais si ton but final est de générer un rapport PDF statique ou une simple impression, explore n'est pas le bon outil. Les éléments web interactifs ne vont tout simplement pas passer sur papier. Utilise explore pour investiguer tes données, et repasse sur plot quand tu as besoin de publier un document statique. Ce qui nous amène à la véritable puissance du framework GeoPandas. Tout au long de cette série, on a vu comment il agit comme un liant pour l'écosystème spatial Python. Il prend pandas et lui donne une conscience spatiale. Il délègue les maths géométriques lourdes à Shapely. Il s'appuie sur Pyogrio pour lire et écrire des fichiers à haute vitesse. Enfin, il se connecte aux libraries de visualisation pour te donner un feedback instantané. Tu peux charger un dataset massif, le filtrer, calculer des distances, faire des spatial joins, et mapper les résultats sur un canvas interactif, le tout en juste quelques lignes de Python. La documentation officielle de GeoPandas est excellente, et lire leurs guides getting started est le meilleur moyen de consolider ce que tu as appris. Ouvre un notebook, charge des données qui t'intéressent, et commence à expérimenter. Si tu as une idée de sujet qu'on devrait couvrir, passe sur devstories.eu et dis-le-nous. Le vrai avantage de ce framework, c'est qu'il efface la complexité des maths spatiales, te laissant traiter la géographie non pas comme un obstacle, mais juste comme un autre type de données à filtrer, join, et analyser. C'est tout pour cet épisode. Merci d'avoir écouté, et continue de développer !