Înapoi la catalog
Season 40 11 Episoade 43 min 2026

GeoPandas

v1.1 — Ediția 2026. Un curs audio despre GeoPandas 1.1, puternica bibliotecă Python pentru date geospațiale. Învață cum să gestionezi operațiuni geometrice, să manipulezi date spațiale, să lucrezi cu proiecții și să generezi hărți.

Analiză geospațială Știința datelor
GeoPandas
Se redă acum
Click play to start
0:00
0:00
1
Fă cunoștință cu GeoPandas: Coloana activă de geometrie
O introducere în structurile de date de bază ale GeoPandas: GeoSeries și GeoDataFrame. Învață cum GeoPandas extinde familiara bibliotecă pandas pentru a gestiona obiecte geospațiale și înțelege conceptul critic de coloană activă de geometrie.
3m 56s
2
Citire și scriere: I/O rapid cu Pyogrio
O analiză detaliată a încărcării și salvării datelor spațiale. Descoperă cum GeoPandas folosește motorul Pyogrio și Apache Arrow pentru a accelera drastic operațiunile I/O cu fișiere, plus cum să utilizezi filtre spațiale și de tip bounding-box în timpul încărcării.
4m 30s
3
Forma Pământului: Proiecții și CRS
Înțelege sistemele de referință de coordonate (CRS) și de ce sunt vitale pentru acuratețea spațială. Învață diferența dintre coordonatele geografice și cele proiectate, și cum să îți transformi în siguranță geometriile folosind GeoPandas.
4m 07s
4
Modelarea spațiului: Buffere, centroizi și anvelope convexe
Descoperă cum să generezi geometrii complet noi din cele existente. Acest episod acoperă metode constructive esențiale, cum ar fi calcularea centroizilor, generarea zonelor de buffer și desenarea anvelopelor convexe.
3m 37s
5
Predicate spațiale: Intersects, Within și Contains
Învață cum să pui întrebări despre relațiile dintre diferite forme. Explorăm predicatele spațiale binare — precum intersects, within și contains — pentru a testa modul în care geometriile interacționează în spațiu.
4m 03s
6
Accelerează interogările: Indexul spațial R-Tree
Descoperă motorul secret din spatele performanței GeoPandas. Acest episod dezvăluie modul în care indexul spațial STR R-tree folosește bounding boxes pentru a reduce drastic costul computațional al interogărilor spațiale.
4m 20s
7
Îmbinarea lumilor: Join-uri spațiale și de proximitate
Treci la nivelul următor cu integrarea datelor. Învață cum să îmbini două GeoDataFrame-uri separate bazându-te exclusiv pe relațiile lor spațiale, folosind join-uri spațiale (`sjoin`) și join-uri de proximitate (`sjoin_nearest`).
4m 10s
8
Operațiuni pe mulțimi: Crearea geometriilor cu Overlays
Descoperă cum să tai, să îmbini și să împarți forme care se suprapun. Acest episod acoperă metoda puternică `overlay`, explicând cum să calculezi intersecții, reuniuni și diferențe pentru a crea geometrii complet noi.
3m 45s
9
GroupBy spațial: Agregare cu Dissolve
Învață cum să grupezi datele spațiale. Explorăm metoda `dissolve`, care acționează ca un GroupBy spațial, îmbinând geometrii mai mici în unele mai mari, în timp ce agregă perfect atributele lor tabulare.
3m 17s
10
Cartografiere statică: Construirea de hărți Choropleth și plotarea straturilor
Transformă-ți datele spațiale în elemente vizuale captivante. Acest episod acoperă integrarea GeoPandas cu Matplotlib, învățându-te cum să construiești hărți choropleth personalizate, să suprapui mai multe seturi de date și să gestionezi datele lipsă.
4m 11s
11
Explorare interactivă și mai departe
Dă viață hărților tale. Analizăm metoda `explore()` pentru crearea de hărți interactive, bazate pe web. În final, încheiem călătoria GeoPandas și te pregătim să începi construirea de aplicații spațiale din lumea reală.
3m 49s

Episoade

1

Fă cunoștință cu GeoPandas: Coloana activă de geometrie

3m 56s

