Wykorzystanie danych geoprzestrzennych w Pythonie za pomocą GeoPandas - KDnuggets

Wykorzystanie danych geoprzestrzennych w Pythonie za pomocą GeoPandas – KDnuggets

Węzeł źródłowy: 2260558

Dane przestrzenne składają się z rekordów powiązanych z lokalizacjami. Dane te mogą pochodzić ze śladów GPS, zdjęć z obserwacji Ziemi i map. Każdy punkt danych przestrzennych można precyzyjnie umieścić na mapie przy użyciu systemów odniesienia za pomocą współrzędnych, takich jak pary szerokości i długości geograficznej, w celu dokładnego umieszczenia na mapach, co pozwala nam badać relacje między nimi.

Prawdziwy potencjał danych przestrzennych polega na możliwości łączenia punktów danych i ich odpowiednich lokalizacji, tworząc nieograniczone możliwości zaawansowanej analizy. Analiza danych geoprzestrzennych to wyłaniająca się dziedzina nauki o danych, której celem jest wykorzystanie informacji geoprzestrzennych i wydobycie cennych spostrzeżeń za pomocą algorytmów przestrzennych i zaawansowanych technik, takich jak uczenie maszynowe lub głębokie uczenie się, w celu wyciągnięcia znaczących wniosków na temat zdarzeń, które miały miejsce i ich przyczyn. Analiza danych geoprzestrzennych daje nam wgląd w to, gdzie mają miejsce zdarzenia i dlaczego się zdarzają.

GeoPandas to pakiet Pythona typu open source, specjalnie dostosowany do pracy z informacjami. Rozszerza tablicę typów danych pand, zapewniając operacje przestrzenne na obiektach geometrycznych, co ułatwia analizy przestrzenne w Pythonie za pomocą narzędzia do manipulacji danymi pand, pand. Ponieważ GeoPandas jest zbudowany na Pandzie, oferuje łatwą ścieżkę dla profesjonalistów zaznajomionych ze składnią Pythona, aby szybko zapoznać się ze składnią GeoPandas.

 

Wykorzystanie danych geoprzestrzennych w Pythonie za pomocą GeoPandas

Aby móc z niego skorzystać, musimy zainstalować pakiet GeoPandas. Należy jednak pamiętać, że GeoPandas zależy od innych bibliotek, które należy zainstalować, aby móc z niego korzystać bez problemów. Zależności te są kształtny, Fiona, pyproj, drzewo

Istnieją dwa sposoby pobrania pakietu GeoPandas. Po pierwsze, możesz użyć conda, aby zainstalować pakiet conda GeoPandas. Ta metoda jest zalecana, ponieważ zapewni zależności GeoPandas bez konieczności ich samodzielnego instalowania. Aby zainstalować GeoPandas, możesz uruchomić następujące polecenie:

conda install geopandas

 

Drugą metodą jest użycie pip, który jest standardowym instalatorem pakietów w Pythonie. Jednak użycie tej metody będzie wymagało zainstalowania pozostałych wymienionych zależności. 

pip install geopandas

 

Po zainstalowaniu pakietu GeoPandas możesz zaimportować go do swojego kodu Pythona za pomocą następującego polecenia:

import geopandas as gpd

GeoPandas służy do odczytu danych przestrzennych i ich konwersji Ramka geodanych. Należy jednak pamiętać, że istnieją dwa główne typy danych przestrzennych:

  • Dane wektorowe: Dane wektorowe opisują cechy geograficzne lokalizacji Ziemi przy użyciu geometrii dyskretnej, używając następujących terminów: punkt, linia i wielokąt. 
  • Dane rastrowe: Dane rastrowe kodują świat jako powierzchnię reprezentowaną przez siatkę. Każdy piksel tej siatki jest reprezentowany przez wartość ciągłą lub klasę jakościową.

GeoPandas pracuje głównie z danymi wektorowymi. Można go jednak używać w połączeniu z innymi pakietami Pythona do obsługi danych rastrowych, takich jak rastrowy. Możesz użyć potężnych geopandy.read_file() funkcja odczytująca większość wektorowych danych przestrzennych. Istnieją dwa główne typy danych częściowych opartych na wektorach:

  • Plik kształtu: Shapfile jest najpopularniejszym formatem danych i jest uważany za typ danych na poziomie branżowym. Składa się z trzech plików, które są skompresowane i zwykle dostarczane w postaci pliku ZIP:

    Plik.Shp plik: Ten plik zawiera geometrię kształtu.

    Połączenia .dbf plik: Ten plik zawiera atrybuty każdej geometrii,

    Połączenia .shx plik: Jest to plik indeksu kształtów, który pomaga połączyć atrybuty z kształtami.

  • GeoJSON: Jest to nowy format pliku danych geoprzestrzennych wydany w 2016 roku. Ponieważ składa się tylko z jednego pliku, jest łatwiejszy w użyciu w porównaniu do Plik kształtu

