Torna al catalogo
Season 40 11 Episodi 42 min 2026

GeoPandas

v1.1 — Edizione 2026. Un corso audio su GeoPandas 1.1, la potente libreria Python per i dati geospaziali. Impara a gestire operazioni geometriche, manipolare dati spaziali, lavorare con le proiezioni e generare mappe.

Analisi Geospaziale Scienza dei Dati
GeoPandas
In Riproduzione
Click play to start
0:00
0:00
1
Scopri GeoPandas: La colonna geometrica attiva
Un'introduzione alle strutture dati fondamentali di GeoPandas: le GeoSeries e i GeoDataFrame. Impara come GeoPandas estende la nota libreria pandas per gestire oggetti geospaziali e comprendi il concetto critico della colonna geometrica attiva.
3m 51s
2
Lettura e scrittura: I/O veloce con Pyogrio
Un'analisi approfondita sul caricamento e salvataggio dei dati spaziali. Scopri come GeoPandas sfrutta il motore Pyogrio e Apache Arrow per accelerare drasticamente l'I/O dei file, oltre a come utilizzare i filtri spaziali e di bounding-box durante il caricamento.
3m 48s
3
La forma della Terra: Proiezioni e CRS
Comprendi i Coordinate Reference Systems (CRS) e perché sono vitali per l'accuratezza spaziale. Impara la differenza tra coordinate geografiche e proiettate, e come trasformare in sicurezza le tue geometrie usando GeoPandas.
3m 57s
4
Plasmare lo spazio: Buffer, centroidi e convex hull
Scopri come generare geometrie completamente nuove da quelle esistenti. Questo episodio copre metodi costruttivi essenziali come il calcolo dei centroidi, la generazione di zone di buffer e il tracciamento dei convex hull.
3m 34s
5
Predicati spaziali: Intersects, Within e Contains
Impara a porre domande sulle relazioni tra forme diverse. Esploriamo i predicati spaziali binari — come intersects, within e contains — per testare come le geometrie interagiscono nello spazio.
3m 53s
6
Velocizzare le query: L'indice spaziale R-Tree
Scopri il motore segreto dietro le prestazioni di GeoPandas. Questo episodio svela come l'indice spaziale STR R-tree utilizza i bounding box per ridurre drasticamente il costo computazionale delle query spaziali.
3m 41s
7
Unire i mondi: Join spaziali e nearest join
Porta l'integrazione dei dati a un livello superiore. Impara a unire due GeoDataFrame separati basandoti interamente sulle loro relazioni spaziali utilizzando le join spaziali (`sjoin`) e le join di prossimità (`sjoin_nearest`).
4m 15s
8
Operazioni insiemistiche: Creare geometrie con gli overlay
Scopri come tagliare, unire e dividere forme sovrapposte. Questo episodio copre il potente metodo `overlay`, spiegando come calcolare intersezioni, unioni e differenze per creare geometrie completamente nuove.
3m 59s
9
GroupBy spaziale: Aggregazione con dissolve
Impara a raggruppare i dati spaziali. Esploriamo il metodo `dissolve`, che agisce come un GroupBy spaziale, unendo geometrie più piccole in geometrie più grandi e aggregando senza problemi i loro attributi tabulari.
3m 15s
10
Mappatura statica: Creare mappe coropletiche e tracciare layer
Trasforma i tuoi dati spaziali in visualizzazioni accattivanti. Questo episodio copre l'integrazione di GeoPandas con matplotlib, insegnandoti a creare mappe coropletiche personalizzate, sovrapporre più dataset e gestire i dati mancanti.
4m 10s
11
Esplorazione interattiva e oltre
Dai vita alle tue mappe. Esaminiamo il metodo `explore()` per creare mappe interattive basate sul web. Infine, concludiamo il viaggio in GeoPandas e ti prepariamo a iniziare a costruire applicazioni spaziali nel mondo reale.
3m 47s

Episodi

1

Scopri GeoPandas: La colonna geometrica attiva

3m 51s

Un'introduzione alle strutture dati fondamentali di GeoPandas: le GeoSeries e i GeoDataFrame. Impara come GeoPandas estende la nota libreria pandas per gestire oggetti geospaziali e comprendi il concetto critico della colonna geometrica attiva.