O introducere în structurile de date de bază ale GeoPandas: GeoSeries și GeoDataFrame. Învață cum GeoPandas extinde familiara bibliotecă pandas pentru a gestiona obiecte geospațiale și înțelege conceptul critic de coloană activă de geometrie.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. GeoPandas, episodul 1 din 11. Sistemele geografice tradiționale te obligă de obicei să păstrezi exact o formă geometrică per fișier, ceea ce înseamnă că, dacă ai nevoie de granița unui județ și de punctul său central, trebuie să menții două fișiere separate. GeoPandas elimină această constrângere, permițându-ți să stochezi granițe, puncte centrale și zone buffer una lângă alta într-un singur tabel. Fă cunoștință cu GeoPandas: Coloana de geometrie activă. GeoPandas este o extensie a librăriei de analiză de date pandas. Preia structurile familiare DataFrame și Series și le adaugă capabilități spațiale. Sub capotă, GeoPandas acționează ca o punte între datele tabelare și geometria spațială. Gestionează structura tabelului în sine, în timp ce deleagă matematica propriu-zisă a punctelor, liniilor și poligoanelor către un motor spațial numit Shapely. Când îi ceri lui GeoPandas să calculeze o arie sau să găsească o graniță, acesta pasează formele relevante către Shapely, preia rezultatul matematic și îl aliniază direct înapoi în rândul tău de date. Cele două structuri de date de bază care fac acest lucru posibil sunt GeoSeries și GeoDataFrame. Un GeoSeries este o singură coloană în care fiecare rând conține un obiect geometry Shapely. Un GeoDataFrame este un DataFrame standard pandas care conține cel puțin o coloană GeoSeries. Deoarece un singur GeoDataFrame poate conține mai multe coloane spațiale simultan, sistemul trebuie să știe pe care să o vizeze atunci când rulezi o comandă spațială. Acest lucru este gestionat prin intermediul coloanei de geometrie activă. Iată ideea de bază. Coloana de geometrie activă este un state funcțional, nu un string de text specific. Utilizatorii confundă frecvent o coloană numită literal „geometry” cu conceptul de bază al coloanei de geometrie activă. By default, la încărcarea datelor, GeoPandas va căuta o coloană numită „geometry” și îi va atribui statusul activ. Dar coloanele tale spațiale pot fi denumite absolut oricum. Ceea ce contează este care dintre ele deține statusul activ, deoarece metodele spațiale sunt rutate specific către acea coloană activă. Ia în considerare un dataset cu județe locale. Ai o coloană numită county_borders care stochează contururile complexe de tip poligon ale fiecărei regiuni. În același tabel, ai o altă coloană numită county_centroids care stochează un singur punct în mijlocul fiecărei regiuni. Dacă coloana borders deține statusul activ, când îi ceri unui dataframe să calculeze aria, va returna suprafața totală a județului. Orice calcul de distanță pe care îl rulezi va măsura de la marginea exterioară a graniței acelui județ. Dacă vrei în schimb să măsori distanța dintre punctele centrale ale județelor, schimbi contextul spațial. Apelezi o metodă numită set_geometry și oferi numele coloanei centroids. Imediat, county_centroids devine geometria activă. Coloana borders rămâne perfect intactă, păstrând poligoanele tale, dar sistemul o tratează acum ca pe o simplă coloană de date. Dacă rulezi acum un calcul de distanță, GeoPandas vizează automat punctele centrale. Comuți instantaneu între contexte spațiale fără să faci merge la tabele sau să gestionezi dataseturi duplicate. Cea mai utilă concluzie este că un GeoDataFrame este un container spațial capabil să conțină oricâte layere de geometry ai nevoie, dar geometria activă dictează ce tool spațial este activat în prezent. Dacă îți place podcastul și vrei să susții emisiunea, poți căuta DevStoriesEU pe Patreon. Asta e tot pentru acest episod. Mulțumesc pentru audiție și continuă să construiești!
2

Citire și scriere: I/O rapid cu Pyogrio

4m 30s

O analiză detaliată a încărcării și salvării datelor spațiale. Descoperă cum GeoPandas folosește motorul Pyogrio și Apache Arrow pentru a accelera drastic operațiunile I/O cu fișiere, plus cum să utilizezi filtre spațiale și de tip bounding-box în timpul încărcării.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. GeoPandas, episodul 2 din 11. Încarci un fișier shapefile de cinci gigabytes în memorie, doar pentru a elimina imediat nouăzeci la sută din rânduri folosind filtrele standard pandas. Consumul de RAM explodează, scriptul se mișcă în reluare și pierzi timpul. Poți de fapt să dai slice acelor date spațiale înainte ca ele să părăsească hard disk-ul. Astăzi vorbim despre Citire și Scriere: I/O rapid cu Pyogrio. Funcțiile principale pe care le vei folosi pentru a importa și exporta date în și din GeoPandas sunt read file și to file. În trecut, GeoPandas folosea under the hood o librărie numită Fiona. Funcționa, dar era lentă. Versiunile moderne de GeoPandas folosesc Pyogrio by default. Pyogrio este o interfață directă, extrem de optimizată, către GDAL, care este librăria C de bază ce rulează aproape tot software-ul geospațial open-source. Pyogrio este rapid by default, dar îl poți forța să fie mult mai rapid. Când apelezi read file sau to file, poți pasa un argument numit use arrow, setat pe true. Asta îi spune lui Pyogrio să gestioneze datele folosind structuri de memorie Apache Arrow. În loc să citească fișierul și să traducă fiecare coordonată și atribut într-un obiect Python unul câte unul, integrarea Arrow procesează datele în batch-uri mari, eficiente din punct de vedere al memoriei. Asta elimină complet overhead-ul obișnuit din Python. Dacă ai de-a face cu milioane de înregistrări, activarea flag-ului Arrow transformă o operațiune de citire sau scriere care durează câteva minute într-una care durează câteva secunde. Dar cea mai eficientă optimizare este pur și simplu să citești mai puține date. O greșeală foarte comună este să citești un dataset masiv întreg într-un GeoDataFrame, și apoi să folosești indexarea standard pandas pentru a-l filtra ulterior. Asta provoacă spike-uri de memorie masive, complet inutile. GeoPandas îți permite să filtrezi datele chiar în timpul operațiunii read file, ceea ce îți menține memory footprint-ul plat. Să zicem că ai un fișier care conține amprenta fiecărei clădiri din statul New York, dar te interesează doar clădirile din jurul Coney Island. Dacă pasezi un tuple de tip bounding box argumentului b box din read file, engine-ul C din spate verifică indexul spațial al fișierului de pe disc. Ignoră complet orice clădire din afara acelui box definit. Obții un DataFrame micuț care conține doar ce ai nevoie, iar memoria RAM abia dacă simte operațiunea. Dacă un bounding box dreptunghiular simplu nu este suficient de precis pentru nevoile tale, poți folosi argumentul mask. Pasezi o geometrie specifică, cum ar fi un poligon complex care reprezintă granițele exacte ale unui cartier, direct în read file. Engine-ul evaluează această formă și va încărca doar rândurile care intersectează poligonul tău. Este puțin mai costisitor din punct de vedere computațional decât un bounding box de bază, dar este foarte precis. Filtrarea spațială acoperă geografia, dar poți filtra și atributele standard. Funcția read file acceptă un parametru where. Acesta primește o clauză SQL WHERE standard sub formă de string. Dacă vrei doar clădiri etichetate ca rezidențiale, pasezi un string care declară că acea coloană type este egală cu residential. GDAL parsează acest statement SQL și filtrează rândurile la nivel de C înainte de a pasa ceva către Python. Poți chiar să combini un bounding box și o clauză where în exact același call de read pentru a da slice simultan atât geografiei, cât și atributelor. Iată ideea cheie. Dacă îți împingi filtrele direct în operațiunea de read, greul este dus de cod C extrem de optimizat, nu de memoria Python. Cea mai rapidă metodă absolută de a procesa date spațiale este să nu încarci niciodată părțile de care nu ai nevoie. Îți mulțumesc că ai petrecut câteva minute cu mine. Până data viitoare, numai bine.
3

