Wróć do katalogu
Season 40 11 Odcinki 43 min 2026

GeoPandas

Wersja 1.1 — Edycja 2026. Kurs audio omawiający GeoPandas 1.1, potężną bibliotekę Python do danych przestrzennych. Dowiedz się, jak obsługiwać operacje geometryczne, manipulować danymi przestrzennymi, pracować z odwzorowaniami i generować mapy.

Analiza geoprzestrzenna Nauka o danych
GeoPandas
Teraz odtwarzane
Click play to start
0:00
0:00
1
Poznaj GeoPandas: Aktywna kolumna geometrii
Wprowadzenie do podstawowych struktur danych w GeoPandas: GeoSeries i GeoDataFrame. Dowiedz się, jak GeoPandas rozszerza dobrze znaną bibliotekę pandas o obsługę obiektów przestrzennych i zrozum kluczową koncepcję aktywnej kolumny geometrii.
3m 58s
2
Odczyt i zapis: Szybkie operacje I/O z Pyogrio
Szczegółowe omówienie ładowania i zapisywania danych przestrzennych. Odkryj, jak GeoPandas wykorzystuje silnik Pyogrio i Apache Arrow do drastycznego przyspieszenia operacji wejścia/wyjścia na plikach, a także jak używać filtrów przestrzennych i ramek ograniczających (bounding-box) podczas ładowania.
4m 18s
3
Kształt Ziemi: Odwzorowania i CRS
Zrozum układy współrzędnych (CRS) i dlaczego są one kluczowe dla dokładności przestrzennej. Poznaj różnicę między współrzędnymi geograficznymi a odwzorowanymi (projected) oraz dowiedz się, jak bezpiecznie przekształcać swoje geometrie za pomocą GeoPandas.
4m 27s
4
Kształtowanie przestrzeni: Bufory, centroidy i powłoki wypukłe
Odkryj, jak generować zupełnie nowe geometrie na podstawie już istniejących. Ten odcinek omawia podstawowe metody konstrukcyjne, takie jak obliczanie centroidów, generowanie stref buforowych i rysowanie powłok wypukłych (convex hulls).
3m 43s
5
Predykaty przestrzenne: Intersects, Within i Contains
Dowiedz się, jak zadawać pytania o relacje między różnymi kształtami. Badamy binarne predykaty przestrzenne – takie jak intersects, within i contains – aby sprawdzić, jak geometrie oddziałują na siebie w przestrzeni.
4m 00s
6
Turbodoładowanie zapytań: Indeks przestrzenny R-Tree
Odkryj tajny silnik stojący za wydajnością GeoPandas. Ten odcinek ujawnia, jak indeks przestrzenny STR R-tree wykorzystuje ramki ograniczające (bounding boxes) do drastycznego zmniejszenia kosztów obliczeniowych zapytań przestrzennych.
3m 48s
7
Łączenie światów: Złączenia przestrzenne i najbliższego sąsiedztwa
Przenieś integrację danych na wyższy poziom. Dowiedz się, jak połączyć dwa oddzielne obiekty GeoDataFrame wyłącznie na podstawie ich relacji przestrzennych, używając złączeń przestrzennych (`sjoin`) i złączeń bliskości (`sjoin_nearest`).
4m 18s
8
Operacje na zbiorach: Tworzenie geometrii za pomocą Overlays
Odkryj, jak wycinać, łączyć i dzielić nakładające się kształty. Ten odcinek omawia potężną metodę `overlay`, wyjaśniając, jak obliczać przecięcia (intersections), sumy (unions) i różnice (differences), aby tworzyć zupełnie nowe geometrie.
3m 57s
9
Przestrzenne GroupBy: Agregacja za pomocą Dissolve
Dowiedz się, jak grupować dane przestrzenne. Badamy metodę `dissolve`, która działa jak przestrzenne GroupBy, łącząc mniejsze geometrie w większe, jednocześnie płynnie agregując ich atrybuty tabelaryczne.
3m 16s
10
Mapowanie statyczne: Tworzenie kartogramów i rysowanie warstw
Zamień swoje dane przestrzenne w przekonujące wizualizacje. Ten odcinek omawia integrację GeoPandas z Matplotlib, ucząc, jak tworzyć spersonalizowane kartogramy, nakładać na siebie wiele zbiorów danych i radzić sobie z brakującymi danymi.
3m 52s
11
Interaktywna eksploracja i nie tylko
Ożyw swoje mapy. Przyjrzymy się metodzie `explore()` do tworzenia interaktywnych map internetowych. Na koniec podsumowujemy podróż z GeoPandas i przygotowujemy Cię do rozpoczęcia budowy rzeczywistych aplikacji przestrzennych.
4m 03s

Odcinki

1

Poznaj GeoPandas: Aktywna kolumna geometrii

3m 58s

