Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ysk-0.1.0.tar.gz (28.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ysk-0.1.0-py3-none-any.whl (25.9 kB view details)

Uploaded Python 3

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

Hashes for ysk-0.1.0.tar.gz
Algorithm Hash digest
SHA256 909429d6b98ebbb926e3b5ce58026e4750acdb99ba663b7cf34a7635119f78ca
MD5 f83cd2e670b1b2b82e22743c5e81b77d
BLAKE2b-256 aa062c196dfcdc0f5c868688049a9014af00eea4634b45f647fe6e23f3b728be

See more details on using hashes here.

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

Hashes for ysk-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2434fa71b2f39902ef7b2aaa0116b9c1a4dfc482d40e8ee35a32ab0598351433
MD5 d5c1d191684395018e2e5c7adc321272
BLAKE2b-256 dcecf68b0b0395b2d3c27df84d7c6872ea6f0847db8effc0acc649ea328d785e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page