Forma Pământului: Proiecții și CRS

4m 07s

Înțelege sistemele de referință de coordonate (CRS) și de ce sunt vitale pentru acuratețea spațială. Învață diferența dintre coordonatele geografice și cele proiectate, și cum să îți transformi în siguranță geometriile folosind GeoPandas.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. GeoPandas, episodul 3 din 11. Calculezi distanța dintre două orașe, iar rezultatul este 2,4 în loc de 200 de mile. Codul tău a rulat perfect, dar răspunsul tău este complet inutil. Vinovatul este modul în care datele tale spațiale se mapează pe lumea fizică, ceea ce ne aduce la Forma Pământului: Proiecții și C R S. Fiecare GeoSeries și GeoDataFrame are un atribut numit punct C R S. Acesta stochează un obiect pyproj C R S. Sunt metadatele care îi spun lui GeoPandas exact ce reprezintă de fapt numerele din coloana ta geometry. Fără un sistem de referință pentru coordonate, o coordonată precum minus 73 virgulă 40 este doar un punct pe o grilă infinită, abstractă. Cu un C R S, devine o locație specifică, cunoscută pe Pământ. Există două categorii principale de sisteme de coordonate pe care trebuie să le înțelegi. Sistemele de coordonate geografice reprezintă Pământul ca un glob tridimensional. Coordonatele lor sunt unghiuri măsurate de la centrul Pământului, exprimate în grade de longitudine și latitudine. Un exemplu foarte comun este EPSG 4326, care este sistemul utilizat de GPS-ul global. Sistemele de coordonate proiectate, pe de altă parte, reprezintă Pământul aplatizat pe o suprafață bidimensională. Coordonatele lor folosesc măsurători liniare, cum ar fi metri sau US Survey feet. Iată ideea cheie. Operațiile spațiale din spatele GeoPandas presupun că datele tale există pe un plan cartezian plat. Dacă datele tale sunt într-un sistem de coordonate geografice precum EPSG 4326 și îi ceri lui GeoPandas să calculeze aria cartierelor din New York, va face calculele tratând gradele ca și cum ar fi simple pătrate pe o grilă. Vei obține un rezultat de genul 0,083. Asta înseamnă 0,083 grade pătrate, ceea ce este o metrică fără sens. Gradele își schimbă lățimea fizică în funcție de cât de departe ești de ecuator, așa că nu le poți folosi pentru a măsura distanța sau aria absolută. Pentru a face calcule din lumea reală, trebuie să îți proiectezi datele geografice într-un sistem de coordonate proiectate. Faci asta folosind o metodă numită to C R S. Dacă iei acele date din New York și pasezi EPSG 2263 în metoda to C R S, GeoPandas va transforma matematic fiecare coordonată din coloana ta geometry. EPSG 2263 este un sistem de proiecție specific New York-ului care măsoară distanțele în feet. Acum, când rulezi exact același calcul de arie, obții un rezultat în milioane de square feet, ceea ce este o măsurătoare reală, utilizabilă. Există o capcană frecventă aici. Dezvoltatorii încearcă adesea să remedieze proiecțiile lipsă folosind metoda set C R S în loc de metoda to C R S. Set C R S nu este un instrument de conversie. Este folosită doar atunci când datele tale spațiale au fost încărcate fără niciun sistem de referință pentru coordonate. Pur și simplu atribuie metadatele, spunându-i lui GeoPandas ce reprezintă deja numerele din coloana ta geometry, fără a modifica numerele în sine. Folosești to C R S atunci când datele au deja un C R S valid și vrei să convertești matematic acele coordonate într-un sistem complet nou. Dacă calculele tale de arie sau distanță par vreodată absurd de mici, aproape întotdeauna înseamnă că îi ceri lui GeoPandas să facă calcule plane pe grade sferice și trebuie să-ți proiectezi datele. Asta e tot pentru azi. Mersi că ai ascultat — du-te și construiește ceva cool.
4

Modelarea spațiului: Buffere, centroizi și anvelope convexe

3m 37s

