import json
import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
Giriş
31 Mart 2024 yerel seçimlerini geride bıraktık ancak biz Türkiye’de yaşayanlar için iki seçim arası kısa bir reklam arası gibi. Önümüzdeki seçimlere hazırlıklı olmak için bu arayı değerlendirmeye devam ediyoruz. Bu uygulamada, CHP’nin iller bazında aldığı oyları harita üzerinde göstereceğiz.
Kullanılacak Kütüphaneler
Veri Setinin İçe Aktarılması
Veri setine buradan ulaşabilirsiniz.
Haritada görselleştirmek için öncelikle Türkiye’nin .shp
uzantılı dosyasını bulmamız gerekiyor. .shp
, coğrafi verileri depolamak için kullanılan bir vektör veri formatıdır. Buradan turkey_administrativelevels0_1_2.zip
isimli dosyayı indirebilirsiniz. Eğer bir problem ile karşılaşırsanız burada bulunan dosyayı da indirebilirsiniz.
read_file()
fonksiyonu ile .shp
uzantılı dosyayı içeri aktaralım.
= gpd.read_file('turkey_administrativelevels0_1_2/tur_polbnda_adm1.shp')
shapefile_tr
print(shapefile_tr)
shapefile_tr
ile birleştireceğimiz seçim verilerinin yer aldığı JSON dosyasını içe aktaralım.
with open('local_elections_province_20240331.json', 'r', encoding='utf-8') as file:
= json.load(file)
data
= pd.DataFrame(data['Data'])
df
print(df)
shapefile_tr
tablosundaki adm1_tr
sütunu ile df
tablosundaki PROVINCE
sütununu kullanarak iki tabloyu birleştireceğiz.
= pd.merge(
merged_df
shapefile_tr,
df,='adm1_tr',
left_on='PROVINCE',
right_on='left'
how )
Birleştirdikten sonra harita aşamasına geçebiliriz.
Haritanın Oluşturulması
Harita üzerinde görselleştirme yapmak için geopandas
kütüphanesini kullanacağız. geopandas
, isminden de anlaşılacağı üzere, popüler veri bilimi kütüphanesi pandas
’ı jeo-uzamsal veriler ile destekleyip genişletiyor.
Haritayı en temiz haliyle görelim.
= plt.subplots(figsize = (10,10))
fig, ax =ax)
merged_df.plot(ax plt.show()
Şimdi verileri haritaya gönderelim ve görselin daha profesyonel görünmesini sağlayalım.
= plt.subplots(figsize = (10,10))
fig, ax =ax, column='CHP', cmap='Reds')
merged_df.plot(ax'off')
ax.axis(
ax.set_title('31 Mart 2024 Yerel Seçimleri - Cumhuriyet Halk Partisi Oy Dağılımı',
= {'fontsize': 8}
fontdict
)
ax.text(0.95,
0.01,
"Veriler Yeni Şafak'ın web sitesinden alınmıştır.",
='gray',
color=6,
fontsize='italic',
fontstyle='right',
ha='bottom',
va=ax.transAxes
transform
) plt.show()
Neler yaptık? İnceleyelim.
Öncelikle, plt.subplots()
ile bir Figure
ve Axes
nesnesi oluşturuyoruz. Sonrasında, merged_df
isimli DataFrame’den gelen verileri kullanarak harita oluşturuyoruz ve bu işlemi plot()
ile gerçekleştiriyoruz. column
parametresi haritada renk kodlaması yapılacak sütunu belirtirken, cmap
parametresi renk haritasını belirler. Sadece haritanın görüntülenmesini sağlamak için ax.axis()
ile eksenleri kapalı hale getiriyoruz. ax.set_title()
ile haritanın başlığını ayarlıyoruz. Son olarak, ax.text()
ile sağ alt köşeye bir metin ekliyoruz ve plt.show()
ile grafiği görüntülüyoruz.
Yukarıda sürekli verileri kullandık. Peki, kategorik verileri harita üzerinde nasıl gösterebiliriz?
CHP’nin %50’den az ve çok aldığı illeri görselleştirmek istediğimizi varsayalım.
'CHP_50'] = merged_df['CHP'].apply(
merged_df[lambda x: '%50\'den az' if x < 50 else '%50\'den çok'
)
= {
colors "%50'den az": "gray",
"%50'den çok": "black"
}
= ListedColormap(list(colors.values()))
cmap
= plt.subplots(figsize = (10,10))
fig, ax
merged_df.plot(=ax,
ax='CHP_50',
column=cmap,
cmap=True,
legend={'loc': 'lower left', 'fontsize': 8}
legend_kwds
)'off')
ax.axis(
ax.set_title("31 Mart 2024 Yerel Seçimleri - Cumhuriyet Halk Partisi'nin %50'den Az ve Çok Aldığı İller",
= {'fontsize': 8}
fontdict
)
ax.text(0.95,
0.01,
"Veriler Yeni Şafak'ın web sitesinden alınmıştır.",
='gray',
color=6,
fontsize='italic',
fontstyle='right',
ha='bottom',
va=ax.transAxes
transform
) plt.show()
Farklı neler yaptık? İnceleyelim.
colors
isminde bir sözlük tanımladık. Bu sözlük, görselleştirmede kullanılacak renkleri ve bunlara karşılık gelen kategorileri içeriyor. Ayrıca, cmap
isminde bir ListedColormap
nesnesi oluşturduk. Bu, renk paletini belirtiyor ve colors
sözlüğünden alınan renklerle oluşturuluyor. Önceki haritada olmayan, bu haritada sol alt köşede bulunan lejant ise kategorilerin tanımlarını içeriyor.
Gelecek içeriklerde görüşmek dileğiyle.