Wprowadzenie do podstawowych struktur danych w GeoPandas: GeoSeries i GeoDataFrame. Dowiedz się, jak GeoPandas rozszerza dobrze znaną bibliotekę pandas o obsługę obiektów przestrzennych i zrozum kluczową koncepcję aktywnej kolumny geometrii.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. GeoPandas, odcinek 1 z 11. Tradycyjne systemy geograficzne zazwyczaj zmuszają cię do trzymania dokładnie jednego kształtu geometrycznego w pliku. Oznacza to, że jeśli potrzebujesz granicy powiatu i jego punktu środkowego, musisz utrzymywać dwa oddzielne pliki. GeoPandas przełamuje to ograniczenie, pozwalając ci przechowywać granice, punkty środkowe i strefy buforowe obok siebie w jednej tabeli. Poznaj GeoPandas: Aktywna kolumna geometrii. GeoPandas to rozszerzenie biblioteki do analizy danych pandas. Bierze dobrze znane struktury DataFrame i Series i dodaje do nich możliwości przestrzenne. Pod spodem GeoPandas działa jako pomost między danymi tabelarycznymi a geometrią przestrzenną. Zarządza samą strukturą tabeli, podczas gdy właściwą matematykę punktów, linii i poligonów deleguje do silnika przestrzennego o nazwie Shapely. Kiedy prosisz GeoPandas o obliczenie powierzchni albo znalezienie granicy, przekazuje on odpowiednie kształty do Shapely, pobiera wynik matematyczny i dopasowuje go z powrotem do twojego wiersza danych. Dwie podstawowe struktury danych, które to umożliwiają, to GeoSeries i GeoDataFrame. GeoSeries to pojedyncza kolumna, w której każdy wiersz przechowuje obiekt geometryczny Shapely. GeoDataFrame to standardowy DataFrame z pandas, który zawiera co najmniej jedną kolumnę GeoSeries. Ponieważ pojedynczy GeoDataFrame może przechowywać wiele kolumn przestrzennych naraz, system musi wiedzieć, w którą z nich celować, kiedy uruchamiasz polecenie przestrzenne. Zarządza się tym poprzez aktywną kolumnę geometrii. Oto kluczowa kwestia. Aktywna kolumna geometrii to stan funkcjonalny, a nie konkretny string. Użytkownicy często mylą kolumnę dosłownie nazwaną 'geometry' z samą koncepcją aktywnej kolumny geometrii. Domyślnie, podczas ładowania danych, GeoPandas szuka kolumny o nazwie 'geometry' i przypisuje jej aktywny status. Ale twoje kolumny przestrzenne mogą nazywać się absolutnie jakkolwiek. Liczy się to, która z nich ma aktywny status, ponieważ metody przestrzenne są kierowane konkretnie do tej aktywnej kolumny. Wyobraź sobie dataset lokalnych powiatów. Masz kolumnę o nazwie county_borders, przechowującą złożone zarysy poligonów każdego regionu. W tej samej tabeli masz inną kolumnę o nazwie county_centroids, przechowującą pojedynczą kropkę na środku każdego regionu. Jeśli kolumna borders ma aktywny status, poproszenie DataFrame'a o obliczenie obszaru zwróci pełną powierzchnię powiatu w milach kwadratowych. Każde obliczenie odległości, jakie uruchomisz, będzie mierzone od zewnętrznej krawędzi granicy tego powiatu. Jeśli zamiast tego chcesz zmierzyć odległość między punktami środkowymi powiatów, zmieniasz kontekst przestrzenny. Wywołujesz metodę o nazwie set_geometry i podajesz nazwę kolumny centroids. Natychmiast county_centroids staje się aktywną geometrią. Kolumna borders pozostaje całkowicie nienaruszona, przechowując twoje poligony, ale system traktuje ją teraz po prostu jako kolejną kolumnę z danymi. Jeśli teraz uruchomisz obliczanie odległości, GeoPandas automatycznie weźmie na cel punkty środkowe. Przełączasz się między kontekstami przestrzennymi błyskawicznie, bez scalania tabel czy zarządzania zduplikowanymi datasetami. Najbardziej przydatny wniosek jest taki, że GeoDataFrame to przestrzenny kontener, który może pomieścić tyle warstw geometrii, ile tylko potrzebujesz, ale to aktywna geometria dyktuje, które narzędzie przestrzenne jest w danej chwili zaangażowane. Jeśli podoba ci się podcast i chcesz wesprzeć program, możesz wyszukać DevStoriesEU na Patreonie. To wszystko w tym odcinku. Dzięki za słuchanie i buduj dalej!
2

Odczyt i zapis: Szybkie operacje I/O z Pyogrio

4m 18s

Szczegółowe omówienie ładowania i zapisywania danych przestrzennych. Odkryj, jak GeoPandas wykorzystuje silnik Pyogrio i Apache Arrow do drastycznego przyspieszenia operacji wejścia/wyjścia na plikach, a także jak używać filtrów przestrzennych i ramek ograniczających (bounding-box) podczas ładowania.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. GeoPandas, odcinek 2 z 11. Ładujesz pięciogigabajtowy shapefile do pamięci tylko po to, by natychmiast odrzucić dziewięćdziesiąt procent wierszy za pomocą standardowych filtrów pandas. Zużycie RAM-u skacze, twój skrypt ledwo pełznie, a ty marnujesz czas. Tak naprawdę możesz przefiltrować te dane przestrzenne, zanim w ogóle opuszczą dysk twardy. Dzisiaj bierzemy na warsztat odczyt i zapis, czyli szybkie I/O z Pyogrio. Głównymi funkcjami, których będziesz używać do ładowania i zapisywania danych w GeoPandas, są read_file i to_file. Historycznie GeoPandas używał pod spodem biblioteki o nazwie Fiona. Działała, ale była powolna. Współczesny GeoPandas domyślnie korzysta z Pyogrio. Pyogrio to bezpośredni, wysoce zoptymalizowany interfejs do GDAL, czyli głównej biblioteki w C, która napędza niemal całe oprogramowanie geoprzestrzenne open source. Pyogrio jest domyślnie szybkie, ale możesz wymusić, by działało jeszcze szybciej. Kiedy wywołujesz read_file lub to_file, możesz przekazać argument o nazwie use_arrow, ustawiony na true. To mówi Pyogrio, aby przetwarzało dane przy użyciu struktur pamięci Apache Arrow. Zamiast czytać plik i tłumaczyć każdą pojedynczą współrzędną i atrybut na obiekt Pythona jeden po drugim, integracja z Arrow przetwarza dane w dużych, wydajnych pamięciowo batchach. To całkowicie omija typowy narzut Pythona. Jeśli masz do czynienia z milionami rekordów, włączenie flagi Arrow zamienia operację odczytu lub zapisu trwającą kilka minut w taką, która zajmuje kilka sekund. Ale najskuteczniejszą optymalizacją jest po prostu wczytywanie mniejszej ilości danych. Bardzo częstym błędem jest wczytywanie całego, ogromnego datasetu do GeoDataFrame, a następnie używanie standardowego indeksowania pandas, żeby go przefiltrować. Powoduje to ogromne, zupełnie niepotrzebne skoki zużycia pamięci. GeoPandas pozwala na filtrowanie danych już podczas samej operacji read_file, co utrzymuje twój memory footprint na płaskim poziomie. Załóżmy, że masz plik zawierający obrysy wszystkich budynków w stanie Nowy Jork, ale interesują cię tylko budynki w okolicy Coney Island. Jeśli przekażesz tuplę z bounding boxem do argumentu bbox w read_file, silnik w C sprawdzi indeks przestrzenny pliku na dysku. Całkowicie zignoruje każdy budynek poza tym zdefiniowanym obszarem. Otrzymujesz malutki DataFrame zawierający tylko to, czego potrzebujesz, a twój RAM ledwo zauważa tę operację. Jeśli zwykły, prostokątny bounding box nie jest wystarczająco precyzyjny dla twoich potrzeb, możesz użyć argumentu mask. Przekazujesz konkretną geometrię, na przykład złożony poligon reprezentujący dokładne granice dzielnicy, bezpośrednio do read_file. Silnik analizuje ten kształt i wczyta tylko te wiersze, które przecinają twój poligon. Jest to nieco bardziej kosztowne obliczeniowo niż zwykły bounding box, ale za to bardzo dokładne. Filtrowanie przestrzenne załatwia nam geografię, ale możesz też filtrować standardowe atrybuty. Funkcja read_file przyjmuje parametr where. Przyjmuje on standardową klauzulę SQL WHERE jako string. Jeśli chcesz tylko budynki oznaczone jako mieszkalne, przekazujesz string mówiący, że kolumna type równa się residential. GDAL parsuje to zapytanie SQL i filtruje wiersze na poziomie C, zanim w ogóle przekaże cokolwiek do Pythona. Możesz nawet połączyć bounding box i klauzulę where w dokładnie tym samym wywołaniu read, aby jednocześnie przefiltrować zarówno geografię, jak i atrybuty. Oto kluczowy wniosek. Przesunięcie filtrów w dół, do operacji read oznacza, że cała czarna robota dzieje się w wysoce zoptymalizowanym kodzie C, a nie w pamięci Pythona. Absolutnie najszybszym sposobem na przetwarzanie danych przestrzennych jest po prostu niewczytywanie tych części, których nie potrzebujesz. Dzięki za spędzenie ze mną tych kilku minut. Do usłyszenia następnym razem, trzymaj się.
3