Descoperă cum să generezi geometrii complet noi din cele existente. Acest episod acoperă metode constructive esențiale, cum ar fi calcularea centroizilor, generarea zonelor de buffer și desenarea anvelopelor convexe.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. GeoPandas, episodul 4 din 11. Uneori, forma pe care trebuie să o analizezi nu este forma care ți-a fost dată. Poate imporți o listă de locații de magazine ca puncte individuale, dar ceea ce trebuie de fapt să înțelegi este zona de livrare care le înconjoară. Acest lucru necesită modelarea matematică a punctelor și liniilor în limite dinamice folosind Shaping Space: buffers, centroids și convex hulls. Aceste manipulări geometrice constructive acționează ca plastilina pentru datele spațiale. Începi cu geometrii brute și folosești aceste metode built-in pentru a calcula forme complet noi, adaptate analizei tale. În GeoPandas, aceste metode se aplică element-wise pe întreaga GeoSeries activă. Dacă ai zece mii de forme, o singură comandă generează zece mii de forme noi. Totul se bazează pe librăria Shapely în spate pentru a face calculele geometrice. Cea mai comună manipulare este metoda buffer. Un buffer creează un poligon care reprezintă toate punctele aflate la o anumită distanță de forma ta originală. Ia un scenariu în care ai geometrii de tip punct care reprezintă cafenele. Vrei să definești o zonă de livrare de doi kilometri pentru fiecare locație. Apelezi metoda buffer pe punctele tale și îi pasezi distanța. GeoPandas desenează instantaneu un cerc în jurul fiecărui magazin, transformând dataset-ul tău de puncte într-un dataset de poligoane. Fii atent la partea asta. Efectuarea unei operațiuni de buffer necesită un Coordinate Reference System proiectat. Dacă geometriile tale sunt într-un format geografic precum latitudine și longitudine, o valoare a distanței de zece înseamnă zece grade, nu zece metri. Deoarece gradele de longitudine se micșorează în lățime fizică pe măsură ce te îndepărtezi de ecuator, aplicarea unui buffer pe date neproiectate va rezulta în ovale puternic distorsionate și alungite, în loc de cercuri uniforme. Proiectează întotdeauna datele într-un sistem metric înainte de a calcula distanțele. Uneori trebuie să restrângi o formă în loc să o extinzi. Dacă ai poligoane complexe care reprezintă cartiere și trebuie să le reduci la puncte individuale pentru calcule de distanță sau etichete pe hartă, folosești atributul centroid. Centroid calculează centrul de masă matematic pentru fiecare geometrie, returnând un punct central perfect pentru fiecare poligon sau linie din dataset-ul tău. Pentru a izola marginile unei forme, folosești atributul boundary. Dacă ai un poligon care reprezintă un județ, boundary elimină întregul interior. Returnează o geometrie de dimensiune inferioară, transformând poligonul într-un set de linii care doar conturează județul. Dacă apelezi boundary pe o linie, va returna punctele individuale de la fiecare capăt al acelei linii. Aici devine interesant. Ai și atributul convex hull. Imaginează-ți o colecție împrăștiată de puncte care reprezintă observări individuale ale unor animale într-o pădure. Dacă ai întinde un elastic complet în jurul punctelor exterioare și l-ai lăsa să se strângă, forma pe care o creează acel elastic este convex hull. Acesta returnează cel mai mic poligon convex posibil care include întreaga geometrie. Este o modalitate incredibil de rapidă de a calcula amprenta fizică generală a unui set dispersat de coordonate. Geometria constructivă înseamnă că nu ești niciodată blocat cu limitele spațiale pe care le-ai importat; poți calcula mereu zonele exacte pe care le cere de fapt analiza ta. Mulțumesc că ai petrecut câteva minute cu mine. Până data viitoare, numai bine.
5

Predicate spațiale: Intersects, Within și Contains

4m 03s

Învață cum să pui întrebări despre relațiile dintre diferite forme. Explorăm predicatele spațiale binare — precum intersects, within și contains — pentru a testa modul în care geometriile interacționează în spațiu.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. GeoPandas, episodul 5 din 11. Să te întrebi dacă o anumită coordonată GPS se află în interiorul unei granițe complexe și zimțate a unui oraș sună ca o problemă grea de matematică computațională care implică ray-casting. Dar în această librărie, totul este rezolvat cu o singură linie de logică booleană. Vorbim despre Spatial Predicates: intersects, within și contains. Dacă folosești pandas standard, ești deja obișnuit cu conditional filtering. Iei o coloană din dataframe, verifici dacă valorile ei sunt mai mari ca zece și primești înapoi un series de valori True și False. Apoi pasezi acel boolean series înapoi în parantezele dataframe-ului tău pentru a-ți filtra rândurile. Aceste spatial predicates fac exact același lucru. În loc să filtrezi după un număr, filtrezi după un adevăr spațial. Compari forme. Un spatial predicate este o metodă care testează relația topologică dintre un GeoSeries întreg și o singură geometrie de referință. Când apelezi o metodă de tip predicat pe coloana ta activă de geometrie, GeoPandas evaluează fiecare rând în raport cu acea formă de referință. Face calculele matematice de geometrie under the hood și îți dă înapoi un boolean Series standard din pandas. Cel mai comun test de relație este intersects. Când apelezi metoda intersects, aceasta returnează True dacă granița sau interiorul unei geometrii din dataset-ul tău atinge sau se suprapune în vreun fel cu geometria de referință. Dacă două poligoane împart un singur punct pe marginea lor exterioară, ele se intersectează. Dacă un segment de linie traversează un poligon, se intersectează. Este un catch-all destul de larg pentru orice spațiu fizic comun. Apoi, avem metodele contains și within. Lumea le confundă frecvent pentru că sunt operații inverse. Logica este strict direcțională. Dacă Poligonul A este granița unui oraș mare, iar Punctul B este o cafenea, orașul conține cafeneaua. Cafeneaua este în interiorul orașului. Dacă Poligonul A face contains pe Punctul B, atunci Punctul B este within Poligonul A. Folosești metoda contains atunci când GeoSeries-ul tău conține geometrii mari de delimitare și îi pasezi o formă de referință mai mică. Returnează True doar dacă forma de referință este complet inclusă în geometria de pe rândul respectiv. În schimb, apelezi metoda within atunci când GeoSeries-ul tău conține elemente mai mici, cum ar fi mii de puncte individuale de coordonate, și vrei să testezi dacă acestea pică în întregime în interiorul unui singur poligon de referință mai mare. Fii atent la partea asta. Pentru că aceste metode returnează boolean masks standard, le poți da chain direct în data pipelines-urile tale. Să zicem că ai un dataframe cu cartierele orașului. Ai aplicat un buffer pentru a le extinde granițele. Acum vrei să știi care dintre aceste cartiere extinse, cu buffer, se suprapun cu poligonul original, unbuffered, al Brooklyn-ului. Mai întâi, izolezi singurul poligon original Brooklyn pentru a acționa ca geometrie de referință. Apoi, iei dataframe-ul tău de cartiere cu buffer și apelezi metoda intersects pe coloana sa de geometrie, pasând forma Brooklyn. GeoPandas evaluează fiecare rând. Returnează True pentru cartierele cu buffer care ating poligonul Brooklyn și False pentru cele care nu o fac. Pui acel series rezultat de True și False direct în parantezele de selecție ale dataframe-ului tău. Dataframe-ul dă drop instantaneu la rândurile False. Rămâi cu un dataset filtrat geografic, obținut în întregime prin operațiuni standard de date tabelare. Tratând relațiile spațiului fizic ca simple întrebări de True sau False, reduci decalajul dintre cartografia complexă și logica de bază a unui dataframe. Asta e tot pentru acest episod. Mulțumesc că m-ai ascultat și continuă să construiești!
6