Download
Ciao, sono Alex di DEV STORIES DOT EU. GeoPandas, episodio 1 di 11. I sistemi geografici tradizionali di solito ti obbligano a mantenere esattamente una forma geometrica per file, il che significa che se hai bisogno del confine di una contea e del suo punto centrale, devi mantenere due file separati. GeoPandas elimina questo vincolo, permettendoti di memorizzare confini, punti centrali e zone di buffer fianco a fianco in un'unica tabella. Ti presento GeoPandas: la Active Geometry Column. GeoPandas è un'estensione della libreria di analisi dati pandas. Prende le familiari strutture DataFrame e Series e aggiunge funzionalità spaziali. Dietro le quinte, GeoPandas funge da ponte tra i dati tabellari e la geometria spaziale. Gestisce la struttura della tabella stessa, mentre delega i calcoli matematici effettivi di punti, linee e poligoni a un motore spaziale chiamato Shapely. Quando chiedi a GeoPandas di calcolare un'area o trovare un confine, passa le forme pertinenti a Shapely, recupera il risultato matematico e lo allinea direttamente nella tua riga di dati. Le due strutture dati principali che rendono possibile tutto ciò sono la GeoSeries e il GeoDataFrame. Una GeoSeries è una singola colonna in cui ogni riga contiene un geometry object di Shapely. Un GeoDataFrame è un DataFrame pandas standard che contiene almeno una colonna GeoSeries. Poiché un singolo GeoDataFrame può contenere più colonne spaziali contemporaneamente, il sistema deve sapere a quale fare riferimento quando esegui un comando spaziale. Questo viene gestito tramite la active geometry column. Ecco il punto chiave. La active geometry column è uno stato funzionale, non una string specifica. Gli utenti spesso confondono una colonna chiamata letteralmente 'geometry' con il concetto sottostante di active geometry column. Di default, quando carichi i dati, GeoPandas cerca una colonna chiamata 'geometry' e le assegna lo stato attivo. Ma le tue colonne spaziali possono avere assolutamente qualsiasi nome. Ciò che conta è quale colonna detiene lo stato attivo, perché i metodi spaziali vengono indirizzati specificamente a quella colonna attiva. Considera un dataset di contee locali. Hai una colonna chiamata county_borders che memorizza i complessi contorni poligonali di ciascuna regione. Nella stessa tabella, hai un'altra colonna chiamata county_centroids che memorizza un singolo punto al centro di ciascuna regione. Se la colonna borders ha lo stato attivo, chiedere al DataFrame di calcolare l'area restituirà l'intera estensione in miglia quadrate della contea. Qualsiasi calcolo di distanza che esegui misurerà a partire dal bordo esterno di quel confine di contea. Se invece vuoi misurare la distanza tra i punti centrali delle contee, cambi il contesto spaziale. Chiami un metodo chiamato set_geometry e fornisci il nome della colonna centroids. Immediatamente, county_centroids diventa la active geometry. La colonna borders rimane perfettamente intatta, mantenendo i tuoi poligoni, ma il sistema ora la tratta come una qualsiasi altra colonna di dati. Se esegui un calcolo di distanza ora, GeoPandas punta automaticamente ai punti centrali. Passi da un contesto spaziale all'altro istantaneamente senza fare il merge di tabelle o gestire dataset duplicati. L'aspetto più utile da ricordare è che un GeoDataFrame è un contenitore spaziale in grado di contenere tutti i geometry layer di cui hai bisogno, ma la active geometry determina quale strumento spaziale è attualmente in uso. Se ti piace il podcast e vuoi supportare lo show, puoi cercare DevStoriesEU su Patreon. Questo è tutto per questo episodio. Grazie per l'ascolto e continua a sviluppare!
2

Lettura e scrittura: I/O veloce con Pyogrio

3m 48s

Un'analisi approfondita sul caricamento e salvataggio dei dati spaziali. Scopri come GeoPandas sfrutta il motore Pyogrio e Apache Arrow per accelerare drasticamente l'I/O dei file, oltre a come utilizzare i filtri spaziali e di bounding-box durante il caricamento.

Download
Ciao, sono Alex di DEV STORIES DOT EU. GeoPandas, episodio 2 di 11. Stai caricando uno shapefile da cinque gigabyte in memoria, solo per scartare immediatamente il novanta percento delle righe usando i filtri standard di pandas. La tua RAM schizza alle stelle, il tuo script rallenta e stai perdendo tempo. In realtà, puoi fare slicing di quei dati spaziali prima ancora che lascino il disco rigido. Oggi vediamo Reading and Writing: I/O veloce con Pyogrio. Le funzioni principali che userai per far entrare e uscire i dati da GeoPandas sono read file e to file. Storicamente, GeoPandas usava una libreria chiamata Fiona dietro le quinte. Funzionava, ma era lenta. Il GeoPandas moderno usa Pyogrio di default. Pyogrio è un'interfaccia diretta e altamente ottimizzata per GDAL, che è la libreria C core che alimenta quasi tutti i software geospaziali open source. Pyogrio è veloce di default, ma puoi forzarlo a essere molto più veloce. Quando chiami read file o to file, puoi passare un argomento chiamato use arrow, impostato a true. Questo dice a Pyogrio di gestire i dati usando le strutture di memoria di Apache Arrow. Invece di leggere il file e tradurre ogni singola coordinata e attributo in un oggetto Python uno per uno, l'integrazione con Arrow processa i dati in grandi batch memory-efficient. Questo bypassa completamente il solito overhead di Python. Se hai a che fare con milioni di record, attivare il flag Arrow trasforma un'operazione di read o write che richiede diversi minuti in una che richiede pochi secondi. Ma l'ottimizzazione più efficace è semplicemente leggere meno dati. Un errore molto comune è leggere un intero dataset enorme in un GeoDataFrame, e poi usare l'indexing standard di pandas per filtrarlo successivamente. Questo causa picchi di memoria enormi e completamente inutili. GeoPandas ti permette di filtrare i dati durante l'operazione di read file stessa, il che mantiene piatta la tua memory footprint. Diciamo che hai un file che contiene ogni building footprint nello Stato di New York, ma ti interessano solo gli edifici intorno a Coney Island. Se passi una tupla bounding box all'argomento b box in read file, il motore C sottostante controlla lo spatial index del file sul disco. Ignora completamente qualsiasi edificio al di fuori di quel box definito. Ottieni un DataFrame minuscolo che contiene solo quello che ti serve, e la tua RAM registra a malapena l'operazione. Se un semplice bounding box rettangolare non è abbastanza preciso per le tue esigenze, puoi usare l'argomento mask. Passi una geometry specifica, come un polygon complesso che rappresenta i confini esatti di un quartiere, direttamente in read file. Il motore valuta questa shape e caricherà solo le righe che intersecano il tuo polygon. È leggermente più costoso a livello computazionale rispetto a un bounding box di base, ma è altamente accurato. Lo spatial filtering copre la geografia, ma puoi anche filtrare gli attributi standard. La funzione read file accetta un parametro where. Questo prende una SQL WHERE clause standard come string. Se vuoi solo gli edifici taggati come residential, passi una string che dice che la colonna type è uguale a residential. GDAL fa il parsing di questo SQL statement e filtra le righe a livello C prima di passare qualsiasi cosa a Python. Puoi persino combinare un bounding box e una where clause nell'esatta stessa chiamata di read per fare slicing sia della geografia che degli attributi simultaneamente. Ecco il punto chiave. Spingere i tuoi filtri giù fino all'operazione di read significa che il lavoro pesante avviene in codice C altamente ottimizzato, non nella memoria di Python. Il modo in assoluto più veloce per processare i dati spaziali è non caricare mai le parti che non ti servono. Grazie per aver passato qualche minuto con me. Alla prossima, stammi bene.
3

