Proporsi besar data yang dihasilkan setiap hari bersifat spasial. Mulai dari data Pengamatan Bumi dan data GPS hingga data yang disertakan dalam berbagai jenis peta, data spasial –yang juga dikenal sebagai data geospasial atau informasi geografis– adalah data yang setiap rekamannya memiliki lokasi tertentu yang terkait.
Setiap titik data spasial dapat dipetakan. Ini dapat dilakukan menggunakan sistem referensi koordinat tertentu, misalnya koordinat geografis, yang didasarkan pada pasangan lintang-bujur yang biasa kita gunakan untuk menentukan lokasi sesuatu di bumi. Ini memungkinkan kita melihat hubungan spasial antar data.
Namun, kekuatan sebenarnya dari data geospasial adalah menggabungkan data itu sendiri dengan lokasinya, membuka banyak peluang untuk analisis yang canggih. Ilmu data geospasial adalah subbidang ilmu data yang berfokus pada penggalian informasi dari data geospasial dengan memanfaatkan kekuatan algoritma dan teknik analitik spasial, seperti machine learning dan deep learning. Dengan kata lain, ilmu data geospasial membantu kita memahami di mana sesuatu terjadi dan mengapa terjadi di sana.
Ada banyak alat yang cocok untuk ilmu data geospasial. Tutorial ini akan berfokus pada GeoPandas, paket open-source untuk bekerja dengan data geospasial di Python.
GeoPandas memperluas tipe data yang digunakan oleh pandas –alat standar untuk memanipulasi dataframe di Python– agar memungkinkan operasi spasial pada tipe geometri. Karena GeoPandas dibangun di atas pandas –serta paket Python populer lain untuk ilmu data, seperti matplotlib–, para profesional data yang menggunakan Python akan sangat mudah menguasai sintaks GeoPandas.
Memasang Python GeoPandas
Untuk menggunakan Python GeoPandas, pertama Anda harus memasangnya, seperti library Python lainnya.
Penting untuk dicatat bahwa GeoPandas bergantung pada tumpukan library geospasial open-source untuk menghadirkan kemampuan spasial penuh, termasuk shapely, fiona, pyproj, dan rtree. Anda harus memastikan semua dependensi ini terpasang, jika tidak, GeoPandas mungkin tidak berfungsi sebagaimana mestinya.
Untuk menghindari kerumitan, GeoPandas merekomendasikan pemasangan library menggunakan manajer paket conda. Ini berarti Anda perlu memasang Anaconda terlebih dahulu. Untuk panduan cara memasang dan menggunakan Anaconda, lihat tutorial kami.
Keuntungan menggunakan conda adalah ia menyediakan biner siap pakai untuk semua dependensi yang diwajibkan dan opsional dari GeoPandas untuk semua sistem operasi (Windows, Mac, Linux). Untuk memasang GeoPandas melalui baris perintah:
>>conda install geopandas
Alternatifnya, Anda dapat memasang Anaconda menggunakan pip, penginstal paket standar di Python. Seperti telah disebutkan, Anda juga harus memasang dependensi yang diperlukan. Jika Anda belum familiar dengan pip, kami sangat menyarankan Anda membaca Tutorial Pip Python untuk Manajemen Paket kami. Perintah yang perlu dijalankan untuk memasang GeoPandas dengan pip adalah:
>>pip install geopandas
Jika Anda mengalami masalah selama pemasangan GeoPandas, Anda sebaiknya memeriksa dokumentasi untuk informasi lebih lanjut.
Setelah paket terpasang, Anda siap mulai menggunakan GeoPandas. Cukup impor ke lingkungan Python Anda. Perlu dicatat bahwa sangat umum mengimpor GeoPandas dengan alias gpd.
import geopandas as gpd
Operasi Dasar dengan GeoPandas
Pada bagian ini, kami akan membahas operasi paling dasar yang dapat Anda lakukan dengan GeoPandas. Dengan begitu, kami akan mengenalkan Anda pada beberapa konsep penting dalam analisis geospasial, termasuk jenis data spasial, format data spasial, dan coordinate reference systems (CRS).
Membaca dan menulis data spasial
Seperti halnya pandas memerlukan data masukan untuk diubah menjadi pandas dataframe, GeoPandas membaca data (spasial) masukan dan mengonversinya menjadi GeoDataFrame.
Sebelum membahas berbagai jenis file spasial yang dapat dibaca GeoPandas, penting untuk membedakan tipe data spasial yang ada. Tipe data yang kita hadapi menentukan alat apa yang harus kita gunakan untuk menganalisis dan kemudian memvisualisasikan data.
Pada dasarnya, ada dua tipe utama data spasial:
- Data vektor. Mendeskripsikan fitur lokasi geografis di Bumi melalui penggunaan geometri diskret, yaitu:
- Titik (Point). Lokasi individual, seperti gedung atau mobil, dengan koordinat X dan Y.
- Garis (Line). Serangkaian titik yang terhubung yang menggambarkan hal-hal seperti jalan atau sungai.
- Poligon (Polygon). Dibentuk oleh garis tertutup yang mengelilingi suatu area, seperti batas negara. Selain itu, ketika satu fitur terdiri dari beberapa geometri, kita menyebutnya MultiPolygon.
- Data raster. Mengodekan dunia sebagai permukaan kontinu yang direpresentasikan oleh grid, seperti piksel gambar. Setiap bagian grid dapat berupa nilai kontinu (seperti nilai elevasi) atau klasifikasi kategorikal (seperti klasifikasi tutupan lahan). Contoh klasik termasuk data ketinggian atau citra satelit.