Accelerează interogările: Indexul spațial R-Tree

4m 20s

Descoperă motorul secret din spatele performanței GeoPandas. Acest episod dezvăluie modul în care indexul spațial STR R-tree folosește bounding boxes pentru a reduce drastic costul computațional al interogărilor spațiale.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. GeoPandas, episodul 6 din 11. Query-urile tale geospațiale durează ore întregi să ruleze, blocându-ți calculatorul și epuizându-ți răbdarea. Probabil că îți pui procesorul să verifice fiecare punct cu fiecare boundary, ceea ce scalează îngrozitor. Soluția la acest bottleneck este Turbocharge Queries: The R-Tree Spatial Index. Ai un milion de puncte GPS și cincizeci de poligoane pentru cartiere. Dacă testezi fiecare punct cu fiecare poligon pentru a vedea cărui cartier îi aparține, execuți cincizeci de milioane de calcule geometrice complexe. Să afli dacă o coordonată se află în interiorul unui poligon neregulat este o operație matematică grea. Să faci asta ca un full scan creează o problemă de scalare exponențială care distruge performanța. Un spatial index rezolvă asta acționând ca un cuprins pentru harta ta. GeoPandas folosește o structură specifică numită R-tree, construită folosind algoritmul Sort-Tile-Recursive. R vine de la rectangle. Tree-ul grupează obiectele logic pe baza locației lor. Ideea cheie aici este pre-filter-ul. În loc să verifice marginile exacte și zimțate ale unui poligon de cartier, indexul desenează un simplu box dreptunghiular în jurul lui. Asta se numește envelope sau bounding box. Să verifici dacă o coordonată cade în interiorul unui dreptunghi de bază necesită aproape zero efort de calcul. Indexul elimină imediat orice punct care nici măcar nu se află în interiorul unui bounding box dreptunghiular al cartierului. Restrângi instantaneu candidații de la un milion la poate câteva mii. Asta aduce în discuție o realitate critică în doi pași a spatial querying-ului. Un hit pe spatial index înseamnă doar că bounding box-urile se intersectează. Un punct s-ar putea afla în interiorul dreptunghiului, dar chiar în afara boundary-ului curbat real al cartierului. Hit-ul pe bounding box este doar primul pas. Pasul doi este geometry check-ul exact pe acel subset mai mic de candidați. Accesezi acest engine prin metoda sindex dot query. Dacă pasezi o singură geometrie, returnează un array de indecși integer corespunzători geometriilor din GeoSeries-ul tău ale căror bounding box-uri intersectează input-ul tău. Pentru a forța indexul să gestioneze acel al doilea pas crucial, pasează argumentul predicate egal cu intersects. GeoPandas va folosi apoi check-ul ieftin de bounding box pentru a găsi candidați și va rula automat geometry check-ul exact și costisitor doar pe supraviețuitori. De asemenea, poți pasa simultan un întreg array de geometrii în query. Acest array query returnează un array bidimensional de indecși, asociind match-urile dintre array-ul tău de input și GeoSeries-ul indexat. Primul rând îți dă indexul geometriei tale de input, iar al doilea rând îți dă indexul geometriei de match din tree. Uneori nu ai nevoie de o intersecție, ai nevoie doar de proximitate. Metoda sindex dot nearest ia o geometrie de input și returnează indexul celei mai apropiate geometrii din tree. Asta este foarte eficient pentru a face snap la o coordonată rătăcită pe o rețea rutieră sau pentru a găsi cea mai apropiată stație meteo fără să calculezi distanța până la fiecare stație de pe continent. Operațiile spațiale complexe sunt costisitoare din punct de vedere matematic. Nu-ți forța niciodată procesorul să calculeze intersecții geometrice exacte atunci când un simplu rectangle check poate elimina nouăzeci și nouă la sută dintre candidați din start. Dacă găsești aceste episoade utile și vrei să susții emisiunea, poți căuta DevStoriesEU pe Patreon. Asta e tot pentru acest episod. Mulțumesc că ai ascultat și continuă să construiești!
7

Îmbinarea lumilor: Join-uri spațiale și de proximitate

4m 10s