La forma della Terra: Proiezioni e CRS

3m 57s

Comprendi i Coordinate Reference Systems (CRS) e perché sono vitali per l'accuratezza spaziale. Impara la differenza tra coordinate geografiche e proiettate, e come trasformare in sicurezza le tue geometrie usando GeoPandas.

Download
Ciao, sono Alex di DEV STORIES DOT EU. GeoPandas, episodio 3 di 11. Calcoli la distanza tra due città e il risultato è 2,4 invece di 200 miglia. Il tuo codice ha girato alla perfezione, ma il risultato è completamente inutile. Il colpevole è il modo in cui i tuoi dati spaziali vengono mappati sul mondo fisico, il che ci porta a La Forma della Terra: Proiezioni e CRS. Ogni GeoSeries e GeoDataFrame ha un attributo chiamato dot C R S. Questo memorizza un oggetto pyproj C R S. Sono i metadata che dicono a GeoPandas cosa rappresentano effettivamente i numeri nella tua colonna geometry. Senza un coordinate reference system, una coordinata come meno 73 virgola 40 è solo un punto su una griglia infinita e astratta. Con un C R S, diventa una posizione specifica e nota sulla Terra. Ci sono due categorie principali di coordinate systems che devi capire. I geographic coordinate systems rappresentano la Terra come un globo tridimensionale. Le loro coordinate sono angoli misurati dal centro della Terra, espressi in gradi di longitudine e latitudine. Un esempio molto comune è EPSG 4326, che è il sistema utilizzato dal GPS globale. I projected coordinate systems, d'altra parte, rappresentano la Terra appiattita su una superficie bidimensionale. Le loro coordinate usano misurazioni lineari, come metri o US Survey feet. Ecco il punto chiave. Le operazioni spaziali dietro le quinte di GeoPandas assumono che i tuoi dati si trovino su un piano cartesiano piatto. Se i tuoi dati sono in un geographic coordinate system come EPSG 4326 e chiedi a GeoPandas di calcolare l'area dei distretti di New York, farà i calcoli trattando i gradi come se fossero semplici quadrati di una griglia. Otterrai un risultato come 0,083. Il che significa 0,083 gradi quadrati, che è una metrica senza senso. I gradi cambiano la loro larghezza fisica a seconda di quanto sei lontano dall'equatore, quindi non puoi usarli per misurare distanze o aree assolute. Per fare calcoli nel mondo reale, devi proiettare i tuoi dati geografici in un projected coordinate system. Lo fai usando un metodo chiamato to C R S. Se prendi quei dati di New York e passi EPSG 2263 al metodo to C R S, GeoPandas trasformerà matematicamente ogni singola coordinata nella tua colonna geometry. EPSG 2263 è un projected system specifico per New York che misura le distanze in piedi. Ora, quando lanci l'esatto stesso calcolo dell'area, ottieni un risultato in milioni di piedi quadrati, che è una misurazione reale e utilizzabile. C'è una trappola comune qui. I developer spesso cercano di sistemare le proiezioni mancanti usando il metodo set C R S invece del metodo to C R S. Set C R S non è un tool di conversione. Viene usato solo quando i tuoi dati spaziali sono stati caricati mancando completamente di un coordinate reference system. Assegna semplicemente i metadata, dicendo a GeoPandas cosa sono già i numeri nella tua colonna geometry, senza alterare i numeri stessi. Usi to C R S quando i dati hanno già un C R S valido, e vuoi convertire matematicamente quelle coordinate in un sistema completamente nuovo. Se i tuoi calcoli di area o distanza sembrano assurdamente piccoli, quasi sempre significa che stai chiedendo a GeoPandas di fare calcoli piatti su gradi sferici, e devi proiettare i tuoi dati. Questo è tutto per oggi. Grazie per aver ascoltato — vai a creare qualcosa di fantastico.
4

Plasmare lo spazio: Buffer, centroidi e convex hull

3m 34s

Scopri come generare geometrie completamente nuove da quelle esistenti. Questo episodio copre metodi costruttivi essenziali come il calcolo dei centroidi, la generazione di zone di buffer e il tracciamento dei convex hull.