Sumber: Humboldt State University
Baik data vektor maupun raster biasanya disertai dengan data non-spasial, yang juga dikenal sebagai atribut. Data spasial dapat memiliki sejumlah atribut tambahan yang menyertai informasi tentang lokasi. Misalnya, lokasi sebuah sekolah dapat dikaitkan dengan nama sekolah, jumlah siswa, atau alamat.
GeoPandas dirancang untuk bekerja dengan data vektor, meskipun dapat dengan mudah bekerja sama dengan paket Python lain untuk menangani data raster, seperti rasterio. Untuk membaca data spasial, GeoPandas menyediakan fungsi geopandas.read_file(). Fungsi yang kuat ini dapat secara otomatis membaca sebagian besar data spasial berbasis vektor yang umum ditemui.
Beberapa format data vektor yang paling umum adalah:
- Shapefile. Sebagai standar industri, shapefile adalah format data vektor yang paling umum. Terdiri dari tiga file yang biasanya disediakan dalam file zip:
- File .shp berisi geometri bentuk.
- File .dbf menyimpan atribut untuk setiap geometri,
- File .shx atau shape index membantu menautkan atribut ke bentuk.
- GeoJSON. Ini adalah format yang lebih baru untuk data geospasial yang dirilis pada 2016. Tidak seperti shapefile, GeoJSON adalah satu file, sehingga lebih mudah digunakan.
Pada contoh berikut, kami akan menggunakan fungsi geopandas.read_file() untuk membaca file GeoJSON yang dihosting di GitHub yang berisi data geospasial tentang berbagai distrik di kota Barcelona.
url = 'https://raw.githubusercontent.com/jcanalesluna/bcn-geodata/master/districtes/districtes.geojson'
districts = gpd.read_file(url)
districts