Treci la nivelul următor cu integrarea datelor. Învață cum să îmbini două GeoDataFrame-uri separate bazându-te exclusiv pe relațiile lor spațiale, folosind join-uri spațiale (`sjoin`) și join-uri de proximitate (`sjoin_nearest`).

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. GeoPandas, episodul 7 din 11. Cum îmbini o listă de restaurante cu o listă de sectoare de recensământ atunci când nu au nicio coloană ID comună? Lași coordonatele locațiilor să facă potrivirea. Astăzi vorbim despre Îmbinarea Lumilor: Spatial și Nearest Joins. Un spatial join este echivalentul geografic al unui SQL join. În loc să legi tabelele pe un string comun sau un ID de tip integer, le dai join pe baza relației lor fizice în spațiu. Folosești funcția sjoin pentru asta. Imaginează-ți un scenariu în care ai un GeoDataFrame cu puncte pentru magazine alimentare și un GeoDataFrame separat cu poligoanele comunităților din Chicago. Vrei să atașezi numele comunității la fiecare rând cu magazine alimentare. Pentru a face asta, apelezi sjoin pe dataframe-ul magazinelor și pasezi dataframe-ul comunităților ca argument în dreapta. Funcția se bazează pe două argumente principale. Primul este how. Acesta funcționează exact ca join-urile standard din bazele de date. Un inner join păstrează doar magazinele care se află în interiorul unei comunități. Un left join păstrează toate magazinele alimentare, adăugând valori null dacă un magazin se află în afara limitelor comunității. Un right join păstrează toate comunitățile, duplicându-le dacă conțin mai multe magazine și păstrându-le cu date goale despre magazine dacă nu au niciunul. Al doilea argument este predicate. Acesta definește condiția spațială care trebuie îndeplinită pentru un match. Valoarea default este intersects, ceea ce înseamnă că geometriile se ating sau se suprapun în vreun fel. De asemenea, poți utiliza within, asigurându-te că un punct se află strict în interiorul unui poligon, sau contains, dacă verifici dacă un poligon înconjoară complet un punct. Iată ideea cheie. Atunci când faci un spatial join, combini două tabele cu coloane de geometrie, dar GeoDataFrame-ul rezultat poate avea o singură geometrie activă. Implicit, sjoin păstrează geometria dataframe-ului din stânga și elimină geometria dataframe-ului din dreapta, păstrând în același timp toate coloanele sale standard de atribute. Dacă dai join la punctele magazinelor alimentare din stânga cu poligoanele comunităților din dreapta, output-ul tău va fi un tabel de puncte care include acum numele comunităților. Dacă ai nevoie ca tabelul rezultat să conțină formele poligoanelor, trebuie să inversezi ordinea de join. Faci comunitățile tabelul din stânga și magazinele tabelul din dreapta. Uneori, dataset-urile tale nu se suprapun deloc. Dacă vrei să găsești cea mai apropiată stație de metrou pentru fiecare magazin alimentar, intersecțiile nu te vor ajuta. Pentru asta, folosești funcția sjoin nearest. Aceasta funcționează similar cu un spatial join standard, dar face match la geometrii pe baza proximității, nu a intersecției. Poți pasa un argument distance column ca string către sjoin nearest. Asta îi spune funcției să adauge o nouă coloană la rezultate, care conține distanța exactă calculată dintre elementele care au făcut match. De asemenea, poți furniza un prag max distance. Asta restricționează join-ul, astfel încât să facă match numai dacă cel mai apropiat vecin se află într-o rază specificată, împiedicându-te să legi un magazin de o stație din cealaltă parte a orașului pur și simplu pentru că se întâmplă să fie cea mai apropiată disponibilă. Sub capotă, ambele funcții se bazează în mare măsură pe un spatial index. Nu calculează distanța sau intersecția dintre fiecare punct și fiecare poligon, ceea ce ar necesita cantități enorme de timp. Ele folosesc indexul pentru a evalua mai întâi bounding boxes, eliminând rapid geometriile care nu sunt deloc apropiate una de cealaltă înainte de a efectua calculele matematice complexe. Tratarea locației fizice drept foreign key-ul tău suprem îți permite să conectezi dataset-uri care altfel nu au absolut nimic în comun. Asta e tot pentru acest episod. Mulțumesc că m-ai ascultat și continuă să construiești!
8

Operațiuni pe mulțimi: Crearea geometriilor cu Overlays

3m 45s

Descoperă cum să tai, să îmbini și să împarți forme care se suprapun. Acest episod acoperă metoda puternică `overlay`, explicând cum să calculezi intersecții, reuniuni și diferențe pentru a crea geometrii complet noi.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. GeoPandas, episodul 8 din 11. Un spatial join îți spune dacă o zonă inundabilă atinge o proprietate. Dar lasă limita proprietății complet intactă în dataset-ul tău. Dacă ai nevoie de un poligon complet nou care să arate exact ce parte a proprietății este sub apă, un join nu este de ajuns. Ai nevoie de Set Operations, mai exact crearea de geometrii cu overlays. E destul de comun să confunzi spatial joins, folosind metoda sjoin, cu overlays. Iată care e diferența. Un spatial join testează o relație, adăugând atribute de la un layer la altul, păstrând în același timp geometria originală exact la fel. Un overlay feliază fizic geometriile. Gândește-te la asta ca la o formă de tăiat biscuiți. Ai două foi de aluat întins care se suprapun, reprezentând două GeoDataFrame-uri diferite. Un overlay apasă prin ambele layere, tăindu-le unul în funcție de celălalt. Rezultatul este un set complet nou de piese de puzzle. Oriunde s-au suprapus aceste două layere, noua piesă moștenește atributele de date ale ambelor layere originale. Faci asta folosind metoda overlay pe un GeoDataFrame, pasând un al doilea GeoDataFrame și specificând tipul operației prin parametrul how. Există cinci tipuri logice pe care le poți pasa parametrului how. Primul este intersection. Acesta returnează doar zonele geografice exacte în care se suprapun cele două layere. Orice parte a geometriilor care nu se suprapune este eliminată. Al doilea este union. Un union returnează totul. Îmbină ambele layere într-un singur GeoDataFrame, dar feliază geometriile oriunde se intersectează. Obții bucăți care reprezintă doar layer unu, bucăți care reprezintă doar layer doi și bucăți care reprezintă suprapunerea. Al treilea este symmetric difference. Acesta este exact opusul unui intersection. Returnează zonele care aparțin de layer unu sau layer doi, dar decupează și elimină specific zonele în care acestea se suprapun. Al patrulea este difference. Acesta păstrează geometriile primului tău layer, dar scade zonele acoperite de al doilea layer. E ca și cum ai mușca din prima formă folosind a doua geometrie pe post de dinți. Al cincilea este identity. Acesta este foarte specific. Păstrează limitele exterioare ale primului tău layer complet intacte, dar împarte interiorul oriunde al doilea layer îl intersectează. Feliile suprapuse primesc atributele celui de-al doilea layer, în timp ce restul primului layer rămâne așa cum era. Ca să vezi de ce contează asta, ia exemplul unui urbanist care evaluează accesul la magazinele alimentare. Are un layer cu limitele cartierelor și un layer cu punctele magazinelor alimentare. Mai întâi, aplică un buffer punctelor magazinelor pentru a crea poligoane de un kilometru. Dacă ar rula un spatial join standard între cartiere și buffere, ar marca pur și simplu care cartiere conțin un buffer. Dar apelând metoda overlay cu parametrul how setat pe intersection, taie fizic formele cartierelor folosind formele buffer-elor. Output-ul este un nou GeoDataFrame care conține doar amprenta exactă a terenului aflat la un kilometru de un magazin, decupată perfect la limitele cartierelor. Iată ideea cheie. Overlay-urile calculează noi noduri de intersecție pentru fiecare graniță care se intersectează, ceea ce le face costisitoare din punct de vedere computațional. Nu folosi un overlay doar pentru a verifica atributele care se suprapun, folosește-l doar atunci când ai cu adevărat nevoie să generezi limite geometrice complet noi din coliziunea a două layere. Asta e tot pentru acest episod. Îți mulțumesc că ai ascultat și spor la construit!
9