Kształt Ziemi: Odwzorowania i CRS

4m 27s

Zrozum układy współrzędnych (CRS) i dlaczego są one kluczowe dla dokładności przestrzennej. Poznaj różnicę między współrzędnymi geograficznymi a odwzorowanymi (projected) oraz dowiedz się, jak bezpiecznie przekształcać swoje geometrie za pomocą GeoPandas.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. GeoPandas, odcinek 3 z 11. Obliczasz odległość między dwoma miastami, a wynik wynosi 2,4 zamiast 200 mil. Twój kod zadziałał idealnie, ale wynik jest całkowicie bezużyteczny. Winowajcą jest to, jak twoje dane przestrzenne mapują się na fizyczny świat, co prowadzi nas do tematu Kształt Ziemi: Projekcje i C R S. Każdy GeoSeries i GeoDataFrame ma atrybut kropka C R S. Przechowuje on obiekt pyproj C R S. Są to metadane, które mówią GeoPandas, co dokładnie reprezentują liczby w twojej kolumnie geometry. Bez układu współrzędnych, współrzędna taka jak minus 73 przecinek 40 to po prostu punkt na nieskończonej, abstrakcyjnej siatce. Z C R S staje się konkretną, znaną lokalizacją na Ziemi. Istnieją dwie główne kategorie układów współrzędnych, które musisz zrozumieć. Geograficzne układy współrzędnych przedstawiają Ziemię jako trójwymiarowy glob. Ich współrzędne to kąty mierzone od środka Ziemi, wyrażone w stopniach długości i szerokości geograficznej. Bardzo powszechnym przykładem jest EPSG 4326, system używany przez globalny GPS. Z kolei odwzorowane układy współrzędnych przedstawiają Ziemię spłaszczoną na dwuwymiarowej powierzchni. Ich współrzędne używają miar liniowych, takich jak metry czy stopy US Survey. Oto kluczowa sprawa. Operacje przestrzenne pod maską GeoPandas zakładają, że twoje dane istnieją na płaskiej płaszczyźnie kartezjańskiej. Jeśli twoje dane są w geograficznym układzie współrzędnych, takim jak EPSG 4326, i poprosisz GeoPandas o obliczenie powierzchni dzielnic Nowego Jorku, wykona on obliczenia traktując stopnie tak, jakby były zwykłymi kwadratami na siatce. Otrzymasz wynik 0,083. To oznacza 0,083 stopnia kwadratowego, co jest bezsensowną miarą. Stopnie zmieniają swoją fizyczną szerokość w zależności od tego, jak daleko jesteś od równika, więc nie możesz ich używać do mierzenia bezwzględnej odległości czy powierzchni. Aby wykonywać obliczenia dla rzeczywistego świata, musisz rzutować swoje dane geograficzne na odwzorowany układ współrzędnych. Robisz to używając metody to C R S. Jeśli weźmiesz te dane z Nowego Jorku i przekażesz EPSG 2263 do metody to C R S, GeoPandas matematycznie przekształci każdą pojedynczą współrzędną w twojej kolumnie geometry. EPSG 2263 to odwzorowany układ specyficzny dla Nowego Jorku, który mierzy odległości w stopach. Teraz, gdy uruchomisz dokładnie to samo obliczenie powierzchni, otrzymasz wynik w milionach stóp kwadratowych, co jest rzeczywistą, użyteczną miarą. Kryje się tu częsta pułapka. Developerzy często próbują naprawić brakujące odwzorowania używając metody set C R S zamiast metody to C R S. Set C R S nie jest narzędziem do konwersji. Używa się jej tylko wtedy, gdy twoje dane przestrzenne zostały załadowane z całkowitym brakiem układu współrzędnych. Po prostu przypisuje metadane, mówiąc GeoPandas, czym już są liczby w twojej kolumnie geometry, bez zmieniania samych liczb. Używasz to C R S, gdy dane mają już poprawny C R S i chcesz matematycznie przekonwertować te współrzędne na zupełnie nowy układ. Jeśli twoje obliczenia powierzchni lub odległości kiedykolwiek wydadzą się absurdalnie małe, prawie zawsze oznacza to, że prosisz GeoPandas o wykonanie płaskich obliczeń na sferycznych stopniach i musisz rzutować swoje dane. To wszystko na dziś. Dzięki za słuchanie — idź zbudować coś fajnego.
4

Kształtowanie przestrzeni: Bufory, centroidy i powłoki wypukłe

3m 43s