Kita akan kembali ke dataset ini sebentar lagi, tetapi terlebih dahulu, Anda harus tahu cara menulis GeoDataFrame kembali ke file. Ini cukup mudah. Anda hanya perlu menggunakan GeoDataFrame.to_file() untuk membuat file yang berisi data spasial. Secara default, format dokumen baru adalah shapefile, tetapi Anda dapat mengubahnya dengan parameter "driver".
Misalnya, Anda menyimpan GeoDataFrame distrik ke dalam file geoJSON:
districts.to_file("districts.geojson", driver="GeoJSON")
Mengeksplorasi GeoDataFrame
Anda mungkin memperhatikan bahwa GeoDataFrame pada bagian sebelumnya mirip dengan pandas dataframe tradisional. Kemiripan ini masuk akal, karena GeoDataFrame adalah subclass dari pandas.DataFrame. Artinya, ia mewarisi banyak metode dan atribut dari pandas dataframe. Hal baru pada GeoDataFrame adalah ia dapat menyimpan kolom geometri (juga dikenal sebagai GeoSeries) dan melakukan operasi spasial.
Kolom geometri dapat berisi tipe data vektor apa pun, seperti titik, garis, dan poligon. Lebih lanjut, penting untuk dicatat bahwa meskipun sebuah GeoDataFrame dapat memiliki beberapa GeoSeries, hanya satu kolom yang dianggap sebagai geometri aktif, artinya semua operasi spasial akan didasarkan pada kolom tersebut.

Sumber: GeoPandas
Fitur penting lain dari GeoDataFrame adalah setiap GeoSeries disertai informasi CRS. Informasi CRS memberi tahu GeoPandas di mana koordinat tersebut berada di Bumi. Informasi ini penting untuk analisis spasial. Misalnya, jika Anda perlu menggabungkan dua dataset spasial, Anda harus memastikan keduanya diekspresikan dalam CRS yang sama. Jika tidak, Anda tidak akan mendapatkan hasil yang diharapkan.
Ada dua kategori utama CRS:
- Koordinat geografis. Menentukan posisi global dalam derajat lintang dan bujur relatif terhadap ekuator dan meridian utama. Dengan sistem ini, kita dapat dengan mudah menentukan lokasi mana pun di bumi. Ini digunakan secara luas, misalnya pada GPS. CRS yang paling populer adalah EPSG:4326, juga disebut WGS84.
- Koordinat proyeksi. Walaupun Bumi bulat, kita biasanya merepresentasikannya pada peta dua dimensi. Koordinat proyeksi mengekspresikan lokasi dalam dimensi X dan Y, sehingga memungkinkan kita bekerja dengan satuan panjang, seperti meter, alih-alih derajat, yang membuat analisis lebih mudah dan efektif. Namun, memindahkan Bumi tiga dimensi ke peta dua dimensi akan menghasilkan distorsi. Itulah mengapa ada berbagai pendekatan untuk membuat koordinat proyeksi. Misalnya, banyak negara mengadopsi CRS proyeksi standar untuk kondisi geografis masing-masing.
Masih banyak hal tentang CRS, tetapi itu di luar cakupan tutorial ini. Sumber yang sangat baik untuk mendapatkan informasi tambahan dan contoh praktis adalah Course Working with Geospatial Data in Python kami.
Di GeoPandas, informasi CRS disimpan dalam atribut crs:
districts.crs

GeoDataFrame distrik terkait dengan koordinat geografis (EPSG: 4326), tetapi kita ingin mengubahnya menjadi koordinat proyeksi, sehingga kita dapat melakukan beberapa perhitungan dalam meter. Mari kita ubah ke EPSG:2062, CRS proyeksi standar untuk Spanyol. Kita dapat melakukannya dengan metode Geopandas.to_crs().
districts.to_crs(epsg=2062, inplace=True)
districts.crs

Sekarang setelah kita menetapkan CRS proyeksi yang tepat, kita siap mengeksplorasi atribut GeoDataFrame.
Mengeksplorasi atribut dataset spasial
GeoPandas mewarisi sejumlah metode dan atribut berguna dari paket shapely. Kita akan membahas empat di antaranya.
Luas (Area)
Atribut area mengembalikan luas yang dihitung dari suatu geometri. Kita dapat menyimpan hasil luas (dikonversi ke km2) dalam kolom baru:
districts['area'] = districts.area / 1000000
districts
Centroid
Atribut centroid mengembalikan titik tengah dari suatu geometri. Kita dapat menambahkannya ke dataset, sehingga membuat kolom geometri baru.
districts['centroid']=districts.centroid
districts
Batas (Boundary)
Atribut boundary menghasilkan batas dari sebuah poligon.
districts['boundary']=districts.boundary
Jarak (Distance)
Metode distance memberikan jarak minimum dari suatu geometri ke sebuah lokasi. Misalnya kita ingin menghitung jarak dari gereja Sagrada Familia yang terkenal, berlokasi di distrik Eixample, ke centroid setiap distrik di Barcelona, lalu menambahkan jarak (dalam kilometer) pada kolom baru.