GroupBy spațial: Agregare cu Dissolve

3m 17s

Învață cum să grupezi datele spațiale. Explorăm metoda `dissolve`, care acționează ca un GroupBy spațial, îmbinând geometrii mai mici în unele mai mari, în timp ce agregă perfect atributele lor tabulare.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. GeoPandas, episodul 9 din 11. Ai un dataset spațial cu peste trei mii de județe, dar analiza ta necesită o hartă curată a celor cincizeci de state. Nu trebuie să îți întrerupi munca și să cauți un nou dataset online, ai nevoie doar de o modalitate de a elimina granițele interne. Rezolvăm acest lucru folosind Spatial GroupBy, mai exact o metodă numită Dissolve. Datele sunt adesea livrate la un nivel foarte granular. Poate ai cvartale când ai nevoie de cartiere, sau zone de recensământ când ai nevoie de municipalități întregi. Dissolve este tool-ul tău pentru a urca în ierarhia geografică. Preia mai multe forme mici, le combină în unele mai mari pe baza unui atribut comun și le agregă datele asociate. Dacă ești familiarizat cu analiza standard de date, te poți gândi la dissolve ca la o operațiune de spatial group-by. Să ne uităm la un scenariu concret. Ai un dataframe spațial al Nepalului, împărțit în districte minuscule. Dataset-ul tău conține geometria de tip polygon pentru fiecare district, numărul populației și o coloană de text care indică zona administrativă mai mare căreia îi aparține districtul. Vrei o hartă care să arate doar zonele. Apelezi metoda dissolve pe dataframe-ul tău spațial și pasezi coloana zonei ca target de grupare. GeoPandas efectuează apoi două operațiuni distincte simultan. În primul rând, gestionează geometriile spațiale. Grupează toate rândurile districtelor după numele zonei lor, le ia geometriile și le unește într-un singur feature. Granițele interne ale districtelor sunt șterse, lăsându-te cu o singură graniță exterioară continuă pentru noua zonă. În al doilea rând, trebuie să decidă ce să facă cu datele tabelare atașate acelor forme, cum ar fi coloana ta de populație. Iată ideea cheie. Mulți utilizatori rulează metoda dissolve, se uită la noua hartă a zonei și își dau seama că valorile populației sunt drastic de greșite. Aceasta nu este o eroare de geometrie. By default, metoda dissolve gestionează datele tabelare luând pur și simplu valoarea din primul rând pe care îl întâlnește în fiecare grup. Ignoră restul. Pentru a agrega corect cantitățile numerice, trebuie să folosești explicit parametrul aggregate function. Când apelezi dissolve cu grupare după zonă, pasezi și parametrul aggregate function setat pe sum. Acum, pe măsură ce GeoPandas îmbină fizic formele districtelor, adună și matematic numerele populației districtelor. Rândul rezultat pentru zonă va conține populația totală agregată corectă. Acest parametru acceptă și alte funcții statistice standard. Dacă datele tale granulare ar conține venitul mediu pe gospodărie, ai putea pasa mean în loc de sum. Dacă ar conține măsurători de altitudine, ai putea pasa max pentru a găsi cel mai înalt punct din regiunea nou îmbinată. Dissolve combină unificarea spațială cu agregarea tabelară într-un singur pas sincronizat, oferindu-ți control complet asupra scării geografice a datelor tale. Mulțumesc pentru audiție, spor la codat tuturor!
10

Cartografiere statică: Construirea de hărți Choropleth și plotarea straturilor

4m 11s

Transformă-ți datele spațiale în elemente vizuale captivante. Acest episod acoperă integrarea GeoPandas cu Matplotlib, învățându-te cum să construiești hărți choropleth personalizate, să suprapui mai multe seturi de date și să gestionezi datele lipsă.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. GeoPandas, episodul 10 din 11. Nu trebuie să îți exporți datele spațiale într-un software GIS greoi de desktop doar ca să vezi cum arată. Poți genera vizualizări gata de publicare direct în mediul tău Python. Soluția este Static Mapping: Building Choropleths and Plotting Layers. Baza vizualizării în GeoPandas este metoda plot. Orice GeoDataFrame o are. Apelarea metodei plot fără argumente îți desenează imediat geometria. Este super simplu, dar în spate, face wrap la matplotlib. Asta înseamnă că obții o hartă dintr-o singură linie de cod, dar ai în continuare la dispoziție toată puterea matplotlib pentru a ajusta culorile, axele și stilurile. Un plot de bază desenează doar forme. Pentru a face o hartă choropleth — unde formele sunt colorate pe baza valorilor din date — folosești argumentul column. Îi dai numele coloanei care conține datele tale. GeoPandas va mapa valorile din acea coloană pe o scară de culori. Pentru a ajuta privitorii să înțeleagă acea scară, poți adăuga o legendă pasând legend egal cu True. Implicit, plotarea unei coloane numerice continue creează un gradient fin de culoare. De multe ori, e mai bine să îți grupezi datele în bin-uri distincte. GeoPandas se integrează cu o librărie numită mapclassify pentru a face asta. Adăugând argumentul scheme la metoda plot, îți poți sorta datele în clase. De exemplu, setând scheme pe quantiles îți împarte geometriile în grupuri de dimensiuni egale pe baza valorilor lor, făcând pattern-urile spațiale mult mai ușor de citit. Dataset-urile din lumea reală au adesea goluri. Dacă construiești o hartă choropleth și din anumite rânduri lipsește valoarea pe care o plotezi, GeoPandas le va scoate complet de pe hartă. Asta lasă niște spații goale ciudate. Ca să repari asta, folosești argumentul missing keywords. Îi pasezi un dicționar de opțiuni de styling, cum ar fi setarea culorii pe gri deschis, astfel încât acele forme să apară în continuare pe hartă fără să creeze confuzie în date. Acum, a doua parte a discuției este suprapunerea mai multor dataset-uri. Majoritatea hărților utile combină mai multe layere. Să presupunem că ai un base layer cu cartierele orașului și vrei să suprapui un scatter plot cu locațiile magazinelor alimentare. Faci asta share-uind un obiect axis din matplotlib. Mai întâi, creezi un axis. Apoi, plotezi poligoanele cartierelor, pasând acel axis în metoda plot. După aceea, plotezi punctele magazinelor alimentare, pasând exact același axis. Ambele dataset-uri sunt desenate pe același canvas. Pentru a controla care layer stă deasupra, folosești argumentul z order. Un z order mai mic este plasat dedesubt. Așa că, le dai cartierelor un z order de unu, iar magazinelor alimentare un z order de doi. Punctele se vor randa curat peste poligoane. Fii atent la partea asta. Uneori vrei ca poligoanele de bază să fie complet transparente, ca să le vezi doar marginile. Dacă setezi argumentul face color pe None, ca obiect Python fără ghilimele, matplotlib îl ignoră și aplică o culoare de fill default. Trebuie să setezi face color pe string-ul none pentru a-l face transparent. Alternativ, poți ocoli complet asta apelând proprietatea boundary pe GeoDataFrame-ul tău și plotând-o pe aceea în schimb. Este o abordare mult mai sigură pentru a desena doar contururile. Adevărata putere a mapării în GeoPandas este tranziția fluidă de la verificări rapide de date la grafice gata de publicare. Obții o vizualizare imediată cu un singur apel de metodă, dar nu pierzi niciodată controlul de bază din matplotlib atunci când ai nevoie să suprapui povești spațiale complexe. Asta e tot pentru acest episod. Îți mulțumesc pentru audiție și continuă să construiești!
11