Download
Ciao, sono Alex di DEV STORIES DOT EU. GeoPandas, episodio 4 di 11. A volte la forma che devi analizzare non è quella che ti è stata fornita. Potresti importare un elenco di posizioni di negozi come singoli punti, ma ciò che devi effettivamente capire è l'area di consegna che li circonda. Questo richiede di modellare matematicamente punti e linee in confini dinamici usando Shaping Space: buffer, centroid e convex hull. Queste manipolazioni geometriche costruttive agiscono come la plastilina dei dati spaziali. Parti da geometrie grezze e usi questi metodi integrati per calcolare forme completamente nuove, su misura per la tua analisi. In GeoPandas, questi metodi si applicano elemento per elemento all'intera GeoSeries attiva. Se hai diecimila forme, un comando ne genera diecimila di nuove. Tutto questo si basa sulla libreria Shapely dietro le quinte per eseguire i calcoli geometrici. La manipolazione più comune è il metodo buffer. Un buffer crea un poligono che rappresenta tutti i punti entro una data distanza dalla tua forma originale. Prendi uno scenario in cui hai delle geometrie di tipo punto che rappresentano delle caffetterie. Vuoi definire un'area di consegna di due chilometri per ogni posizione. Chiami il metodo buffer sui tuoi punti e gli passi la tua distanza. GeoPandas disegna istantaneamente un cerchio attorno a ogni singolo negozio, trasformando il tuo dataset di punti in un dataset di poligoni. Fai attenzione a questo passaggio. Eseguire un'operazione di buffer richiede un Coordinate Reference System proiettato. Se le tue geometrie sono in un formato geografico come latitudine e longitudine, un valore di distanza di dieci significa dieci gradi, non dieci metri. Poiché i gradi di longitudine si riducono in larghezza fisica man mano che ti allontani dall'equatore, fare il buffering di dati non proiettati produce ovali fortemente distorti e allungati invece di cerchi uniformi. Proietta sempre i tuoi dati in un sistema metrico prima di calcolare le distanze. A volte devi collassare una forma invece di espanderla. Se hai poligoni complessi che rappresentano zone di quartiere e devi ridurli a singoli punti per i calcoli di distanza o le etichette sulla mappa, usi l'attributo centroid. Il centroid calcola il centro di massa matematico per ogni geometria, restituendo un punto centrale perfetto per ogni poligono o linea nel tuo dataset. Per isolare i bordi di una forma, usi l'attributo boundary. Se hai un poligono che rappresenta una contea, il boundary rimuove l'intero interno. Restituisce una geometria a dimensionalità inferiore, trasformando il poligono in un insieme di linee che delineano solo la contea. Se chiami boundary su una linea, restituisce i singoli punti a ciascuna estremità di quella linea. Ed è qui che la cosa si fa interessante. Hai anche l'attributo convex hull. Immagina una collezione di punti sparsi che rappresentano singoli avvistamenti di animali in una foresta. Se tu tendessi un elastico completamente attorno ai punti più esterni e lo lasciassi stringere, la forma creata da quell'elastico è il convex hull. Restituisce il più piccolo poligono convesso possibile che racchiude l'intera geometria. È un modo incredibilmente veloce per calcolare l'impronta fisica complessiva di un insieme di coordinate disperse. La geometria costruttiva significa che non sei mai bloccato con i confini spaziali che hai importato; puoi sempre calcolare le zone esatte che la tua analisi richiede effettivamente. Grazie per aver passato qualche minuto con me. Alla prossima, stammi bene.
5

Predicati spaziali: Intersects, Within e Contains

3m 53s

Impara a porre domande sulle relazioni tra forme diverse. Esploriamo i predicati spaziali binari — come intersects, within e contains — per testare come le geometrie interagiscono nello spazio.

Download
Ciao, sono Alex di DEV STORIES DOT EU. GeoPandas, episodio 5 di 11. Chiedersi se una specifica coordinata GPS si trova all'interno di un confine urbano complesso e frastagliato sembra un problema matematico computazionalmente pesante che coinvolge il ray-casting. Ma in questa libreria, viene gestito con una singola riga di logica booleana. Stiamo parlando di predicati spaziali: Intersects, Within e Contains. Se usi pandas standard, hai già familiarità con il conditional filtering. Prendi una colonna di un dataframe, controlli se i suoi valori sono maggiori di dieci e ottieni una Series di valori True e False. Quindi passi questa Series booleana direttamente nelle parentesi del tuo dataframe per filtrare le righe. I predicati spaziali fanno esattamente la stessa cosa. Invece di filtrare in base a un numero, filtri in base a una verità spaziale. Stai confrontando delle forme. Un predicato spaziale è un metodo che verifica la relazione topologica tra un'intera GeoSeries e una singola geometria di riferimento. Quando chiami un metodo predicato sulla tua colonna geometry attiva, GeoPandas valuta ogni singola riga rispetto a quella forma di riferimento. Fa i calcoli geometrici dietro le quinte e ti restituisce una Series booleana standard di pandas. Il test di relazione più comune è intersects. Quando chiami il metodo intersects, restituisce True se il confine o l'interno di una geometria nel tuo dataset tocca o si sovrappone in qualsiasi modo alla geometria di riferimento. Se due poligoni condividono un singolo punto sul loro bordo esterno, si intersecano. Se un segmento di linea attraversa un poligono, si intersecano. È un catch-all generico per qualsiasi spazio fisico condiviso. Poi, abbiamo i metodi contains e within. Le persone spesso li confondono perché sono operazioni inverse. La logica è strettamente direzionale. Se il Poligono A è il confine di una grande città e il Punto B è una caffetteria, la città contiene la caffetteria. La caffetteria è all'interno della città. Se il Poligono A contiene il Punto B, allora il Punto B è all'interno del Poligono A. Usi il metodo contains quando la tua GeoSeries contiene geometrie di delimitazione di grandi dimensioni e gli passi una forma di riferimento più piccola. Restituisce True solo se la forma di riferimento è completamente racchiusa dalla geometria nella riga. Al contrario, chiami il metodo within quando la tua GeoSeries contiene gli elementi più piccoli, come migliaia di singoli punti di coordinate, e vuoi testare se ricadono interamente all'interno di un singolo poligono di riferimento più grande. Fai attenzione a questa parte. Poiché questi metodi restituiscono maschere booleane standard, puoi metterli in chain direttamente nelle tue data pipeline. Diciamo che hai un dataframe di distretti cittadini. Hai applicato un buffer per espandere i loro confini. Ora vuoi sapere quali di questi distretti espansi e buffered si sovrappongono al poligono originale unbuffered di Brooklyn. Per prima cosa, isoli il singolo poligono originale di Brooklyn per fargli da geometria di riferimento. Poi, prendi il tuo dataframe di distretti buffered e chiami il metodo intersects sulla sua colonna geometry, passando la forma di Brooklyn. GeoPandas valuta ogni riga. Restituisce True per i distretti buffered che toccano il poligono di Brooklyn e False per quelli che non lo fanno. Metti quella Series di True e False risultante direttamente all'interno delle parentesi di selezione del tuo dataframe. Il dataframe scarta istantaneamente le righe False. Ti ritrovi con un dataset filtrato geograficamente, ottenuto interamente tramite operazioni standard sui dati tabellari. Trattando le relazioni dello spazio fisico come semplici domande True o False, colmi il divario tra la cartografia complessa e la logica di base dei dataframe. Questo è tutto per questo episodio. Grazie per l'ascolto e continua a sviluppare!
6