Odkryj, jak generować zupełnie nowe geometrie na podstawie już istniejących. Ten odcinek omawia podstawowe metody konstrukcyjne, takie jak obliczanie centroidów, generowanie stref buforowych i rysowanie powłok wypukłych (convex hulls).

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. GeoPandas, odcinek 4 z 11. Czasami kształt, który musisz przeanalizować, nie jest tym, który dostałeś. Możesz zaimportować listę lokalizacji sklepów jako pojedyncze punkty, ale tak naprawdę interesuje cię obszar dostaw wokół nich. Wymaga to matematycznego modelowania punktów i linii w dynamiczne granice za pomocą kształtowania przestrzeni: metod buffer, centroid i convex hull. Te konstruktywne manipulacje geometryczne działają jak glina do modelowania danych przestrzennych. Zaczynasz od surowych geometrii i używasz tych wbudowanych metod, aby wyliczyć zupełnie nowe kształty dopasowane do twojej analizy. W GeoPandas te metody są stosowane element po elemencie na całej aktywnej GeoSeries. Jeśli masz dziesięć tysięcy kształtów, jedna komenda generuje dziesięć tysięcy nowych. Wszystko to opiera się pod spodem na bibliotece Shapely, która wykonuje całą matematykę geometryczną. Najczęstszą manipulacją jest metoda buffer. Buffer tworzy polygon reprezentujący wszystkie punkty w danej odległości od twojego oryginalnego kształtu. Wyobraź sobie scenariusz, w którym masz geometrie punktowe reprezentujące kawiarnie. Chcesz zdefiniować dwukilometrowy obszar dostaw dla każdej lokalizacji. Wywołujesz metodę buffer na swoich punktach i przekazujesz odległość. GeoPandas natychmiast rysuje okrąg wokół każdej kawiarni, przekształcając twój dataset punktowy w dataset typu polygon. Zwróć na to uwagę. Wykonanie operacji buffer wymaga zrzutowanego Coordinate Reference System. Jeśli twoje geometrie są w formacie geograficznym, takim jak szerokość i długość geograficzna, wartość odległości równa dziesięć oznacza dziesięć stopni, a nie dziesięć metrów. Ponieważ stopnie długości geograficznej kurczą się w fizycznej szerokości w miarę oddalania się od równika, użycie metody buffer na niezrzutowanych danych skutkuje powstaniem mocno zniekształconych, rozciągniętych owali zamiast równych okręgów. Zawsze rzutuj swoje dane do systemu metrycznego przed obliczaniem odległości. Czasami musisz zwinąć kształt zamiast go rozszerzać. Jeśli masz złożone polygony reprezentujące strefy dzielnic i musisz zredukować je do pojedynczych punktów do obliczeń odległości lub etykiet na mapie, używasz atrybutu centroid. Centroid oblicza matematyczny środek masy dla każdej geometrii, zwracając idealny punkt centralny dla każdego polygona lub linii w twoim datassecie. Aby wyizolować krawędzie kształtu, używasz atrybutu boundary. Jeśli masz polygon reprezentujący hrabstwo, boundary usuwa całe jego wnętrze. Zwraca geometrię o niższym wymiarze, przekształcając polygon w zbiór linii, które tylko obrysowują to hrabstwo. Jeśli wywołasz boundary na linii, zwróci pojedyncze punkty na każdym jej końcu. I tu robi się ciekawie. Masz też do dyspozycji atrybut convex hull. Wyobraź sobie rozproszony zbiór punktów reprezentujących pojedyncze obserwacje zwierząt w lesie. Gdybyś rozciągnął gumkę recepturkę całkowicie wokół skrajnych punktów i pozwolił jej się zacisnąć, kształt, który utworzy ta gumka, to właśnie convex hull. Zwraca on najmniejszy możliwy wypukły polygon, który obejmuje całą geometrię. To niezwykle szybki sposób na obliczenie całkowitego fizycznego obrysu rozproszonego zbioru współrzędnych. Geometria konstruktywna oznacza, że nigdy nie jesteś skazany na granice przestrzenne, które zaimportowałeś; zawsze możesz wyliczyć dokładnie takie strefy, jakich faktycznie wymaga twoja analiza. Dzięki za spędzenie ze mną tych kilku minut. Do usłyszenia następnym razem, trzymaj się.
5

Predykaty przestrzenne: Intersects, Within i Contains

4m 00s

Dowiedz się, jak zadawać pytania o relacje między różnymi kształtami. Badamy binarne predykaty przestrzenne – takie jak intersects, within i contains – aby sprawdzić, jak geometrie oddziałują na siebie w przestrzeni.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. GeoPandas, odcinek 5 z 11. Sprawdzanie, czy konkretna współrzędna GPS znajduje się wewnątrz złożonej, nierównej granicy miasta, brzmi jak skomplikowany problem matematyczny wymagający ray-castingu. Jednak w tej bibliotece załatwia to jedna linijka logiki boolean. Mówimy o predykatach przestrzennych: intersects, within i contains. Jeśli używasz standardowego pandas, znasz już filtrowanie warunkowe. Bierzesz kolumnę dataframe'u, sprawdzasz, czy jej wartości są większe niż dziesięć, i dostajesz z powrotem Series z wartościami True i False. Następnie przekazujesz ten boolean Series z powrotem do nawiasów dataframe'u, żeby przefiltrować wiersze. Predykaty przestrzenne robią dokładnie to samo. Zamiast filtrować według liczby, filtrujesz według prawdy przestrzennej. Porównujesz kształty. Predykat przestrzenny to metoda, która testuje relację topologiczną między całym GeoSeries a pojedynczą geometrią odniesienia. Kiedy wywołujesz metodę predykatu na aktywnej kolumnie geometry, GeoPandas ewaluuje każdy pojedynczy wiersz względem tego kształtu odniesienia. Oblicza całą matematykę pod spodem i zwraca ci standardowy boolean Series z pandas. Najczęstszym testem relacji jest intersects. Kiedy wywołujesz metodę intersects, zwraca ona True, jeśli granica lub wnętrze geometrii w twoim zbiorze danych w jakikolwiek sposób dotyka lub nakłada się na geometrię odniesienia. Jeśli dwa poligony mają choć jeden wspólny punkt na zewnętrznej krawędzi, to się przecinają. Jeśli linia przecina poligon, to się przecinają. To taki ogólny catch-all dla każdej współdzielonej przestrzeni fizycznej. Dalej mamy metody contains i within. Ludzie często je mylą, bo to operacje odwrotne. Logika jest tu ściśle kierunkowa. Jeśli Poligon A to granica dużego miasta, a Punkt B to kawiarnia, miasto zawiera kawiarnię. Kawiarnia jest wewnątrz miasta. Jeśli Poligon A spełnia warunek contains dla Punktu B, to Punkt B jest within Poligonu A. Używasz metody contains, kiedy twój GeoSeries przechowuje duże geometrie ograniczające, a ty przekazujesz mniejszy kształt odniesienia. Zwraca ona True tylko wtedy, gdy kształt odniesienia jest całkowicie zamknięty wewnątrz geometrii z danego wiersza. Odwrotnie, wywołujesz metodę within, kiedy twój GeoSeries zawiera mniejsze elementy, takie jak tysiące pojedynczych punktów ze współrzędnymi, i chcesz sprawdzić, czy wpadają one całkowicie do jednego, większego poligonu odniesienia. Zwróć uwagę na tę część. Ponieważ te metody zwracają standardowe boolean masks, możesz je bezpośrednio chainować w swoich data pipelines. Załóżmy, że masz dataframe z dzielnicami miasta. Zastosowałeś buffer, żeby rozszerzyć ich granice. Teraz chcesz wiedzieć, które z tych rozszerzonych, zbuforowanych dzielnic nakładają się na oryginalny, niezbuforowany poligon Brooklynu. Najpierw izolujesz ten pojedynczy, oryginalny poligon Brooklynu, żeby posłużył jako twoja geometria odniesienia. Następnie bierzesz swój dataframe zbuforowanych dzielnic i wywołujesz metodę intersects na jego kolumnie geometry, przekazując kształt Brooklynu. GeoPandas ewaluuje każdy wiersz. Zwraca True dla zbuforowanych dzielnic, które dotykają poligonu Brooklynu, i False dla tych, które tego nie robią. Umieszczasz ten wynikowy Series z True i False bezpośrednio w nawiasach selekcji twojego dataframe'u. Dataframe natychmiast odrzuca wiersze z wartością False. Zostajesz z geograficznie przefiltrowanym datasetem, co osiągnąłeś całkowicie poprzez standardowe operacje na danych tabelarycznych. Traktując relacje w przestrzeni fizycznej jako proste pytania typu true lub false, wypełniasz lukę między złożoną kartografią a podstawową logiką dataframe'ów. To wszystko w tym odcinku. Dzięki za wysłuchanie i keep building!
6