Sagrada Familia. Sumber: Wikipedia
Pertama, kita perlu membuat titik menggunakan fungsi shapely Point() dengan koordinat yang diinginkan (Anda dapat dengan mudah menemukannya di Google Maps), mengonversinya menjadi GeoSeries dengan CRS yang tepat, lalu menggunakan metode GeoPandas.distance():
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]
Dataset yang dihasilkan, setelah operasi spasial sebelumnya, tampak seperti ini:

Memplot dengan GeoPandas
Operasi spasial yang telah kita lakukan memberikan wawasan berharga untuk studi kita. Namun, memvisualisasikan geometri Anda di ruang adalah cara yang bagus untuk meningkatkan analisis. Untungnya, membuat plot GeoPandas sangat mudah. Anda hanya perlu memanggil fungsi GeoDataFrame.plot(), yang dibangun di atas paket matplotlib Python.
Mari mulai dengan visualisasi dasar distrik Barcelona.
ax= districts.plot(figsize=(10,6))

Kita dapat membuat plot GeoPandas lebih informatif dengan memberi warna pada setiap distrik. Menyetel legend ke 'True' akan membuat legenda untuk membantu menafsirkan warna.
ax= districts.plot(column=district_name', figsize=(10,6), edgecolor='black', legend=True)

Terakhir, kita dapat menambahkan centroid distrik dan Sagrada Familia ke peta, serta judul. Selain itu, agar plot lebih menarik, kita dapat menggunakan paket contextily untuk menambahkan peta ubin kota Barcelona yang sebenarnya.
import contextily
ax= districts.plot(column='district_name', figsize=(12,6), alpha=0.5, legend=True)
districts["centroid"].plot(ax=ax, color="green")
sagrada_fam.plot(ax=ax,color='black', marker='+')
contextily.add_basemap(ax, crs=districts.crs.to_string())
plt.title('A Beautiful Map of Barcelona')
plt.axis('off')
plt.show()

Keren, bukan? Masih banyak yang dapat Anda lakukan untuk membuat visualisasi spasial yang indah. Course kami Visualizing Spatial Data With Python adalah sumber yang tepat untuk meningkatkan keterampilan visualisasi Anda.
Relasi Spasial dengan GeoPandas
Salah satu aspek kunci dari data geospasial adalah bagaimana mereka saling berhubungan di ruang. GeoPandas memanfaatkan kekuatan paket pandas dan shapely untuk melakukan berbagai relasi spasial antar dataset spasial. Pada bagian ini, kita akan membahas beberapa operasi yang paling umum.
Attribute Join
Ada dua cara menggabungkan dataset di pandas: attribute join dan spatial join.
Attribute join memungkinkan kita menggabungkan dua GeoDataFrame berdasarkan variabel non-geometri, seperti join biasa di pandas. Memang, cara melakukan attribute join adalah melalui metode standar pandas.merge(). Jika Anda tertarik mempelajari lebih lanjut tentang join di pandas, lihat tutorial Joining DataFrames in pandas kami.
Misalnya, akan menarik untuk memperkaya GeoDataFrame kita dengan data populasi Barcelona pada 2022.
pop =pd.read_csv('poblacion_barna_2022.csv', usecols=['Nom_Districte','Nombre'])
pop = pd.DataFrame(pop.groupby('Nom_Districte')['Nombre'].sum()).reset_index()
pop.columns=['district_name','population_22']
districts = districts.merge(pop)
districtsv
Spatial Join
Sebaliknya, spatial join memungkinkan penggabungan dua GeoDataFrame berdasarkan relasi spasialnya.
Misalnya, mari kita identifikasi distrik tempat jalur sepeda di Barcelona berada.
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)