Velocizzare le query: L'indice spaziale R-Tree

3m 41s

Scopri il motore segreto dietro le prestazioni di GeoPandas. Questo episodio svela come l'indice spaziale STR R-tree utilizza i bounding box per ridurre drasticamente il costo computazionale delle query spaziali.

Download
Ciao, sono Alex di DEV STORIES DOT EU. GeoPandas, episodio 6 di 11. Le tue query geospaziali ci mettono ore a girare, bloccando la tua macchina e mettendo a dura prova la tua pazienza. Probabilmente stai facendo controllare alla tua CPU ogni singolo punto contro ogni singolo confine, il che scala malissimo. La soluzione a questo collo di bottiglia è Turbocharge Queries: l'indice spaziale R-Tree. Hai un milione di punti GPS e cinquanta poligoni di quartieri. Se testi ogni punto contro ogni poligono per vedere a quale quartiere appartiene, esegui cinquanta milioni di calcoli geometrici complessi. Capire se una coordinata si trova all'interno di un poligono irregolare è un'operazione matematica pesante. Farlo come full scan crea un problema di scaling esponenziale che distrugge le performance. Un indice spaziale risolve questo problema comportandosi come un sommario per la tua mappa. GeoPandas usa una struttura specifica chiamata R-tree, costruita usando l'algoritmo Sort-Tile-Recursive. La R sta per rettangolo. L'albero raggruppa gli oggetti logicamente in base alla loro posizione. L'intuizione chiave qui è il pre-filter. Invece di controllare i bordi esatti e frastagliati del poligono di un quartiere, l'indice ci disegna attorno un semplice box rettangolare. Questo viene chiamato envelope o bounding box. Controllare se una coordinata cade all'interno di un rettangolo base richiede uno sforzo computazionale quasi nullo. L'indice scarta immediatamente qualsiasi punto che non sia nemmeno all'interno del bounding box rettangolare del quartiere. Riduci all'istante i candidati da un milione a forse qualche migliaio. Questo ci porta a una realtà critica in due step delle spatial query. Un hit sull'indice spaziale significa solo che i bounding box si intersecano. Un punto potrebbe trovarsi dentro il rettangolo, ma appena fuori dal vero confine curvo del quartiere. L'hit del bounding box è solo lo step uno. Lo step due è il check esatto della geometria su quel sottoinsieme più piccolo di candidati. Accedi a questo engine tramite il metodo sindex dot query. Se passi una singola geometria, restituisce un array di indici interi che corrispondono alle geometrie nella tua GeoSeries i cui bounding box intersecano il tuo input. Per forzare l'indice a gestire quel cruciale secondo step, passa l'argomento predicate uguale a intersects. GeoPandas userà quindi il check economico del bounding box per trovare i candidati, ed eseguirà automaticamente il costoso check esatto della geometria solo sui sopravvissuti. Puoi anche passare un intero array di geometrie nella query in una volta sola. Questa array query restituisce un array bidimensionale di indici, accoppiando i match tra il tuo array di input e la GeoSeries indicizzata. La prima riga ti dà l'indice della tua geometria di input, e la seconda riga ti dà l'indice della geometria corrispondente nell'albero. A volte non ti serve un'intersezione, ti serve solo la prossimità. Il metodo sindex dot nearest prende una geometria di input e restituisce l'indice della geometria più vicina nell'albero. Questo è super efficiente per fare lo snapping di una coordinata isolata a una rete stradale, o per trovare la stazione meteorologica più vicina senza calcolare la distanza verso ogni singola stazione del continente. Le operazioni spaziali complesse sono matematicamente costose. Non forzare mai la tua CPU a calcolare intersezioni geometriche esatte quando un semplice check rettangolare può eliminare il novantanove percento dei candidati in partenza. Se trovi questi episodi utili e vuoi supportare lo show, puoi cercare DevStoriesEU su Patreon. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
7

Unire i mondi: Join spaziali e nearest join

4m 15s

Porta l'integrazione dei dati a un livello superiore. Impara a unire due GeoDataFrame separati basandoti interamente sulle loro relazioni spaziali utilizzando le join spaziali (`sjoin`) e le join di prossimità (`sjoin_nearest`).

