Tools for loading and analyzing cleaned Turkish YSK election data
Project description
ysk
Temizlenmis YSK secim sonuclari verisi.
Kurulum
pip install ysk
Varsayilan kurulum yalnizca veri okuma ve tablo uretme bagimliliklarini kurar. Tarihsel ilce hizalama icin cografya bagimliligini ekleyin:
pip install "ysk[cografya]"
Harita cizimi icin harita bagimliligini ekleyin:
pip install "ysk[harita]"
Tum opsiyonel bagimliliklari birlikte kurmak icin:
pip install "ysk[cografya,harita]"
# veya
pip install "ysk[all]"
İçerik
Bu repo, src/ysk/data/secim.zarr altinda tek bir xarray/zarr veri seti olarak
duzenlenmis YSK sonuclarini icerir. Veri seti; secim tarihi, makam, yer ve
tercih koordinatlariyla okunabilir. Paket icindeki yardimci fonksiyonlar bu
veriyi analiz icin hazir pandas tablolarina donusturur.
Yer bilgisi il, ilce, belde, mahalle ve sandik seviyelerinde tutulur. Oylar
parti, aday, ittifak veya diger tercih adlariyla kolonlasir; secmen sayilari
sonuc tablolarinda yer alir. Cinsiyet kirilimi level="ilce" ve level="il"
sonuclarina eklenir.
Ana dosya:
src/ysk/data/secim.zarr
Örnek
Harita sinirlari ve cizim yardimcilari opsiyonel turkiye paketinden gelir:
import turkiye
import ysk
def set_winner(df):
oy = ysk.filter_columns(df, types=ysk.Kolon.PARTI | ysk.Kolon.BAGIMSIZ)
toplam = oy.sum(axis=1).where(lambda deger: deger > 0)
df[["birinci_parti", "birinci_parti_oy"]] = oy.agg(["idxmax", "max"], axis=1)
df["birinci_parti_oran"] = df["birinci_parti_oy"] / toplam * 100
ilce = ysk.election_results(
ysk.Secim.YEREL_2024,
ysk.Makam.BELEDIYE_BASKANI,
level="ilce",
)
set_winner(ilce)
ax = turkiye.plot(
ilce,
color="birinci_parti",
color_map=ysk.PARTI_RENKLERI,
legend=True,
backend="matplotlib",
)
ax.set_title("2024 Yerel Secimleri")
Ornek cikti:
En Kolay Kullanim
import ysk
df = ysk.election_results(
ysk.Secim.YEREL_2024,
ysk.Makam.BUYUKSEHIR_BELEDIYE_BASKANI,
level="ilce",
)
df.head()
Sonuc, analiz icin hazir bir pandas DataFrame'dir:
secmen oy_kullanan gecerli gecersiz ak_parti chp ...
il ilce
ISTANBUL ADALAR ... ... ... ... ... ...
ARNAVUTKOY ... ... ... ... ... ...
Secim ve Makam
election icin Secim, office icin Makam enumlarini kullanin.
from ysk import Makam, Secim, election_results
election_results(Secim.YEREL_2024, Makam.BUYUKSEHIR_BELEDIYE_BASKANI)
election_results(Secim.YEREL_2024, Makam.BELEDIYE_MECLISI)
election_results(Secim.GENEL_2023, Makam.CUMHURBASKANI)
election_results(Secim.GENEL_2023, Makam.MILLETVEKILI)
Birden fazla secimi ayni anda alabilirsiniz:
df = election_results(
[Secim.YEREL_2019, Secim.YEREL_2024],
Makam.BUYUKSEHIR_BELEDIYE_BASKANI,
province="ISTANBUL",
district="USKUDAR",
)
df.head()
Bu durumda kolonlar MultiIndex olur:
secim 2019-03-31 2024-03-31
alan secmen gecerli chp ... secmen gecerli chp ...
il ilce ...
Birden fazla makam da birlikte secilebilir:
df = election_results(
Secim.YEREL_2024,
[Makam.BUYUKSEHIR_BELEDIYE_BASKANI, Makam.BELEDIYE_MECLISI],
province="ISTANBUL",
level="ilce",
)
Seviyeler
level parametresi tablonun hangi kirilimda donecegini belirler:
election_results(Secim.YEREL_2024, Makam.BUYUKSEHIR_BELEDIYE_BASKANI, level="sandik")
election_results(Secim.YEREL_2024, Makam.BUYUKSEHIR_BELEDIYE_BASKANI, level="mahalle")
election_results(Secim.YEREL_2024, Makam.BUYUKSEHIR_BELEDIYE_BASKANI, level="belde")
election_results(Secim.YEREL_2024, Makam.BUYUKSEHIR_BELEDIYE_BASKANI, level="ilce")
election_results(Secim.YEREL_2024, Makam.BUYUKSEHIR_BELEDIYE_BASKANI, level="il")
sandik seviyesi yurt ici sandiklari, gumruk ve ulke satirlarini birlikte
tutar. Daha yuksek seviyeler sandik verisinden gruplanarak hesaplanir.
Il ve Ilce
ankara = election_results(
Secim.YEREL_2024,
Makam.BUYUKSEHIR_BELEDIYE_BASKANI,
province="ANKARA",
level="ilce",
)
cankaya = election_results(
Secim.YEREL_2024,
Makam.BUYUKSEHIR_BELEDIYE_BASKANI,
province="ANKARA",
district="CANKAYA",
)
Ilce adlarinda bazi tarihsel farklar normalize edilir. Ornegin ONDOKUZMAYIS ve
19 MAYIS ayni ad altinda hizalanir. SEMDINLI - DERECIK gibi kaynak adlari
temizlenerek ilce ve belde bilgisi ayrilir.
Birden fazla secimi karsilastirirken, sonradan ilce olan yerleri eski idari
sinirlara toplamak icin align_historical_divisions=True argumanini
kullanabilirsiniz. Bu secenek yalnizca level="ilce" sonuclarinda etkilidir:
turkiye gerektirir; gerekirse pip install "ysk[cografya]" ile kurun.
df = election_results(
[Secim.YEREL_2014, Secim.YEREL_2024],
Makam.BELEDIYE_BASKANI,
province="HAKKARI",
level="ilce",
align_historical_divisions=True,
)
Oy, Secmen ve Cinsiyet
Donen tabloda, varsa toplam kolonlari basta gelir:
secmen, oy_kullanan, gecerli, gecersiz,
gecerli_itirazsiz, gecerli_itirazli, kadin, erkek
Bunlardan sonra parti, aday, ittifak veya tercih kolonlari gelir.
Ilce seviyesinde kadin secmen sayisi ile CHP oyu arasindaki korelasyon:
df = election_results(
Secim.YEREL_2024,
Makam.BUYUKSEHIR_BELEDIYE_BASKANI,
province="ISTANBUL",
level="ilce",
)
df[["kadin", "chp"]].corr()
Sadece belirli tercihleri almak icin:
df = election_results(
Secim.YEREL_2024,
Makam.BUYUKSEHIR_BELEDIYE_BASKANI,
province="ISTANBUL",
level="ilce",
choices=["chp", "ak_parti", "mhp"],
)
Sandik seviyesinde oy ve secmen bilgilerini birlikte kullanmak:
df = election_results(
Secim.YEREL_2024,
Makam.BUYUKSEHIR_BELEDIYE_BASKANI,
province="ISTANBUL",
district="USKUDAR",
)
df[["secmen", "chp", "ak_parti"]].head()
kadin ve erkek ilce seviyesinde tutulan demografik kolonlardir; sandik
seviyesinde tekrarlanmazlar. Bu kolonlar level="ilce" ve level="il"
sonuclarina ayri demografi verisinden eklenir.
Kolon gruplarini filtrelemek icin:
from ysk import Kolon, filter_columns
partiler = filter_columns(df, types=Kolon.PARTI)
toplam_ve_bagimsiz = filter_columns(df, types=Kolon.TOPLAM | Kolon.BAGIMSIZ)
Ham Xarray Verisi
Hazir zarr veri setini dogrudan xarray ile acmak icin:
from ysk import load_dataset
ds = load_dataset()
ds
Alternatif:
import xarray as xr
ds = xr.open_zarr("src/ysk/data/secim.zarr")
Ornek secim:
from ysk import Makam, Secim
bbb_2024 = ds.sel(secim=Secim.YEREL_2024).sel(makam=Makam.BUYUKSEHIR_BELEDIYE_BASKANI)
Eksenleri ve degiskenleri gormek icin:
ds.dims
ds.coords
list(ds.data_vars)
Tum zarr'i tek seferde DataFrame'e cevirmek bellek tasmasina yol acabilir:
# Bunu genelde yapmayin:
# ds.oy.to_dataframe()
Once secim, makam, il veya ilce ile daraltmak ya da election_results()
yardimcisini kullanmak daha guvenlidir.
Veri Formati
Ana format zarr'dir. Zarr, xarray ile uyumlu, parca parca okunabilen N-boyutlu veri saklama formatidir. Bu repo icin dogal model secim, makam, yer ve tercih koordinatlari olan etiketli bir veri setidir.
Parquet tablo/SQL isleri icin daha uygundur. Bu repoda zarr kanonik veri formati
olarak tutulur; analiz tablolarini election_results() uretir.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ysk-0.1.3.tar.gz.
File metadata
- Download URL: ysk-0.1.3.tar.gz
- Upload date:
- Size: 123.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79fced7b9bc9b1d3a7ffdde4ee362ea16d99002bcbd4958b47c1775437c044a6
|
|
| MD5 |
34f3e7c6899f9410e558e0a45042b5af
|
|
| BLAKE2b-256 |
44fab6bafdc4611f6048a198dbbccd34de8a473cdee75f656ddd20f06ca361d4
|
Provenance
The following attestation bundles were made for ysk-0.1.3.tar.gz:
Publisher:
publish.yml on sencer/ysk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ysk-0.1.3.tar.gz -
Subject digest:
79fced7b9bc9b1d3a7ffdde4ee362ea16d99002bcbd4958b47c1775437c044a6 - Sigstore transparency entry: 1737309219
- Sigstore integration time:
-
Permalink:
sencer/ysk@183485887b0f95410f015be0ad6241df0f2e5d32 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/sencer
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@183485887b0f95410f015be0ad6241df0f2e5d32 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ysk-0.1.3-py3-none-any.whl.
File metadata
- Download URL: ysk-0.1.3-py3-none-any.whl
- Upload date:
- Size: 124.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9792ab07b2fb9facd23a0b189d873740646a2c1ad02544a3d10870857eb70118
|
|
| MD5 |
c66c6734388c4e091e6cc14de3921d30
|
|
| BLAKE2b-256 |
54dc2076cdb0214006fdb574ebcd75476b19897a856f67d80091fb007a446633
|
Provenance
The following attestation bundles were made for ysk-0.1.3-py3-none-any.whl:
Publisher:
publish.yml on sencer/ysk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ysk-0.1.3-py3-none-any.whl -
Subject digest:
9792ab07b2fb9facd23a0b189d873740646a2c1ad02544a3d10870857eb70118 - Sigstore transparency entry: 1737309332
- Sigstore integration time:
-
Permalink:
sencer/ysk@183485887b0f95410f015be0ad6241df0f2e5d32 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/sencer
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@183485887b0f95410f015be0ad6241df0f2e5d32 -
Trigger Event:
release
-
Statement type: