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
- https://geojson.io/
- https://www.openstreetmap.org/
- https://python-visualization.github.io/folium/quickstart.html