Download
Ciao, sono Alex di DEV STORIES DOT EU. GeoPandas, episodio 7 di 11. Come unisci una lista di ristoranti con una lista di distretti censuari quando non condividono alcuna colonna ID? Lasci che siano le loro coordinate a fare il matching. Oggi parliamo di unire i mondi: spatial join e nearest join. Uno spatial join è l'equivalente geografico di una SQL join. Invece di collegare le tabelle tramite un ID condiviso, che sia una string o un integer, le unisci in base alla loro relazione fisica nello spazio. Per farlo usi la funzione sjoin. Considera uno scenario in cui hai un GeoDataFrame di punti che rappresentano dei supermercati e un GeoDataFrame separato con i poligoni dei quartieri di Chicago. Vuoi associare il nome del quartiere a ogni riga del supermercato. Per farlo, chiami sjoin sul dataframe dei supermercati e passi il dataframe dei quartieri come argomento di destra. La funzione si basa su due argomenti principali. Il primo è how. Funziona esattamente come le join standard dei database. Una inner join mantiene solo i negozi che si trovano all'interno di un quartiere. Una left join mantiene tutti i tuoi supermercati, aggiungendo valori null se un negozio si trova al di fuori dei confini del quartiere. Una right join mantiene tutti i quartieri, duplicandoli se contengono più negozi e mantenendoli con dati dei negozi vuoti se non ne contengono nessuno. Il secondo argomento è predicate. Questo definisce la condizione spaziale che deve essere soddisfatta per un match. Il default è intersects, il che significa che le geometrie si toccano o si sovrappongono in qualche modo. Puoi anche usare within, per garantire che un punto sia strettamente all'interno di un poligono, oppure contains, se stai verificando se un poligono racchiude completamente un punto. Ecco il punto chiave. Quando esegui una spatial join, stai combinando due tabelle con colonne geometry, ma il GeoDataFrame risultante può avere una sola geometry attiva. Di default, sjoin mantiene la geometry del dataframe di sinistra e scarta la geometry del dataframe di destra, mantenendo però tutte le sue colonne di attributi standard. Se unisci i punti dei supermercati a sinistra con i poligoni dei quartieri a destra, il tuo output sarà una tabella di punti che ora include i nomi dei quartieri. Se hai effettivamente bisogno che la tabella risultante contenga le forme dei poligoni, devi invertire l'ordine della join. Metti i quartieri come tabella di sinistra e i supermercati come tabella di destra. A volte i tuoi dataset non si sovrappongono affatto. Se vuoi trovare la stazione della metropolitana più vicina a ciascun supermercato, le intersezioni non ti aiuteranno. Per questo, usi la funzione sjoin nearest. Funziona in modo simile a una spatial join standard, ma fa il match delle geometry in base alla prossimità anziché all'intersezione. Puoi passare un argomento distance column come string a sjoin nearest. Questo dice alla funzione di aggiungere una nuova colonna ai tuoi risultati contenente l'esatta distanza calcolata tra gli elementi matchati. Puoi anche fornire una soglia di max distance. Questo restringe la join in modo che faccia il match solo se il nearest neighbor si trova entro un raggio specificato, impedendoti di collegare un supermercato a una stazione dall'altra parte della città semplicemente perché è la più vicina disponibile. Dietro le quinte, entrambe queste funzioni si basano pesantemente su uno spatial index. Non calcolano la distanza o l'intersezione tra ogni singolo punto e ogni singolo poligono, il che richiederebbe una quantità di tempo enorme. Usano l'index per valutare prima i bounding box, scartando rapidamente le geometry che non sono per niente vicine tra loro prima di eseguire i pesanti calcoli matematici. Trattare la posizione fisica come la tua foreign key definitiva ti permette di collegare dataset che altrimenti non avrebbero assolutamente nulla in comune. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
8

Operazioni insiemistiche: Creare geometrie con gli overlay

3m 59s

Scopri come tagliare, unire e dividere forme sovrapposte. Questo episodio copre il potente metodo `overlay`, spiegando come calcolare intersezioni, unioni e differenze per creare geometrie completamente nuove.

Download
Ciao, sono Alex di DEV STORIES DOT EU. GeoPandas, episodio 8 di 11. Uno spatial join ti dice se una zona allagabile colpisce una proprietà. Ma lascia il confine della proprietà completamente intatto nel tuo dataset. Se hai bisogno di un nuovo poligono che mostri esattamente quale parte della proprietà è sott'acqua, un join non è sufficiente. Hai bisogno delle Set Operations, in particolare di creare geometrie con gli overlay. È comune confondere gli spatial join, che usano il metodo sjoin, con gli overlay. Ecco la differenza. Uno spatial join testa una relazione, aggiungendo gli attributi da un layer all'altro mantenendo la geometria originale esattamente identica. Un overlay taglia fisicamente le geometrie. Pensalo come uno stampino per biscotti. Hai due strati di impasto steso sovrapposti, che rappresentano due diversi GeoDataFrame. Un overlay preme su entrambi i layer, tagliandoli l'uno contro l'altro. Il risultato è un set di pezzi di puzzle completamente nuovo. Ovunque quei due layer si sovrappongano, il nuovo pezzo eredita gli attributi di entrambi i layer originali. Puoi eseguire questa operazione usando il metodo overlay su un GeoDataFrame, passando un secondo GeoDataFrame e specificando il tipo di operazione tramite il parametro how. Ci sono cinque tipi logici che puoi passare al parametro how. Il primo è intersection. Restituisce solo le aree geografiche esatte in cui i due layer si sovrappongono. Qualsiasi parte delle geometrie che non si sovrappone viene scartata. Il secondo è union. Una union restituisce tutto. Unisce entrambi i layer in un singolo GeoDataFrame, ma taglia le geometrie ovunque si incrocino. Ottieni pezzi che rappresentano solo il layer uno, pezzi che rappresentano solo il layer due e pezzi che rappresentano la sovrapposizione. Il terzo è symmetric difference. È l'esatto opposto di un'intersection. Restituisce le aree che appartengono al layer uno o al layer due, ma taglia e scarta specificamente le aree in cui si sovrappongono. Il quarto è difference. Questo mantiene le geometrie del tuo primo layer, ma sottrae le aree coperte dal secondo layer. È come dare un morso alla tua prima forma usando la seconda geometria come denti. Il quinto è identity. Questo è molto specifico. Mantiene i confini esterni del tuo primo layer completamente intatti, ma divide l'interno ovunque il secondo layer lo interseca. Le fette sovrapposte ottengono gli attributi del secondo layer, mentre il resto del primo layer rimane com'era. Per capire perché questo è importante, prendi un urbanista che valuta l'accesso ai supermercati. Ha un layer con i confini dei quartieri e un layer con i punti dei supermercati. Per prima cosa, applica un buffer ai punti dei supermercati trasformandoli in poligoni di un chilometro. Se eseguisse uno spatial join standard tra i quartieri e i buffer, si limiterebbe a contrassegnare quali quartieri contengono un buffer. Ma chiamando il metodo overlay con il parametro how impostato su intersection, taglia fisicamente le forme dei quartieri usando le forme dei buffer. L'output è un nuovo GeoDataFrame che contiene solo l'esatta porzione di terreno entro un chilometro da un negozio, ritagliata perfettamente sui confini del quartiere. Ecco il punto chiave. Gli overlay calcolano nuovi nodi di intersezione per ogni confine che si incrocia, il che li rende computazionalmente pesanti. Non usare un overlay solo per controllare gli attributi sovrapposti, usalo solo quando hai davvero bisogno di generare confini geometrici completamente nuovi dalla collisione di due layer. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a costruire!
9