Turbodoładowanie zapytań: Indeks przestrzenny R-Tree

3m 48s

Odkryj tajny silnik stojący za wydajnością GeoPandas. Ten odcinek ujawnia, jak indeks przestrzenny STR R-tree wykorzystuje ramki ograniczające (bounding boxes) do drastycznego zmniejszenia kosztów obliczeniowych zapytań przestrzennych.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. GeoPandas, odcinek 6 z 11. Twoje geospatial queries zajmują godziny, zawieszając maszynę i wyczerpując twoją cierpliwość. Prawdopodobnie zmuszasz swój CPU do sprawdzania każdego pojedynczego punktu z każdą granicą, co skaluje się fatalnie. Rozwiązaniem tego bottlenecku jest Turbocharge Queries: The R-Tree Spatial Index. Masz milion punktów GPS i pięćdziesiąt polygonów dzielnic. Jeśli przetestujesz każdy punkt z każdym polygonem, żeby sprawdzić, do której dzielnicy należy, wykonasz pięćdziesiąt milionów złożonych obliczeń geometrycznych. Sprawdzenie, czy współrzędna leży wewnątrz nieregularnego polygonu, to ciężka operacja matematyczna. Robienie tego jako full scan tworzy problem wykładniczego skalowania, który niszczy performance. Spatial index rozwiązuje ten problem, działając jak spis treści dla twojej mapy. GeoPandas wykorzystuje specyficzną strukturę zwaną R-tree, zbudowaną za pomocą algorytmu Sort-Tile-Recursive. R oznacza rectangle. Drzewo grupuje obiekty logicznie na podstawie ich lokalizacji. Kluczowym konceptem jest tutaj pre-filter. Zamiast sprawdzać dokładne, poszarpane granice polygonu dzielnicy, index rysuje wokół niego prosty prostokąt. Nazywa się to envelope lub bounding box. Sprawdzenie, czy współrzędna mieści się w zwykłym prostokącie, wymaga praktycznie zerowego wysiłku obliczeniowego. Index natychmiast odrzuca każdy punkt, który nie znajduje się nawet wewnątrz prostokątnego bounding boxa dzielnicy. Natychmiast zawężasz liczbę kandydatów z miliona do może kilku tysięcy. To prowadzi do kluczowej, dwuetapowej rzeczywistości spatial querying. Trafienie w spatial index oznacza jedynie, że bounding boxy się przecinają. Punkt może znajdować się wewnątrz prostokąta, ale tuż poza rzeczywistą, zakrzywioną granicą dzielnicy. Trafienie w bounding box to dopiero krok pierwszy. Krok drugi to dokładne sprawdzenie geometrii na tym mniejszym podzbiorze kandydatów. Uzyskujesz dostęp do tego silnika przez metodę sindex dot query. Jeśli przekażesz pojedynczą geometrię, zwraca on array indexów typu integer odpowiadających geometriom w twoim GeoSeries, których bounding boxy przecinają twój input. Aby wymusić na indexie obsługę tego kluczowego drugiego kroku, przekaż argument predicate równy intersects. GeoPandas użyje wtedy taniego sprawdzania bounding boxa, aby znaleźć kandydatów, i automatycznie uruchomi kosztowne sprawdzanie dokładnej geometrii tylko na tych, którzy przetrwali. Możesz również przekazać do query cały array geometrii naraz. To array query zwraca dwuwymiarowy array indexów, parując dopasowania między twoim input array a zindexowanym GeoSeries. Pierwszy wiersz podaje index twojej input geometry, a drugi wiersz podaje index pasującej geometrii w drzewie. Czasami nie potrzebujesz intersection, potrzebujesz po prostu bliskości. Metoda sindex dot nearest przyjmuje input geometry i zwraca index najbliższej geometrii w drzewie. Jest to bardzo wydajne do snappingu zabłąkanej współrzędnej do sieci dróg lub znajdowania najbliższej stacji pogodowej bez obliczania dystansu do każdej pojedynczej stacji na kontynencie. Złożone operacje przestrzenne są matematycznie kosztowne. Nigdy nie zmuszaj swojego CPU do obliczania dokładnych geometrycznych intersections, skoro proste sprawdzenie prostokąta może z góry wyeliminować dziewięćdziesiąt dziewięć procent kandydatów. Jeśli uważasz, że te odcinki są pomocne i chcesz wesprzeć program, wyszukaj DevStoriesEU na Patreonie. To wszystko w tym odcinku. Dzięki za wysłuchanie i keep building!
7

Łączenie światów: Złączenia przestrzenne i najbliższego sąsiedztwa

4m 18s