W tym artykule użyjemy geopandy.read_file() funkcja do odczytu pliku GeoJSON hostowanego w GitHub zawierające dane geoprzestrzenne dotyczące różnych dzielnic Barcelony.

Zacznijmy od załadowania danych i wydrukowania pierwszych pięciu kolumn, korzystając z poniższego kodu:

url = 'https://raw.githubusercontent.com/jcanalesluna/bcn-geodata/master/districtes/districtes.geojson'
districts = gpd.read_file(url)
districts.head()

 

Wykorzystanie danych geoprzestrzennych w Pythonie za pomocą GeoPandas
 
Następnie, aby zapisać dane do pliku, możemy użyć metody GeoDataFrame.to_file() funkcja zapisu danych do pliku a Plik kształtu domyślnie, ale możesz go przekonwertować na GeoJSON używając kierowca parametr.

districts.to_file("districts.geojson", driver="GeoJSON")

Ponieważ Ramki danych geograficznych jest podklasą pandy DataFrame i dziedziczy wiele jej właściwości. Istnieją jednak pewne różnice, główna różnica polega na tym, że może przechowywać kolumny geometrii (znane również jako GeoSeries) i wykonywać operacje przestrzenne. Kolumna geometrii w elemencie GeoDataFrame może zawierać różne typy danych wektorowych, w tym punkty, linie i wielokąty. Jednak tylko jedna kolumna jest uważana za aktywną geometrię i wszystkie operacje przestrzenne będą oparte na tej kolumnie.

Inną kluczową cechą tego rozwiązania jest to, że każda kolumna zawiera powiązane informacje CRS, które mówią nam, gdzie na Ziemi znajdują się kandydaci. Powodem, dla którego ta funkcja jest kluczowa, jest to, że jeśli chcesz połączyć dwa zbiory danych przestrzennych, musisz upewnić się, że są one wyrażone w tym samym CRS, w przeciwnym razie otrzymasz błędne wyniki. Informacje CRS są przechowywane w atrybucie crs w GeoPandas:

districts.crs

 

Wykorzystanie danych geoprzestrzennych w Pythonie za pomocą GeoPandas
 

Teraz, gdy ustawiliśmy odpowiedni rzutowany CRS, jesteśmy gotowi do zbadania atrybutów GeoDataFrames.

GeoPandas ma cztery przydatne metody i atrybuty, których można użyć do eksploracji danych. Przeanalizujemy te cztery metody:

  • Obszar
  • Środek ciężkości
  • Boundary
  • Dystans

4.1. Powierzchnia

Atrybut area zwraca obliczoną powierzchnię geometrii. W poniższym przykładzie obliczymy powierzchnię każdej dzielnicy w km2.

districts['area'] = districts.area / 1000000
districts['area']

 

Wykorzystanie danych geoprzestrzennych w Pythonie za pomocą GeoPandas

4.2. Środek ciężkości

Drugim atrybutem jest centroid, który zwraca punkt środkowy geometrii. W poniższym fragmencie kodu dodamy nową kolumnę i zapiszemy centroidę dla każdej dzielnicy:

districts['centroid']=districts.centroid
districts['centroid']

 

Wykorzystanie danych geoprzestrzennych w Pythonie za pomocą GeoPandas

4.3. Granica

Trzecią metodą jest atrybut granicy, który oblicza granicę wielokąta dla każdej dzielnicy. Poniższy kod zwraca go i zapisuje w osobnej kolumnie:

districts['boundary']=districts.boundary

 

Wykorzystanie danych geoprzestrzennych w Pythonie za pomocą GeoPandas

4.4. dystans

Metoda odległości oblicza minimalną odległość od określonej geometrii do określonej lokalizacji. I tak na przykład w poniższym kodzie obliczymy odległość od kościoła Sagrada Familia do centroidów każdej dzielnicy Barcelony. Następnie dodamy odległość w km2 i zapiszemy ją w nowej kolumnie.

from shapely.geometry import Point sagrada_fam = Point(2.1743680500855005, 41.403656946781304)
sagrada_fam = gpd.GeoSeries(sagrada_fam, crs=4326)
sagrada_fam= sagrada_fam.to_crs(epsg=2062)
districts['sagrada_fam_dist'] = [float(sagrada_fam.distance(centroid)) / 1000 for centroid in districts.centroid]

 

Wykorzystanie danych geoprzestrzennych w Pythonie za pomocą GeoPandas

Wykreślanie i wizualizacja danych to kluczowy krok w kierunku ich lepszego zrozumienia. Rysowanie za pomocą GeoPandas jest takie samo, jak kreślenie za pomocą Pand, jest całkiem łatwe i bardzo przyszłościowe. Odbywa się to za pomocą funkcji GeoDataFrame.plot() zbudowanej na pakiecie matplotlib Pythona. 

Zacznijmy od zwiedzania Barcelony poprzez nakreślenie podstawowego wykresu dla jej dzielnic:

ax= districts.plot(figsize=(10,6))

 

Wykorzystanie danych geoprzestrzennych w Pythonie za pomocą GeoPandas
 