GroupBy spaziale: Aggregazione con dissolve

3m 15s

Impara a raggruppare i dati spaziali. Esploriamo il metodo `dissolve`, che agisce come un GroupBy spaziale, unendo geometrie più piccole in geometrie più grandi e aggregando senza problemi i loro attributi tabulari.

Download
Ciao, sono Alex di DEV STORIES DOT EU. GeoPandas, episodio 9 di 11. Hai un dataset spaziale di oltre tremila contee, ma la tua analisi richiede una mappa pulita dei cinquanta stati. Non devi interrompere il tuo lavoro e cercare un nuovo dataset online, ti serve solo un modo per dissolvere i confini interni. Risolviamo questo problema usando Spatial GroupBy, in particolare un metodo chiamato dissolve. I dati vengono spesso forniti a un livello molto granulare. Potresti avere isolati urbani quando hai bisogno di quartieri, o sezioni censuarie quando hai bisogno di interi comuni. Dissolve è lo strumento che ti permette di risalire la gerarchia geografica. Prende molte forme più piccole, le unisce in forme più grandi in base a un attributo condiviso e aggrega i dati sottostanti. Se hai familiarità con l'analisi dati standard, puoi pensare a dissolve come a un'operazione di spatial group-by. Vediamo uno scenario concreto. Hai uno spatial dataframe del Nepal suddiviso in piccoli distretti. Il tuo dataset contiene la geometria poligonale di ciascun distretto, il conteggio della popolazione e una colonna di testo che indica la zona amministrativa più ampia a cui appartiene il distretto. Vuoi una mappa che mostri solo le zone. Chiami il metodo dissolve sul tuo spatial dataframe e passi la colonna della zona come grouping target. GeoPandas esegue quindi due operazioni distinte simultaneamente. Per prima cosa, gestisce le geometrie spaziali. Raggruppa tutte le righe dei distretti in base al nome della zona, prende le loro geometrie e le unisce in un'unica feature. I confini interni dei distretti vengono cancellati, lasciandoti con un unico confine esterno continuo per la nuova zona. Come seconda cosa, deve decidere cosa fare con i dati tabellari associati a queste forme, come la tua colonna della popolazione. Ecco il punto chiave. Molti utenti eseguono il metodo dissolve, osservano la loro nuova mappa delle zone e si accorgono che i conteggi della popolazione sono drasticamente errati. Questo non è un errore di geometria. Di default, il metodo dissolve gestisce i dati tabellari prendendo semplicemente il valore dalla primissima riga che incontra in ciascun gruppo. Ignora il resto. Per aggregare correttamente le quantità numeriche, devi usare esplicitamente il parametro aggregate function. Quando chiami dissolve raggruppando per zona, passi anche il parametro aggregate function impostato su sum. Ora, mentre GeoPandas unisce fisicamente le forme dei distretti, somma anche matematicamente i numeri della popolazione dei distretti. La riga della zona risultante conterrà il totale della popolazione aggregata corretto. Questo parametro accetta anche altre funzioni statistiche standard. Se i tuoi dati granulari contenessero il reddito medio familiare, potresti passare mean invece di sum. Se contenessero misurazioni di altitudine, potresti passare max per trovare il punto più alto nella regione appena unita. Dissolve combina l'unione spaziale con l'aggregazione tabellare in un unico passaggio sincronizzato, dandoti il controllo completo sulla scala geografica dei tuoi dati. Grazie per aver ascoltato, happy coding a tutti!
10

Mappatura statica: Creare mappe coropletiche e tracciare layer

4m 10s

Trasforma i tuoi dati spaziali in visualizzazioni accattivanti. Questo episodio copre l'integrazione di GeoPandas con matplotlib, insegnandoti a creare mappe coropletiche personalizzate, sovrapporre più dataset e gestire i dati mancanti.

Download
Ciao, sono Alex di DEV STORIES DOT EU. GeoPandas, episodio 10 di 11. Non hai bisogno di esportare i tuoi dati spaziali in un pesante software GIS desktop solo per vedere che aspetto hanno. Puoi generare visualizzazioni pronte per la pubblicazione direttamente all'interno del tuo ambiente Python. La soluzione è lo Static Mapping: creare mappe coropletiche e plottare layer. Il cuore della visualizzazione in GeoPandas è il metodo plot. Ogni GeoDataFrame ce l'ha. Chiamando plot senza argomenti, disegni immediatamente la tua geometria. È facilissimo, ma dietro le quinte fa da wrapper a matplotlib. Questo significa che ottieni una mappa con una sola riga di codice, ma hai comunque a disposizione tutta la potenza di matplotlib per personalizzare colori, assi e stili. Un plot di base disegna semplicemente delle forme. Per creare una mappa coropletica, in cui le forme sono colorate in base ai valori dei dati, usi l'argomento column. Passi il nome della colonna che contiene i tuoi dati. GeoPandas mapperà i valori di quella colonna su una scala di colori. Per aiutare chi guarda a comprendere quella scala, puoi aggiungere una legenda passando legend uguale a True. Di default, plottare una colonna numerica continua crea un gradiente di colore sfumato. Spesso è meglio raggruppare i tuoi dati in bin distinti. GeoPandas si integra con una libreria chiamata mapclassify per fare questo. Aggiungendo l'argomento scheme al tuo metodo plot, puoi ordinare i tuoi dati in classi. Ad esempio, impostando scheme su quantiles dividi le tue geometrie in gruppi di uguali dimensioni in base ai loro valori, rendendo i pattern spaziali molto più facili da leggere. I dataset del mondo reale spesso hanno dei buchi. Se stai creando una mappa coropletica e ad alcune righe manca il valore del dato che stai plottando, GeoPandas le rimuoverà completamente dalla mappa. Questo lascia degli spazi vuoti fastidiosi. Per risolvere questo problema, usi l'argomento missing keywords. Passi un dizionario di opzioni di stile, come impostare il colore su grigio chiaro, in modo che quelle forme appaiano comunque sulla mappa senza confondere i dati. Ora, la seconda parte di tutto questo è l'overlay di più dataset. Le mappe più utili combinano più layer. Supponi di avere un base layer con i quartieri di una città e di voler fare l'overlay di uno scatter plot con le posizioni dei supermercati. Lo fai condividendo un oggetto axis di matplotlib. Per prima cosa, crei un axis. Poi, plotti i poligoni dei tuoi quartieri, passando quell'axis al metodo plot. Successivamente, plotti i punti dei tuoi supermercati, passando esattamente lo stesso axis. Entrambi i dataset vengono disegnati sullo stesso canvas. Per controllare quale layer sta sopra, usi l'argomento z order. Uno z order più basso va sul fondo. Quindi, dai ai tuoi quartieri uno z order pari a uno, e ai tuoi supermercati uno z order pari a due. I punti verranno renderizzati in modo pulito sopra i poligoni. Fai attenzione a questa parte. A volte vuoi che i tuoi poligoni di base siano completamente trasparenti, in modo da vedere solo i loro bordi. Se imposti l'argomento face color su None, come oggetto Python senza virgolette, matplotlib lo ignora e applica un colore di riempimento di default. Devi impostare face color sulla stringa none per renderlo trasparente. In alternativa, puoi bypassare completamente il problema chiamando la proprietà boundary sul tuo GeoDataFrame e plottando quella al suo posto. È un approccio molto più sicuro per disegnare solo i contorni. Il vero punto di forza del mapping in GeoPandas è il suo passaggio fluido da rapidi controlli dei dati a grafiche pronte per la pubblicazione. Ottieni una visualizzazione immediata con una singola chiamata di metodo, ma non perdi mai il controllo sottostante di matplotlib quando hai bisogno di sovrapporre layer per storie spaziali complesse. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
11