Di GeoPandas, operasi spatial join tersedia sebagai fungsi sjoin(). Argumen pertama yang kita tentukan adalah GeoDataFrame tempat kita ingin menambahkan informasi, dan argumen kedua adalah GeoDataFrame yang berisi informasi yang ingin kita tambahkan. Lalu, kita harus menentukan tipe join. Terakhir, parameter “predicate” memberi tahu GeoPandas relasi spasial mana yang ingin kita gunakan untuk mencocokkan kedua dataset. Beberapa relasi yang paling umum adalah “intersects”, “contains”, dan “within”.
Pada contoh kita, kita akan menggunakan predicate “intersects”. Dua objek geometri beririsan jika mereka memiliki titik batas atau bagian dalam yang sama.
lanes_districts = gpd.sjoin(districts, bike_lane, how='inner', predicate='intersects')
lanes_districts

Perhatikan bahwa GeoDataFrame yang dihasilkan memiliki lebih banyak baris daripada GeoDataFrame bike_lane. Itu karena satu jalur sepeda dapat berada di lebih dari satu distrik.
Terakhir, kita dapat melakukan pengelompokan untuk mendapatkan jumlah jalur sepeda per distrik:
lanes_districts.groupby('district_name').size()
Operasi Overlay GeoPandas
Terakhir, overlay spasial memungkinkan Anda membandingkan dua GeoDataFrame yang berisi geometri poligon atau multipoligon dan membuat GeoDataFrame baru dengan geometri baru yang merepresentasikan kombinasi spasial dan properti yang digabungkan. Gambar di bawah menunjukkan berbagai kemungkinan:

Sumber: GeoPandas
Bayangkan Dewan Kota Barcelona ingin membangun taman-taman lokal baru sebagai upaya mengatasi polusi dan meningkatkan kesehatan komunitas. Gagasan awalnya adalah membuat taman besar berbentuk bundar dalam radius 500 meter dari pusat setiap distrik. Kita dapat mensimulasikan ini dengan membuat buffer berdasarkan centroid setiap distrik.
parks = gpd.GeoDataFrame(districts.centroid.buffer(500), geometry=0)
parks.plot()

Sekarang, kita siap melakukan beberapa operasi overlay. Misalnya, jika kita ingin melihat hanya area distrik tempat taman akan berlokasi, kita dapat menggunakan metode GeoPandas.overlay():
parks_intersection = districts.overlay(parks, how='intersection')
ax = parks_intersection.plot(alpha=0.5, edgecolor='black', column='district_name')

Atau, jika kita ingin melihat distrik tanpa area yang ditempati oleh taman yang direncanakan, kita dapat mengubah parameter “how” untuk melakukan operasi overlay lainnya.
parks_difference = districts.overlay(parks, how='difference')
ax = parks_difference.plot(alpha=0.5, edgecolor='black', column='district_name')

Kesimpulan
Semoga Anda menikmati tutorial GeoPandas ini. Analisis spasial adalah salah satu domain paling menarik dalam ilmu data, yang menyediakan peluang tak terbatas untuk memperkaya analisis Anda dengan informasi berbasis lokasi. Ada banyak alat untuk analisis spasial, tetapi jika Anda sudah familiar dengan Python, GeoPandas adalah tempat yang tepat untuk memulai.
Ingin melanjutkan pembelajaran geospasial Anda? Kami siap membantu! Lihat materi berikut dan jadilah ahli geospasial:
FAQ GeoPandas
Apa itu analisis data geospasial?
Ilmu data geospasial adalah subbidang ilmu data yang berfokus pada penggalian informasi dari data geospasial dengan memanfaatkan kekuatan algoritma dan teknik analitik spasial.
Apa itu GeoPandas?
GeoPandas adalah proyek open-source untuk mempermudah bekerja dengan data geospasial di Python.
Apa perbedaan antara pandas dan GeoPandas?
GeoPandas memperluas tipe data yang digunakan oleh pandas untuk memungkinkan operasi spasial pada tipe geometri. GeoPandas menggunakan pandas DataFrame untuk membuat GeoDataFrame.