To bardzo prosta fabuła, która nie mówi nam zbyt wielu informacji. Możemy jednak uczynić go bardziej informacyjnym, kolorując każdą dzielnicę innym kolorem.

ax= districts.plot(column='DISTRICTE', figsize=(10,6), edgecolor='black', legend=True)

 

Wykorzystanie danych geoprzestrzennych w Pythonie za pomocą GeoPandas
 

Wreszcie możemy dodać więcej informacji do naszej działki, dodając centroidy dzielnic. 

import contextily
import matplotlib.pyplot as plt ax= districts.plot(column='DISTRICTE', figsize=(12,6), alpha=0.5, legend=True)
districts["centroid"].plot(ax=ax, color="green")
contextily.add_basemap(ax, crs=districts.crs.to_string())
plt.title('A Colored Map with the centroid of Barcelona')
plt.axis('off')
plt.show()

 

Wykorzystanie danych geoprzestrzennych w Pythonie za pomocą GeoPandas
 

Następnie zbadamy bardzo ważną cechę GeoPand, jaką jest relacja przestrzenna i sposób, w jaki mogą się ze sobą powiązać.

Dane geoprzestrzenne są ze sobą powiązane w przestrzeni. GeoPandas wykorzystuje pandy i zgrabne pakiety do relacji przestrzennych. W tej sekcji opisano typowe operacje. Istnieją dwa główne sposoby łączenia ramek danych GeoPandas, które są połączeniami atrybutowymi i przestrzennymi. W tej sekcji omówimy oba z nich.

6.1.Łączenia atrybutów

Złączenia atrybutów umożliwiają połączenie dwóch ramek danych GeoPanda przy użyciu zmiennych niebędących geometrią, co upodabnia je do zwykłych operacji łączenia w Pandach. Operacja łączenia odbywa się za pomocą metody pandas.merge(), jak pokazano w poniższym przykładzie. W tym przykładzie dołączymy do Dane dotyczące populacji Barcelony do naszych danych geoprzestrzennych, aby dodać do nich więcej informacji. 

import pandas as pd
pop =pd.read_csv('2022_padro_sexe.csv', usecols=['Nom_Districte','Nombre'])
pop = pd.DataFrame(pop.groupby('Nom_Districte')['Nombre'].sum()).reset_index()
pop.columns=['NOM','population_22']
districts = districts.merge(pop)
districts

 

Wykorzystanie danych geoprzestrzennych w Pythonie za pomocą GeoPandas

6.2. Połączenia przestrzenne

Z drugiej strony połączenia przestrzenne łączą ramki danych w oparciu o relacje przestrzenne. W poniższym przykładzie zidentyfikujemy dzielnice, które posiadają ścieżki rowerowe. Najpierw załadujemy dane, jak pokazano w poniższym kodzie:

url = 'https://opendata-ajuntament.barcelona.cat/resources/bcn/CarrilsBici/CARRIL_BICI.geojson'
bike_lane = gpd.read_file(url)
bike_lane = bike_lane.loc[:,['ID','geometry']]
bike_lane.to_crs(epsg=2062, inplace=True)

 

Wykorzystanie danych geoprzestrzennych w Pythonie za pomocą GeoPandas
 

Aby przestrzennie połączyć dwie ramki danych, możemy użyć funkcji sjoin(). Funkcja sjoin() przyjmuje cztery główne argumenty: pierwszy to GeoDataFrame, drugi argument to GeoDataFrame, który dodamy do pierwszej GeoDataFrame, trzeci argument to typ łączenia, a ostatnim argumentem jest orzec który definiuje relację przestrzenną, której chcemy użyć, aby dopasować dwie ramki GeoDataFrames. Najczęstsze relacje częściowe to przecina się, zawiera, w ciągu. W tym przykładzie będziemy przecina się parametr.

lanes_districts = gpd.sjoin(districts, bike_lane, how='inner', predicate='intersects')
lanes_districts

 

Wykorzystanie danych geoprzestrzennych w Pythonie za pomocą GeoPandas
 

W tym artykule przedstawiłem analizę danych geoprzestrzennych przy użyciu biblioteki GeoPandas o otwartym kodzie źródłowym. Zaczęliśmy od pobrania pakietu GeoPandas, a następnie omówiliśmy różne typy danych geoprzestrzennych i sposób ich ładowania. Na koniec omówimy podstawowe operacje potrzebne do zdobycia zbioru danych geoprzestrzennych. Chociaż analiza danych geoprzestrzennych jest jeszcze do odkrycia, ten blog stanowi punkt wyjścia w Twojej podróży edukacyjnej.
 
 
Youssef Rafaat jest badaczem wizji komputerowej i naukowcem danych. Jego badania koncentrują się na opracowywaniu algorytmów widzenia komputerowego w czasie rzeczywistym do zastosowań w opiece zdrowotnej. Pracował również jako analityk danych przez ponad 3 lata w dziedzinie marketingu, finansów i opieki zdrowotnej.
 

Znak czasu:

Więcej z Knuggety