Python'da Türkiye Haritası Çizmek

Ozancan Ozdemir (ozancan@metu.edu.tr)

Merhabalar!

Bugüne kadar hep R Programlama dili ile ilgili içerik hazırlayan biri olarak ilk Python içeriğimi hazırladığım için oldukça heyecanlıyım. İlk içerik olacağı için tıpkı R'da da yapmış olduğum gibi Python için de Türkiye haritası çizdirme içeriği hazırlamak istedim.

Ufak bir hatırlatma!

R'da Türkiye haritası çizdirmek için bu öğreticiyi inceleyebilirsiniz.

Haritalar, veri görselleştirme araçları içerisinde oldukça faydalı bir araç durumuna geldi zaman içerisinde. Haritalarında kendi içinde çeşitli türleri mevcut, ancak bu türler içinde en çok kullanılanı ve hikayeyi en güzel anlatanı koroplet harita.

Koroplet Harita Örneği(https://datavizcatalogue.com/)

Koroplet Harita Örneği(https://datavizcatalogue.com/)

Başka bir öğreticide belki Avrupa ve Dünya haritası çizmeyi konuşabiliriz ki bu konuda internette oldukça güzel içerikler bulmak mümkün.

Bu öğreticide ben geopandas kütüphanesinden faydalanacağım. Geopandas konumsal veri manipülasyonu ve haritalamada oldukça faydalı ve işleri kolaylaştırıcı bir paket olsa da yüklemesi bilindik paketlere göre biraz daha zor. Bu kütüphaneyi yüklemek için şu adresteki blog yazısını takip edebilirsiniz.

Haritamızı çizdirmek için geojson formatında coğrafi ve mekansal bilgilerin kayıtlı olduğu bir dosya türü kullanacağız. İşi veri görselleştirmeye temas eden her bir meslek grubunun mutlaka bilmesi gereken bir dosya formatı olduğunu da eklemem gerek burada.

GeoJSON nedir?

GeoJSON, JavaScript Object Notation (JSON) tabanlı bir jeo-uzamsal veri değişim formatıdır. Çeşitli JSON nesnesi türlerini ve coğrafi özellikler, özellikleri ve uzamsal kapsamları hakkındaki verileri temsil etmek için bir araya getirilme biçimini tanımlar. GeoJSON bir coğrafi koordinat referans sistemi olan World Geodetic System 1984 ve ondalık derece birimleri kullanır.

RFC 7946 – The GeoJSON Format (ietf.org) GeoJSON Dosyası Nedir? Nasıl Kullanılır?

Bu çalışmada kullanmış olduğum GeoJSON dosyasını GitHub hesabımda bulabilirsiniz.

Görüldüğü gibi okuttuğumuz verimiz 255 satır ve 3 sütundan oluşuyor. Bu sütunlar ülke adı, ülke kodu ve enlem&boylam değerlerinden oluşurken her bir satır farklı bir ülkeyi temsil ediyor. Şimdi gelin, burada Türkiye'nin bilgilerini data frame objesine uygulanan basit bir veri kümeleme işlemi uygulayarak elde edelim.

.plot() komutu kullanarak elde ettiğimiz bu satırı görselleştirebilir ve illere bölünmemiş bir Türkiye haritası elde edebiliriz.

Peki İller?

Yukarıda çizdirmiş olduğumuz haritayı illere bölmek için, Türkiye'deki illerin ve onların konumsal bilgilerini içeren bir dosyaya ihtiyacımız olacak elbette. Yine ilgili dosyayı GitHub hesabımda bulabilirsiniz.

İlleri çizdirmek istediğim için adm1 uzantılı dosyayı okuttum. İlçeleri çizdirmek isterseniz eğer TUR_adm2 isimli dosyayı okutabilirsiniz.

Yine .plot() fonksiyonu kullanarak il grafiğimizi çizdirelim.

Şimdi isterseniz görseli daha da büyütüp, siyah beyaz bir hale getirelim.

Yukarıda açıkladığım argümanları değiştirirsek eğer örneğin;

Haritamız hazır!

Ancak işimiz elbette bununla sınırlı değil. Haritayı kullanmamızın arkasında bir hikaye var ve bu hikayeyi içeren bir de veri setimiz var. Ben bu öğreticide illere göre ortanca(medyan) yaş değerlerine göre bir renklendirme yapıp bunu görselleştirmek istiyorum. Bunun için TUIK ADNKS 2021 sonuçlarından ilgili veri setini kullanıyorum. Bu veri seti de GitHub hesabımda yer alıyor.

Şimdi bu iki veri setini tek bir veri seti altında birleştireceğiz. Bunu da il değişkeni üzerinden yapacağız. O yüzden her iki veri setinde de il değişkenlerinin aynı olması lazım. Önce harita için kullandığımız veride yer alan il isimlerini gösterelim.

Görüldüğü gibi bazı il isimlerinde harf bazılarında da yazım açısından uyuşmazlık var. Harita verimizde replace() komutu yardımıyla uyuşmazlık olan illeri değiştirelim.

Bu problemi hallettik, ancak işimiz bitmedi... İki veri setini birleştirmek için iki veri setinde de ortak isimli bir değişken olmak zorunda. Ancak bizim harita verimizde iller NAME_1, yaş verimizde ise Il başlığı altında yer alıyor. Şimdi kolaylık olması için her ikisine de İl ismini verelim.

Artık hazırız!

Şimdi tek yapmamız gereken merge komutu ile iki veriyi birbirine bağlamak!

Şimdi genel bir harita çizdirerek uyuşmazlık sorunu olup olmadığını bir de görsel olarak kontrol edelim.

Sorun yok!

Şimdi geldik görselleştirme işine...

İşte haritamız hazır diyemiyorum, çünkü bazı eksikliklerimiz var. İl isimleri ve haritamızın başlığı eksik. Özellikle il ismi ekleme işlemi biraz zahmetli.

Öncelikle elimizdeki verinin bir kopyasını oluşturuyoruz ve daha sonra geometry kolonunda yer alan enlem ve boylamların ortalama değerlerini hesaplıyoruz ki il isimlerini tek bir nokta olarak yerleştirebilelim.

Daha sonra ise adjustText paketine ihtiyacımız olacak.

Referanslar