Przenieś integrację danych na wyższy poziom. Dowiedz się, jak połączyć dwa oddzielne obiekty GeoDataFrame wyłącznie na podstawie ich relacji przestrzennych, używając złączeń przestrzennych (`sjoin`) i złączeń bliskości (`sjoin_nearest`).

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. GeoPandas, odcinek 7 z 11. Jak połączyć listę restauracji z listą obszarów spisowych, kiedy nie współdzielą żadnych kolumn ID? Pozwalasz, żeby to ich współrzędne zajęły się dopasowaniem. Dzisiaj rozmawiamy o łączeniu światów: spatial joins i nearest joins. Spatial join to geograficzny odpowiednik SQL join. Zamiast łączyć tabele na podstawie wspólnego stringa albo integer ID, łączysz je na podstawie ich fizycznej relacji w przestrzeni. Używasz do tego funkcji sjoin. Wyobraź sobie scenariusz, w którym masz GeoDataFrame z punktami sklepów spożywczych i osobny GeoDataFrame z poligonami dzielnic Chicago. Chcesz dołączyć nazwę dzielnicy do każdego wiersza ze sklepem. Żeby to zrobić, wywołujesz sjoin na dataframe ze sklepami i przekazujesz dataframe dzielnic jako prawy argument. Funkcja opiera się na dwóch głównych argumentach. Pierwszy to how. Działa to dokładnie tak samo jak standardowe joiny w bazie danych. Inner join zachowuje tylko sklepy, które wpadają w granice dzielnicy. Left join zachowuje wszystkie twoje sklepy, dodając wartości null, jeśli sklep znajduje się poza granicami dzielnicy. Right join zachowuje wszystkie dzielnice, duplikując je, jeśli zawierają wiele sklepów, i zostawiając je z pustymi danymi sklepu, jeśli nie mają żadnego. Drugi argument to predicate. Definiuje on warunek przestrzenny, który musi zostać spełniony, żeby wystąpiło dopasowanie. Domyślna wartość to intersects, co oznacza, że geometrie stykają się lub nakładają w jakikolwiek sposób. Możesz też użyć within, upewniając się, że punkt jest ściśle wewnątrz poligonu, albo contains, jeśli sprawdzasz, czy poligon całkowicie zamyka w sobie punkt. Oto kluczowa sprawa. Wykonując spatial join, łączysz dwie tabele z kolumnami geometry, ale wynikowy GeoDataFrame może mieć tylko jedną aktywną geometrię. Domyślnie sjoin zachowuje geometrię lewego dataframe'u i odrzuca geometrię prawego dataframe'u, zachowując przy tym wszystkie jego standardowe kolumny atrybutów. Jeśli połączysz punkty sklepów po lewej stronie z poligonami dzielnic po prawej, twoim wynikiem będzie tabela punktów, która teraz zawiera nazwy dzielnic. Jeśli tak naprawdę potrzebujesz, żeby wynikowa tabela zawierała kształty poligonów, musisz odwrócić kolejność joinowania. Zrób z dzielnic lewą tabelę, a ze sklepów prawą tabelę. Czasami twoje zbiory danych w ogóle się nie pokrywają. Jeśli chcesz znaleźć najbliższą stację metra dla każdego sklepu, intersections nie pomogą. Do tego używasz funkcji sjoin nearest. Działa ona podobnie do standardowego spatial join, ale dopasowuje geometrie na podstawie bliskości, a nie przecięcia. Możesz przekazać argument distance column jako string do sjoin nearest. To mówi funkcji, żeby dodała do twoich wyników nową kolumnę zawierającą dokładną obliczoną odległość między dopasowanymi elementami. Możesz też podać próg max distance. Ogranicza to joina, tak żeby dopasowywał tylko wtedy, gdy najbliższy sąsiad znajduje się w określonym promieniu, zapobiegając połączeniu sklepu ze stacją po drugiej stronie miasta tylko dlatego, że akurat jest to najbliższa dostępna stacja. Pod spodem obie te funkcje mocno opierają się na spatial index. Nie obliczają odległości ani przecięcia między każdym pojedynczym punktem a każdym pojedynczym poligonem, co zajęłoby mnóstwo czasu. Używają indeksu, żeby najpierw ocenić bounding boxes, szybko odrzucając geometrie, które w ogóle nie są blisko siebie, przed wykonaniem ciężkich obliczeń matematycznych. Traktowanie fizycznej lokalizacji jako twojego ostatecznego foreign key pozwala ci łączyć zbiory danych, które w innym wypadku nie miałyby ze sobą absolutnie nic wspólnego. To wszystko w tym odcinku. Dzięki za wysłuchanie i budujcie dalej!
8

Operacje na zbiorach: Tworzenie geometrii za pomocą Overlays

3m 57s

Odkryj, jak wycinać, łączyć i dzielić nakładające się kształty. Ten odcinek omawia potężną metodę `overlay`, wyjaśniając, jak obliczać przecięcia (intersections), sumy (unions) i różnice (differences), aby tworzyć zupełnie nowe geometrie.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. GeoPandas, odcinek 8 z 11. Spatial join powie ci, czy strefa zalewowa nachodzi na nieruchomość. Ale zostawia granice nieruchomości w twoim datasecie całkowicie nienaruszone. Jeśli potrzebujesz zupełnie nowego poligonu, który pokaże dokładnie, która część nieruchomości jest pod wodą, sam join nie wystarczy. Potrzebujesz operacji na zbiorach, a konkretnie tworzenia geometrii za pomocą overlayów. Często myli się spatial joiny, wykorzystujące metodę sjoin, z overlayami. Oto różnica. Spatial join sprawdza relację, dodając atrybuty z jednej warstwy do drugiej, ale zachowuje oryginalną geometrię dokładnie w takim samym stanie. Overlay fizycznie tnie geometrie. Pomyśl o tym jak o foremce do ciastek. Masz dwa nakładające się na siebie płaty rozwałkowanego ciasta, które reprezentują dwa różne GeoDataFrame'y. Overlay przeciska się przez obie warstwy, wycinając je względem siebie. W efekcie dostajesz zupełnie nowy zestaw puzzli. Wszędzie tam, gdzie te dwie warstwy się nakładały, nowy element dziedziczy atrybuty z obu oryginalnych warstw. Robisz to używając metody overlay na GeoDataFrame, przekazując drugi GeoDataFrame i określając typ operacji za pomocą parametru how. Jest pięć typów logicznych, które możesz przekazać do parametru how. Pierwszy to intersection. Zwraca on tylko te dokładne obszary geograficzne, w których obie warstwy się nakładają. Każda część geometrii, która się nie nakłada, zostaje odrzucona. Drugi to union. Union zwraca wszystko. Łączy obie warstwy w jeden GeoDataFrame, ale tnie geometrie wszędzie tam, gdzie się przecinają. Dostajesz kawałki reprezentujące tylko pierwszą warstwę, kawałki reprezentujące tylko drugą warstwę i kawałki reprezentujące ich część wspólną. Trzeci to symmetric difference. To dokładne przeciwieństwo intersection. Zwraca obszary, które należą do pierwszej lub drugiej warstwy, ale specjalnie wycina i odrzuca te miejsca, w których się one nakładają. Czwarty to difference. Zachowuje on geometrie twojej pierwszej warstwy, ale odejmuje obszary pokryte przez drugą warstwę. To tak, jakby odgryźć kawałek twojego pierwszego kształtu, używając drugiej geometrii jako zębów. Piąty to identity. Ten jest bardzo specyficzny. Zachowuje zewnętrzne granice twojej pierwszej warstwy całkowicie nienaruszone, ale dzieli środek wszędzie tam, gdzie przecina go druga warstwa. Nakładające się na siebie kawałki dostają atrybuty drugiej warstwy, podczas gdy reszta pierwszej warstwy zostaje bez zmian. Żeby zobaczyć, dlaczego to ma znaczenie, weźmy urbanistę oceniającego dostęp do sklepów spożywczych. Ma on warstwę granic dzielnic i warstwę punktów ze sklepami spożywczymi. Najpierw buforuje punkty sklepów w jednokilometrowe poligony. Gdyby odpalił standardowy spatial join między dzielnicami a buforami, po prostu oflagowałby, które dzielnice zawierają bufor. Ale wywołując metodę overlay z parametrem how ustawionym na intersection, fizycznie wycina kształty dzielnic przy użyciu kształtów buforów. Na wyjściu dostaje nowy GeoDataFrame, zawierający tylko dokładny zarys terenu w promieniu jednego kilometra od sklepu, idealnie przycięty do granic dzielnicy. Oto kluczowy wniosek. Overlaye obliczają nowe węzły przecięcia dla każdej krzyżującej się granicy, co sprawia, że są kosztowne obliczeniowo. Nie używaj overlaya tylko do sprawdzania nakładających się atrybutów. Używaj go tylko wtedy, gdy naprawdę potrzebujesz wygenerować zupełnie nowe granice geometryczne z kolizji dwóch warstw. To wszystko w tym odcinku. Dzięki za wysłuchanie i buduj dalej!
9

