Python Folium Kullanarak Harita Üstünde Veri Görselleştirme

Veri analizi yaparken grafiklerimizin yanında Haritalar kullanarak görsellerimizi zenginleştirebiliriz. Bu yazıda Pythondaki Folium paketi kullanarak verilerimizi harita üzerinde nasıl görselleştirebiliriz bunu göreceğiz.

Folium paketi, arka planda JavaScript leaflet.js  kütüphanesini kullanır.

Bu yazıdaki örneklerde harita olarak Avrupa Birliği ülkelerinin koroplet haritası kullanılacak. Harita verisini https://github.com/etemkeskin/data_analyse/blob/master/europe_union/european-union-countries.json linkinden indirebilirsiniz. Bu yazıdaki örnekleri jupyter notebookta deneyebilirsiniz.

Eğer bilgisayarınızda folium paketini yüklemedi iseniz pip install folium ile yükleyebilirsiniz.

İlk önce projede kullanılacak python paketlerini yükleyelim.

import json
import folium
import numpy as np
import pandas as pd

Harita verimizi dosyadan projemize yükleyelim. Haritanın json yapısı önemlidir. https://geojson.io/ sitesinden harita için kendi geojson dosyanızı oluşturabilirsiniz.

geo_str = json.dumps(json.load(open("european-union-countries.json", 'r'))) # map data

Aşağıdaki kodları yazarak haritamızı oluşturalım. Harita ilk hangi konumda başlayacağını belirlemek için Avrupa haritasını kullanacağımızdan Münihin koordinatlarını verdik. Zoom değerini de 3 olarak ayarladık.

mapeu = folium.Map(location=[48, 11], # Münih koordinatları
                  tiles="Mapbox Bright",
                  zoom_start=3)

GeoJSON verisini haritamıza ekleyerek ilk koroplet haritamızın çıktısını alalım.

folium.GeoJson(
    geo_str,
    name='geojson'
).add_to(mapeu)
mapeu

Bu haritaya veri ekleyerek ülkelerin nüfuslarına göre renklendireceğiz. european-union-countries.json dosyasında Avrupa ülkelerinin tahmini nüfus verileri de bulunmaktadır. Aşağıdaki kodları çalıştırarak json dosyamızdan bir dataframe oluşturuyoruz.

# Veri hazırlama
json_dict= json.load(open("european-union-countries.json", 'r'))
df = pd.DataFrame([])  
for i,j in enumerate(json_dict["features"]):
    df = df_all3.append(pd.DataFrame(j["properties"], index=[i]))

df.head(5)

Elde ettiğimiz dataframin tablo yapısını aşağıdaki resimde görebiliriz.

Haritada nüfusa göre 7 renk segmenti kullanacağız. Bu renk skalası için nüfusa göre bir liste oluşturuyoruz.

Şimdi Avrupa birliği ülkelerinin harita üstünde nüfus yapılarını görebiliriz. Aşağıdaki kodda Dataframedeki ülke kod sütunu ile json dosyasındaki ülke kodunu eşleştiriyoruz.

folium.Choropleth(
            geo_data=geo_str, # harita verisi
            data=df, # göstermek istedigimiz veri
            columns=['gu_a3','pop_est'], # istenilen sutunlar
            fill_color='YlGn',
            key_on='feature.properties.gu_a3',#geojson daki ülke kodu
            bins = scale, #Oluşturduğumuz renk skalası için liste
            legend_name='Tahmini Nüfus'
                        ).add_to(mapeu)
mapeu

KAYNAKLAR

  1. https://geojson.io/
  2. https://www.openstreetmap.org/
  3. https://python-visualization.github.io/folium/quickstart.html