Esplorazione interattiva e oltre

3m 47s

Dai vita alle tue mappe. Esaminiamo il metodo `explore()` per creare mappe interattive basate sul web. Infine, concludiamo il viaggio in GeoPandas e ti prepariamo a iniziare a costruire applicazioni spaziali nel mondo reale.

Download
Ciao, sono Alex di DEV STORIES DOT EU. GeoPandas, episodio 11 di 11. Le mappe statiche sono ottime per una presentazione finale, ma quando sei nel pieno della fase di analisi, un'immagine piatta è incredibilmente limitante. Devi fare zoom su un quartiere specifico, fare pan lungo un fiume e fare hover su una forma per ispezionare i dati grezzi nascosti sotto. Esplorazione interattiva e oltre è esattamente ciò di cui parliamo in questo episodio. Negli episodi precedenti, abbiamo usato il metodo plot per disegnare immagini statiche delle nostre geometrie. GeoPandas offre anche un'alternativa chiamata explore. Quando chiami explore su un GeoDataFrame, genera una mappa web completamente interattiva direttamente nel tuo ambiente. Dietro le quinte, usa una libreria Python chiamata Folium, che a sua volta è basata sulla popolare libreria di mapping JavaScript Leaflet. Il bello del metodo explore è che la sua application programming interface imita perfettamente il metodo plot. Non devi imparare un set di argomenti completamente nuovo per passare da un'immagine statica a una mappa interattiva. Prendi il dataset dei distretti di New York. Chiami explore sul dataset e passi l'argomento column impostato su area. L'output è immediato e tangibile. Appare una mappa che mostra la città, e puoi usare il mouse per fare pan e scorrere per fare zoom su strade specifiche. Ecco il punto chiave. Quando fai hover col cursore su Brooklyn o Queens, compare automaticamente un tooltip. Questo tooltip mostra i dati tabellari sottostanti per quella specifica geometria, incluso il valore esatto di area che gli hai indicato per colorare la mappa. Ottieni contesto visivo e numeri grezzi esattamente allo stesso tempo. C'è un dettaglio tecnico che devi tenere a mente. Devi capire cosa restituisce effettivamente il metodo explore. Il metodo plot genera un file immagine leggero. Il metodo explore restituisce un oggetto pesante, pieno di HTML e JavaScript. Questo è geniale quando lavori all'interno di un Jupyter Notebook, perché il browser renderizza la mappa interattiva in modo impeccabile. Ma se il tuo obiettivo finale è generare un report PDF statico o una semplice stampa, explore è lo strumento sbagliato. Gli elementi web interattivi semplicemente non si tradurranno su carta. Usa explore per investigare i tuoi dati, e torna a plot quando devi pubblicare un documento statico. Questo ci porta alla vera potenza del framework GeoPandas. Nel corso di questa serie, abbiamo visto come agisce da collante coesivo per l'ecosistema spaziale di Python. Prende pandas e gli dà consapevolezza spaziale. Delega la matematica geometrica pesante a Shapely. Si affida a Pyogrio per leggere e scrivere file ad alta velocità. Infine, si aggancia alle librerie di visualizzazione per darti un feedback istantaneo. Puoi caricare un dataset enorme, filtrarlo, calcolare distanze, eseguire spatial join, e mappare i risultati su un canvas interattivo, tutto in poche righe di Python. La documentazione ufficiale di GeoPandas è eccellente, e leggere le loro guide getting started è il modo migliore per consolidare ciò che hai imparato. Apri un notebook, carica dei dati che ti interessano e inizia a sperimentare. Se hai un'idea per un argomento che dovremmo trattare, fai un salto su devstories.eu e faccelo sapere. Il vero vantaggio di questo framework è che elimina la complessità della matematica spaziale, permettendoti di trattare la geografia non come un ostacolo, ma solo come un altro tipo di dato da filtrare, fare join e analizzare. Questo è tutto per questo episodio. Grazie per aver ascoltato, e continua a sviluppare!