Explorare interactivă și mai departe

3m 49s

Dă viață hărților tale. Analizăm metoda `explore()` pentru crearea de hărți interactive, bazate pe web. În final, încheiem călătoria GeoPandas și te pregătim să începi construirea de aplicații spațiale din lumea reală.

Descarcă
Salut, sunt Alex de la DEV STORIES DOT EU. GeoPandas, episodul 11 din 11. Hărțile statice sunt excelente pentru o prezentare finală, dar când ești în plină fază de analiză, o imagine plată este incredibil de limitativă. Trebuie să dai zoom pe un anumit cartier, să dai pan peste un râu și să dai hover pe un shape pentru a inspecta datele brute ascunse dedesubt. Explorarea interactivă și nu numai, este exact ce acoperim în acest episod. În episoadele anterioare, am folosit metoda plot pentru a desena imagini statice ale geometriilor noastre. GeoPandas oferă și o alternativă numită explore. Când apelezi explore pe un GeoDataFrame, acesta generează o hartă web complet interactivă chiar în mediul tău. În spate, folosește o librărie Python numită Folium, care la rândul ei este construită pe populara librărie de mapping JavaScript, Leaflet. Frumusețea metodei explore constă în faptul că API-ul său imită perfect metoda plot. Nu trebuie să înveți un set complet nou de argumente pentru a trece de la o imagine statică la o hartă interactivă. Ia în considerare dataset-ul cartierelor din New York. Apelezi explore pe dataset și pasezi argumentul column setat pe area. Output-ul este imediat și tactil. Apare o hartă care îți arată orașul, și poți folosi mouse-ul ca să dai pan și să dai scroll pentru a da zoom pe anumite străzi. Aici e partea interesantă. Când dai hover cu cursorul peste Brooklyn sau Queens, apare automat un tooltip. Acest tooltip afișează datele tabelare din spate pentru acea geometrie specifică, inclusiv valoarea exactă a suprafeței după care i-ai spus să coloreze harta. Obții context vizual și numere brute exact în același timp. Există un detaliu tehnic pe care trebuie să îl ai în vedere. Trebuie să înțelegi ce returnează de fapt metoda explore. Metoda plot generează un fișier imagine lightweight. Metoda explore returnează un obiect masiv, plin de HTML și JavaScript. Acest lucru este excelent atunci când lucrezi într-un Jupyter Notebook, deoarece browserul randează harta interactivă impecabil. Dar dacă obiectivul tău final este să generezi un raport PDF static sau un simplu document printat, explore este tool-ul greșit. Elementele web interactive pur și simplu nu se vor traduce pe hârtie. Folosește explore pentru a-ți investiga datele și revino la plot atunci când trebuie să publici un document static. Asta ne aduce la adevărata putere a framework-ului GeoPandas. De-a lungul acestei serii, am văzut cum acționează ca un liant coerent pentru ecosistemul spațial Python. Preia pandas și îi conferă conștientizare spațială. Deleagă matematica geometrică complexă către Shapely. Se bazează pe Pyogrio pentru a citi și scrie fișiere la viteze mari. În cele din urmă, se conectează la librării de vizualizare pentru a-ți oferi feedback instantaneu. Poți încărca un dataset masiv, îl poți filtra, poți calcula distanțe, poți efectua spatial joins și poți mapa rezultatele pe un canvas interactiv, totul în doar câteva linii de Python. Documentația oficială GeoPandas este excelentă, iar citirea ghidurilor lor de getting started este cea mai bună modalitate de a consolida ceea ce ai învățat. Deschide un notebook, încarcă niște date care te interesează și începe să experimentezi. Dacă ai o idee pentru un subiect pe care ar trebui să-l abordăm, intră pe devstories.eu și spune-ne. Adevăratul avantaj al acestui framework este că elimină complexitatea matematicii spațiale, permițându-ți să tratezi geografia nu ca pe un obstacol, ci doar ca pe un alt data type de filtrat, de dat join și de analizat. Asta e tot pentru acest episod. Mulțumesc că ne-ai ascultat și continuă să construiești!