Tools for downloading and reshaping Turkish YSK open election data
Project description
ysk
YSK acik servisinden indirilip temizlenmis secim sonuclari.
Bu repo, data/secim.zarr altinda tek bir xarray/zarr veri seti olarak
duzenlenmis YSK sonuclarini icerir. Veri seti; secim tarihi, makam, yer,
sandik ve tercih eksenleriyle 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 ve cinsiyet kirilimi ayni tabloda yer alir.
Ana dosya:
data/secim.zarr
Kurulum
uv sync
Notebook kullanimi icin:
uv sync --group dev
uv run jupyter lab --ip 0.0.0.0
SSH uzerinden baska bir makineden baglaniyorsaniz Jupyter'i 127.0.0.1
yerine 0.0.0.0 ile baslatin ve tarayicida sunucunun yerel IP adresini
kullanin.
En Kolay Kullanim
from ysk import secim
df = secim("2024-03-31", "BBB", il="ISTANBUL", seviye="ilce")
df.head()
Sonuc, analiz icin hazir bir pandas DataFrame'dir:
secmen oy_kullanan gecerli gecersiz AK PARTI CHP ...
il ilce
ISTANBUL ADALAR ... ... ... ... ... ...
ARNAVUTKOY ... ... ... ... ... ...
Varsayilan seviye sandiktir:
df = secim("2024-03-31", "BBB", il="ANKARA", ilce="CANKAYA")
df.head()
Sandik seviyesinde indeks genellikle su alanlardan olusur:
il, ilce, belde, mahalle, sandik_no
Sabit bir secim ve makam secildiginde secim ve makam kolonlari sonuc
tablodan dusurulur.
Secim ve Makam
secim tarih, makam ise ayni tarihteki secim turudur.
secim("2024-03-31", "BBB") # buyuksehir belediye baskanligi
secim("2024-03-31", "BM") # belediye meclisi
secim("2023-05-14", "CB") # cumhurbaskanligi
secim("2023-05-14", "MV") # milletvekilligi
Birden fazla secimi ayni anda alabilirsiniz:
df = secim(
["2019-03-31", "2024-03-31"],
"BBB",
il="ISTANBUL",
ilce="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 = secim("2024-03-31", ["BBB", "BM"], il="ISTANBUL", seviye="ilce")
Seviyeler
seviye parametresi tablonun hangi kirilimda donecegini belirler:
secim("2024-03-31", "BBB", seviye="sandik")
secim("2024-03-31", "BBB", seviye="mahalle")
secim("2024-03-31", "BBB", seviye="belde")
secim("2024-03-31", "BBB", seviye="ilce")
secim("2024-03-31", "BBB", seviye="il")
sandik seviyesi yurt ici sandiklari, gumruk ve ulke satirlarini birlikte
tutar. Daha yuksek seviyeler sandik verisinden gruplanarak hesaplanir.
Il ve Ilce
ankara = secim("2024-03-31", "BBB", il="ANKARA", seviye="ilce")
cankaya = secim("2024-03-31", "BBB", il="ANKARA", ilce="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.
Oy, Secmen ve Cinsiyet
Donen tabloda 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 = secim("2024-03-31", "BBB", il="ISTANBUL", seviye="ilce")
df[["kadin", "CHP"]].corr()
Sadece belirli tercihleri almak icin:
df = secim(
"2024-03-31",
"BBB",
il="ISTANBUL",
seviye="ilce",
tercihler=["CHP", "AK PARTI", "MHP"],
)
Sandik seviyesinde oy ve secmen bilgilerini birlikte kullanmak:
df = secim("2024-03-31", "BBB", il="ISTANBUL", ilce="USKUDAR")
df[["secmen", "kadin", "erkek", "CHP", "AK PARTI"]].head()
Ham Xarray Verisi
Hazir zarr veri setini dogrudan xarray ile acmak icin:
from ysk import ham_veri
ds = ham_veri()
ds
Alternatif:
import xarray as xr
ds = xr.open_zarr("data/secim.zarr")
Ornek secim:
bbb_2024 = ds.sel(secim="2024-03-31").sel(makam="BBB")
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 secim() yardimcisini
kullanmak daha guvenlidir.
Yer Iliskileri
Bazi ilce ve beldeler zaman icinde ayrilmis veya ilceye donusmus olabilir. Bu iliskiler icin:
from ysk import yer_iliskileri
yer_iliskileri().head()
Ornek kolonlar:
il, eski_ilce, yeni_ilce, ilk_belde_secimi, ilk_ilce_secimi, iliski_turu
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 eksenleri olan etiketli bir veri setidir.
Parquet tablo/SQL isleri icin daha uygundur. Bu repoda zarr kanonik veri
formati olarak tutulur; analiz tablolarini secim() uretir.
Gelistirme
uv run ruff check
uv run basedpyright
uv run pytest
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.0.tar.gz.
File metadata
- Download URL: ysk-0.1.0.tar.gz
- Upload date:
- Size: 28.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.11 {"installer":{"name":"uv","version":"0.9.11"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
909429d6b98ebbb926e3b5ce58026e4750acdb99ba663b7cf34a7635119f78ca
|
|
| MD5 |
f83cd2e670b1b2b82e22743c5e81b77d
|
|
| BLAKE2b-256 |
aa062c196dfcdc0f5c868688049a9014af00eea4634b45f647fe6e23f3b728be
|
File details
Details for the file ysk-0.1.0-py3-none-any.whl.
File metadata
- Download URL: ysk-0.1.0-py3-none-any.whl
- Upload date:
- Size: 25.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.11 {"installer":{"name":"uv","version":"0.9.11"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2434fa71b2f39902ef7b2aaa0116b9c1a4dfc482d40e8ee35a32ab0598351433
|
|
| MD5 |
d5c1d191684395018e2e5c7adc321272
|
|
| BLAKE2b-256 |
dcecf68b0b0395b2d3c27df84d7c6872ea6f0847db8effc0acc649ea328d785e
|