Python ile Mekansal Veri Analizi: GeoPandas Rehberi
GeoPandas, Python'ın popüler pandas kütüphanesini coğrafi veri desteğiyle genişleten açık kaynaklı bir kütüphanedir. Shapefile, GeoJSON ve GeoPackage gibi mekansal veri formatlarını doğrudan okuyabilir; projeksiyon dönüşümü, tampon analizi (buffer), kesişim (intersect) ve mekansal birleştirme (spatial join) gibi temel CBS işlemlerini birkaç satır kodla gerçekleştirmenize olanak tanır. Bu rehberde GeoPandas'ı sıfırdan kurulumdan pratik bir uygulama örneğine kadar adım adım inceliyoruz.
GeoPandas Nedir ve Nasıl Kurulur?
GeoPandas; shapely (geometri işlemleri), fiona (dosya okuma/yazma), pyproj (koordinat dönüşümü) ve matplotlib (görselleştirme) kütüphanelerini tek bir çatı altında birleştirir. Conda ortamında kurulum en güvenli yoldur:
conda create -n cbs python=3.11 conda activate cbs conda install -c conda-forge geopandas matplotlib contextily
pip ile kurulum yapmak istiyorsanız önce GDAL bağımlılığını sisteminize kurmanız gerekir; bu nedenle Conda veya WSL ortamı tercih edilir. contextily eklenerek arka plana OpenStreetMap veya başka döşeme haritaları eklenebilir.
GeoDataFrame Yapısı
GeoPandas'ın temel veri yapısı GeoDataFrame'dir; standart bir pandas DataFrame'e ek olarak en az bir geometry sütunu içerir. Bu sütun Shapely nesnelerini (Point, LineString, Polygon veya çok parçalı varyantları) barındırır. GeoDataFrame aynı zamanda aktif CRS (koordinat referans sistemi) bilgisini de saklar.
import geopandas as gpd gdf = gpd.read_file("turkiye_iller.gpkg") print(gdf.crs) # EPSG:4326 gibi print(gdf.geometry.type.unique()) # ['Polygon'] ya da ['MultiPolygon'] print(gdf.head()) # il adı, nüfus, geometry sütunları görünür
Shapefile ve GeoJSON Okuma / Yazma
GeoPandas, read_file() fonksiyonu ile Shapefile (.shp), GeoJSON, GeoPackage (.gpkg), KML ve daha birçok formatı otomatik olarak tanır. Dosyayı kaydetmek için to_file() yeterlidir:
# Okuma gdf = gpd.read_file("iller.shp") # GeoJSON olarak kaydetme gdf.to_file("iller.geojson", driver="GeoJSON") # GeoPackage (çok katmanlı, önerilen modern format) gdf.to_file("proje.gpkg", layer="iller", driver="GPKG")
Pratik İpucu: Shapefile formatı .shp, .dbf, .shx, .prj gibi birden fazla dosya içerir; bu dosyaları paylaşırken hepsini birlikte göndermek gerekir. Bunun yerine tek dosyalı GeoPackage (.gpkg) kullanmak hem daha güvenli hem de daha hızlıdır.
Temel Mekansal İşlemler
Buffer (Tampon Analizi)
Bir geometri etrafında belirtilen mesafede alan oluşturur. Mesafeyi metre cinsinden vermek için önce metrik bir CRS'e (ör. EPSG:32636) dönüşüm yapılmalıdır:
hastaneler = gpd.read_file("hastaneler.geojson") hastaneler_utm = hastaneler.to_crs("EPSG:32636") # 5 km tampon tampon = hastaneler_utm.copy() tampon["geometry"] = hastaneler_utm.buffer(5000)
Intersect (Kesişim) ve Overlay
İki katmanın kesişen alanlarını bulmak için overlay() kullanılır. how parametresi "intersection", "union", "difference" veya "symmetric_difference" olabilir:
tarim_alanlari = gpd.read_file("tarim.gpkg") su_havzalari = gpd.read_file("havza.gpkg") # Aynı CRS'de olduklarından emin olun tarim_alanlari = tarim_alanlari.to_crs(su_havzalari.crs) kesisim = gpd.overlay(tarim_alanlari, su_havzalari, how="intersection")
Dissolve (Birleştirme)
Belirli bir sütuna göre geometrileri birleştirerek özet istatistikler hesaplar. Örneğin ilçeleri iller bazında birleştirmek:
ilceler = gpd.read_file("ilceler.gpkg") iller = ilceler.dissolve(by="il_adi", aggfunc={"nufus": "sum"})
Spatial Join (Mekansal Birleştirme)
sjoin() ile iki katman arasında konuma dayalı birleştirme yapılır. Örneğin her noktanın (okul) hangi ile ait olduğunu bulmak:
okullar = gpd.read_file("okullar.geojson").to_crs("EPSG:4326") iller = gpd.read_file("iller.gpkg").to_crs("EPSG:4326") okullar_il = gpd.sjoin(okullar, iller[["il_adi","geometry"]], how="left", predicate="within")
Koordinat Dönüşümü (CRS)
GeoPandas'ta CRS dönüşümü için to_crs() yeterlidir. Coğrafi koordinatlar (derece) ile metrik koordinatlar (metre) arasında geçiş yaparken hangi bölgede çalıştığınıza göre doğru UTM bölgesini seçin. Türkiye için çoğunlukla EPSG:32636 (UTM Zone 36N) ya da EPSG:32635 (UTM Zone 35N) kullanılır.
Pratik Örnek: İl Bazında Nüfus Yoğunluğu Haritası
Aşağıdaki örnek, Türkiye il sınırları ve nüfus verisini birleştirerek km² başına nüfus yoğunluğu haritası üretir:
import geopandas as gpd import pandas as pd import matplotlib.pyplot as plt # Veri yükleme iller = gpd.read_file("turkiye_iller.gpkg") # geometri nufus = pd.read_csv("nufus_2025.csv") # il_adi, nufus sütunları # Birleştirme iller = iller.merge(nufus, on="il_adi", how="left") # Alan hesaplama (m² → km²) iller_utm = iller.to_crs("EPSG:32636") iller["alan_km2"] = iller_utm.geometry.area / 1_000_000 # Nüfus yoğunluğu iller["yogunluk"] = iller["nufus"] / iller["alan_km2"] # Görselleştirme fig, ax = plt.subplots(figsize=(14, 7)) iller.plot(column="yogunluk", cmap="YlOrRd", legend=True, legend_kwds={"label": "Kişi/km²"}, ax=ax, edgecolor="white", linewidth=0.4) ax.set_title("Türkiye İl Bazında Nüfus Yoğunluğu (2025)", fontsize=14) ax.axis("off") plt.tight_layout() plt.savefig("nufus_yogunlugu.png", dpi=150)
GeoPandas vs ArcGIS/QGIS: Ne Zaman Hangisi?
| Kriter | GeoPandas (Python) | QGIS / ArcGIS |
|---|---|---|
| Otomasyon ve toplu işlem | Çok güçlü; döngü ve betikle kolayca ölçeklenir | Model Builder ile mümkün ama daha sınırlı |
| Görsel arayüz ihtiyacı | Yok; kod tabanlı çalışma | Zengin GUI, tıkla-kullan arayüzü |
| İstatistik entegrasyonu | pandas, scikit-learn, PySAL ile tam entegrasyon | Harici araçlara bağımlı |
| Büyük veri (>1 GB shapefile) | Dask-GeoPandas ile paralel işlem mümkün | Performans sorunu yaşanabilir |
| Öğrenme eğrisi | Python bilgisi gerektirir | Daha kolay başlangıç |
| Maliyet | Ücretsiz, açık kaynak | QGIS ücretsiz; ArcGIS pahalı lisans |
Sonuç olarak tekrarlayan ve büyük ölçekli analizler ile makine öğrenmesi entegrasyonu gerektiren projelerde GeoPandas açık ara üstündür. Hızlı görsel keşif, dijitleştirme veya özel CBS araçlarına ihtiyaç duyulan durumlarda ise QGIS ideal tercihtir.
Başlangıç Kaynağı: Türkiye il sınırları için GADM (gadm.org) veya Türkiye İstatistik Kurumu'nun coğrafi veri portalından ücretsiz shapefile indirebilirsiniz. Koordinat sistemi genellikle WGS84 (EPSG:4326) olarak gelir; alan ve mesafe hesaplamaları için UTM'e dönüştürmeyi unutmayın.
Python ile CBS Analizi Projeniz için Profesyonel Destek
GeoPandas, mekansal istatistik ve harita üretimi konularında uzman kadromuzdan destek alın.
Python ile CBS analizi projeniz için profesyonel destek alınKaynaklar
- GeoPandas Development Team. (2026). GeoPandas Documentation. geopandas.org
- Rey, S. J., Arribas-Bel, D., & Wolf, L. J. (2020). Geographic Data Science with Python. CRC Press.
- McKinney, W. (2017). Python for Data Analysis (2nd ed.). O'Reilly Media.