Przestrzenne GroupBy: Agregacja za pomocą Dissolve

3m 16s

Dowiedz się, jak grupować dane przestrzenne. Badamy metodę `dissolve`, która działa jak przestrzenne GroupBy, łącząc mniejsze geometrie w większe, jednocześnie płynnie agregując ich atrybuty tabelaryczne.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. GeoPandas, odcinek 9 z 11. Masz dataset przestrzenny obejmujący ponad trzy tysiące hrabstw, ale twoja analiza wymaga czystej mapy pięćdziesięciu stanów. Nie musisz przerywać pracy i szukać nowego datasetu w sieci, potrzebujesz tylko sposobu na zatarcie wewnętrznych granic. Rozwiązujemy to za pomocą spatial group-by, a konkretnie metody dissolve. Dane są często dostarczane na bardzo granularnym poziomie. Możesz mieć kwartały ulic, gdy potrzebujesz dzielnic, albo rejony spisowe, gdy potrzebujesz całych gmin. Dissolve to twoje narzędzie do poruszania się w górę hierarchii geograficznej. Bierze wiele mniejszych kształtów, łączy je w większe na podstawie wspólnego atrybutu i agreguje ich dane bazowe. Jeśli znasz standardową analizę danych, możesz myśleć o dissolve jak o operacji spatial group-by. Spójrzmy na konkretny scenariusz. Masz spatial dataframe Nepalu podzielony na małe dystrykty. Twój dataset zawiera geometrię typu polygon dla każdego dystryktu, liczbę populacji oraz kolumnę tekstową wskazującą większą strefę administracyjną, do której należy ten dystrykt. Chcesz mapy pokazującej tylko te strefy. Wywołujesz metodę dissolve na swoim spatial dataframe i podajesz kolumnę strefy jako cel grupowania. GeoPandas wykonuje wtedy dwie odrębne operacje jednocześnie. Po pierwsze, zajmuje się geometriami przestrzennymi. Grupuje wszystkie wiersze dystryktów po nazwie strefy, bierze ich geometrie i łączy je przez union w jeden feature. Wewnętrzne granice dystryktów są usuwane, zostawiając ci jedną ciągłą granicę zewnętrzną dla nowej strefy. Po drugie, musi zdecydować, co zrobić z danymi tabelarycznymi przypiętymi do tych kształtów, takimi jak twoja kolumna populacji. I tu jest kluczowa sprawa. Wielu użytkowników odpala metodę dissolve, patrzy na nową mapę stref i orientuje się, że liczby populacji są drastycznie błędne. To nie jest błąd geometrii. Domyślnie metoda dissolve obsługuje dane tabelaryczne, po prostu biorąc wartość z pierwszego wiersza, na jaki natrafi w każdej grupie. Resztę ignoruje. Aby poprawnie agregować wartości liczbowe, musisz jawnie użyć parametru aggregate function. Kiedy wywołujesz dissolve grupując po strefie, przekazujesz też parametr aggregate function ustawiony na sum. Teraz, gdy GeoPandas fizycznie łączy kształty dystryktów, matematycznie sumuje też liczby populacji dystryktów. Wynikowy wiersz strefy będzie zawierał prawidłową, zagregowaną całkowitą populację. Ten parametr przyjmuje również inne standardowe funkcje statystyczne. Jeśli twoje granularne dane zawierały średni dochód gospodarstwa domowego, możesz przekazać mean zamiast sum. Jeśli zawierały pomiary wysokości, możesz przekazać max, aby znaleźć najwyższy punkt w nowo połączonym regionie. Dissolve łączy spatial unioning z agregacją tabelaryczną w jednym zsynchronizowanym kroku, dając ci pełną kontrolę nad geograficzną skalą twoich danych. Dzięki za wysłuchanie, udanego kodowania wszystkim!
10

Mapowanie statyczne: Tworzenie kartogramów i rysowanie warstw

3m 52s

Zamień swoje dane przestrzenne w przekonujące wizualizacje. Ten odcinek omawia integrację GeoPandas z Matplotlib, ucząc, jak tworzyć spersonalizowane kartogramy, nakładać na siebie wiele zbiorów danych i radzić sobie z brakującymi danymi.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. GeoPandas, odcinek 10 z 11. Nie musisz eksportować swoich danych przestrzennych do ciężkiego desktopowego oprogramowania GIS, żeby zobaczyć, jak wyglądają. Możesz generować wizualizacje gotowe do publikacji bezpośrednio w swoim środowisku Pythona. Rozwiązaniem jest Static Mapping: budowanie kartogramów i rysowanie warstw. Podstawą wizualizacji w GeoPandas jest metoda plot. Każdy GeoDataFrame ją posiada. Wywołanie plot bez argumentów natychmiast rysuje twoją geometrię. Jest to banalnie proste, ale pod spodem opakowuje to matplotlib. Oznacza to, że dostajesz mapę w jednej linijce kodu, ale nadal masz do dyspozycji pełną moc matplotlib, żeby dostosowywać kolory, osie i style. Zwykły plot po prostu rysuje kształty. Żeby stworzyć kartogram – gdzie kształty są kolorowane na podstawie wartości danych – używasz argumentu column. Przekazujesz nazwę kolumny zawierającej twoje dane. GeoPandas zmapuje wartości w tej kolumnie na skalę kolorów. Żeby pomóc odbiorcom zrozumieć tę skalę, możesz dodać legendę, przekazując argument legend równy True. Domyślnie, plotowanie ciągłej kolumny liczbowej tworzy płynny gradient kolorów. Często lepiej jest pogrupować twoje dane w oddzielne przedziały. GeoPandas integruje się w tym celu z biblioteką o nazwie mapclassify. Dodając argument scheme do twojej metody plot, możesz posortować swoje dane na klasy. Na przykład, ustawienie scheme na quantiles dzieli twoje geometrie na równej wielkości grupy na podstawie ich wartości, co znacznie ułatwia odczytywanie wzorców przestrzennych. Rzeczywiste zbiory danych często mają luki. Jeśli budujesz kartogram i w niektórych wierszach brakuje wartości danych, które plotujesz, GeoPandas całkowicie usunie je z mapy. To zostawia dziwne puste miejsca. Żeby to naprawić, używasz argumentu missing keywords. Przekazujesz słownik opcji stylowania, takich jak ustawienie koloru na jasnoszary, dzięki czemu te kształty nadal pojawiają się na mapie, nie wprowadzając zamieszania w danych. Teraz druga kwestia, czyli nakładanie na siebie wielu zbiorów danych. Najbardziej przydatne mapy łączą wiele warstw. Załóżmy, że masz warstwę bazową z dzielnicami miasta i chcesz nałożyć na nią scatter plot z lokalizacjami sklepów spożywczych. Robisz to, współdzieląc obiekt axis z matplotlib. Najpierw tworzysz axis. Następnie plotujesz poligony swoich dzielnic, przekazując ten axis do metody plot. Potem plotujesz punkty sklepów spożywczych, przekazując dokładnie ten sam axis. Oba zbiory danych rysują się na tym samym płótnie. Żeby kontrolować, która warstwa jest na wierzchu, używasz argumentu z order. Niższy z order idzie na spód. Więc dajesz swoim dzielnicom z order równy jeden, a sklepom spożywczym z order równy dwa. Punkty wyrenderują się czysto na poligonach. Zwróć uwagę na ten fragment. Czasami chcesz, żeby twoje bazowe poligony były całkowicie przezroczyste, tak żeby było widać tylko ich granice. Jeśli ustawisz argument face color na None, jako obiekt Pythona bez cudzysłowów, matplotlib zignoruje to i zastosuje domyślny kolor wypełnienia. Musisz ustawić face color na string ze słowem none, żeby zrobić go przezroczystym. Alternatywnie, możesz to całkowicie ominąć, wywołując właściwość boundary na swoim GeoDataFrame i plotując właśnie to. To znacznie bezpieczniejsze podejście do rysowania samych konturów. Prawdziwą siłą mapowania w GeoPandas jest płynne przejście od szybkich weryfikacji danych do grafik gotowych do publikacji. Dostajesz natychmiastowy obraz za pomocą jednego wywołania metody, ale nigdy nie tracisz kontroli nad matplotlib, kiedy musisz nałożyć na siebie złożone historie przestrzenne. To wszystko w tym odcinku. Dzięki za wysłuchanie i twórz dalej!
11

Interaktywna eksploracja i nie tylko

4m 03s

Ożyw swoje mapy. Przyjrzymy się metodzie `explore()` do tworzenia interaktywnych map internetowych. Na koniec podsumowujemy podróż z GeoPandas i przygotowujemy Cię do rozpoczęcia budowy rzeczywistych aplikacji przestrzennych.

Pobierz
Cześć, tu Alex z DEV STORIES DOT EU. GeoPandas, odcinek 11 z 11. Mapy statyczne są świetne do końcowej prezentacji, ale kiedy jesteś głęboko w fazie analizy, płaski obraz jest niesamowicie ograniczający. Musisz zrobić zoom na konkretną okolicę, przesunąć mapę wzdłuż rzeki i zrobić hover na kształt, żeby sprawdzić surowe dane ukryte pod spodem. Interaktywna eksploracja i nie tylko, to dokładnie to, o czym opowiemy w tym odcinku. W poprzednich odcinkach używaliśmy metody plot do rysowania statycznych obrazków naszych geometrii. GeoPandas oferuje również alternatywę o nazwie explore. Kiedy wywołasz explore na GeoDataFrame, wygeneruje to w pełni interaktywną mapę webową prosto w twoim środowisku. Pod maską używa biblioteki Pythona o nazwie Folium, która z kolei jest zbudowana na popularnej bibliotece JavaScript do map, czyli Leaflet. Piękno metody explore polega na tym, że jej API idealnie naśladuje metodę plot. Nie musisz uczyć się zupełnie nowego zestawu argumentów, żeby przejść ze statycznego obrazka na interaktywną mapę. Weźmy dataset dzielnic Nowego Jorku. Wywołujesz explore na datassecie i przekazujesz argument column ustawiony na area. Wynik jest natychmiastowy i namacalny. Pojawia się mapa miasta, a ty możesz użyć myszki, żeby ją przesuwać i scrollować, robiąc zoom na konkretne ulice. I tu jest kluczowa sprawa. Kiedy zrobisz hover kursorem nad Brooklynem lub Queens, automatycznie wyskoczy tooltip. Ten tooltip wyświetla pod spodem dane tabelaryczne dla tej konkretnej geometrii, w tym dokładną wartość area, według której kazałeś pokolorować mapę. Dostajesz kontekst wizualny i surowe liczby w dokładnie tym samym czasie. Jest pewien szczegół techniczny, o którym musisz pamiętać. Musisz zrozumieć, co tak naprawdę zwraca metoda explore. Metoda plot generuje lekki plik obrazka. Metoda explore zwraca ciężki obiekt napakowany kodem HTML i JavaScript. To genialne, kiedy pracujesz w Jupyter Notebook, ponieważ przeglądarka bezbłędnie renderuje interaktywną mapę. Ale jeśli twoim ostatecznym celem jest wygenerowanie statycznego raportu PDF albo prostego wydruku, explore to złe narzędzie. Interaktywne elementy webowe po prostu nie przeniosą się na papier. Używaj explore do badania swoich danych i przełącz się z powrotem na plot, kiedy musisz opublikować statyczny dokument. To prowadzi nas do prawdziwej mocy frameworka GeoPandas. Przez całą tę serię widzieliśmy, jak działa on jako spójne spoiwo dla ekosystemu przestrzennego Pythona. Bierze bibliotekę pandas i daje jej świadomość przestrzenną. Deleguje ciężką matematykę geometryczną do Shapely. Opiera się na Pyogrio, żeby czytać i pisać pliki z dużą prędkością. Na koniec, podpina się pod biblioteki do wizualizacji, żeby dać ci natychmiastowy feedback. Możesz załadować ogromny dataset, przefiltrować go, policzyć odległości, wykonać spatial joins i zmapować wyniki na interaktywnym canvasie, a to wszystko w zaledwie kilku linijkach Pythona. Oficjalna dokumentacja GeoPandas jest świetna, a przeczytanie ich poradników getting started to najlepszy sposób na utrwalenie tego, czego się nauczyłeś. Otwórz notebooka, załaduj jakieś dane, na których ci zależy, i zacznij eksperymentować. Jeśli masz pomysł na temat, który powinniśmy omówić, wpadnij na devstories.eu i daj nam znać. Prawdziwą zaletą tego frameworka jest to, że zdejmuje z ciebie złożoność matematyki przestrzennej, pozwalając ci traktować geografię nie jako przeszkodę, ale po prostu jako kolejny typ danych do filtrowania, joinowania i analizowania. To wszystko w tym odcinku. Dzięki za słuchanie i buduj dalej!