Migracija podataka o biračkim mestima

ps_regions.json  →  polling_stations.json  · interaktivni pregled relacija, izvođenja mapiranja i ručne provere

Dve strukture, jedan ključ

Stari fajl je normalizovan — pet tabela povezanih celobrojnim ključevima. Novi je denormalizovan — cela hijerarhija je ugnežđena u svaki zapis. Spajanje se radi isključivo preko polja id na nivou biračkog mesta.

Staro — ps_regions.json

Novo — polling_stations.json

Ključ: id se poklapa za svih zapisa (0 nestalih, 1 dodat). To je jedini ID koji se prenosi direktno.

Dokaz da je id isti entitet

Svaka provera poređena je sa nultim modelom — isti zapisi, ali nasumično upareni. Nulti model pokazuje kako izgleda rezultat kada stvarne veze nema.

Provera Po idNasumično Vizuelno

Obim po nivoima

NivoStaro NovoNapomena

Kako je nastalo mapiranje opština

Ovo je odgovor na pitanje „kako program zna šta ide sa čim". Odgovor: ne zna i ne pogađa. Nikada ne poredi opštine međusobno — samo čita dva podatka koja već stoje zapisana za isto biračko mesto.

Spoji biračka mesta po id. Ovo je jedini korak koji zahteva poverenje — i jedini koji je posebno dokazan.
Za svaki spojeni par pročitaj staru opštinu (municipality) i novi lokalitet (locality.id).
Zabeleži taj par kao jedan glas i prebroj glasove.
Ako je za jednu opštinu izašao samo jedan lokalitet → čista veza. Ako ih je izašlo više → podela, obradi ručno.

Isprobaj na stvarnim podacima

Zašto se sme verovati koraku 1

Da rezonovanje ne bi bilo kružno („ID je tačan jer se atributi slažu, a atribute poredimo po ID-u"), postoji druga, potpuno nezavisna provera: spajanje po otiskunaziv + adresa + broj birača — koje ne čita id ni sa jedne strane.

Rezultat: dva potpuno nezavisna postupka daju identične parove na svim jednoznačno rešivim zapisima. Nula neslaganja. Preostala dva zapisa su stvarne izmene sadržaja u novom izvoru — prikazana su ispod.
id StaroNovoObjašnjenje

Kontrola smisla: da li su uparene jedinice zaista isto mesto?

Nezavisno od brojeva, upoređeni su i nazivi svih izvedenih veza.

Ručna provera: staro naspram novog

Pretraži po ID-u, nazivu, adresi ili lokalitetu — ili uzmi nasumično biračko mesto. Klik na red otvara poređenje polje po polje i, po želji, sirove JSON zapise iz oba fajla.

idNaziv LokalitetBirači PomerajOtisak

Prikazano prvih 300 rezultata. Kolona „Otisak" pokazuje da li je zapis nezavisno potvrđen spajanjem po nazivu i broju birača, bez korišćenja id.

Mapiranje polja

Kompletna tabela: koje staro polje odgovara kom novom i kako se prenosi.

direktno — kopira se izvedeno / preslikavanje novo polje ne mapirati / gubi se
Staro poljeNovo polje StatusNapomena

ID zamka — isti broj, drugo mesto

Najčešći izvor grešaka. Stari municipality i novi locality.id su potpuno različiti brojevni prostori. Ako ih tretiramo kao isti, biračka mesta tiho sele preko cele Srbije — bez ijedne prijavljene greške.

Unesi broj i uporedi šta znači u oba fajla
Brojevi se poklapaju na svega zapisa — i to čistom slučajnošću.

Nekoliko primera

Broj Stara opštinaNovi lokalitet

Pet ID prostora

ID prostorStaro NovoKako se prenosi

Opština → lokalitet

191 opština → 193 lokaliteta. Kolona Potvrda pokazuje koliko biračkih mesta potvrđuje svaku vezu; klik na red prikazuje primere za ručnu proveru.

Stari idStara opština Novi idNovi lokalitet PotvrdaTip

Okruzi: 32 → 30

Preslikavanje 1:1 po nazivu, uz tri izuzetka.

Stari okrug Novi countyPotvrda Napomena

Regioni: 4 → 6 — druga definicija

Stara podela je naša interna; nova su zvanični statistički regioni. Stari „Centralna Srbija" deli se na tri nova regiona — ne postoji ispravno 1:1 preslikavanje.

Staro (4)

Novo (6)

control_region — jedino bez zamene

Naših 6 kontrolnih regiona ne postoji u novom fajlu i ne može se izvesti iz novog regiona — te dve podele se ukrštaju.

Kontrolni region Rasipa se po novim regionima

Pomeraj koordinata

Koliko su se pozicije biračkih mesta promenile između dva izvora.

Raspodela pomeraja

Popunjenost koordinata

Izvor koordinata (novi fajl)

Popunjenost novih polja

Spajanje po id vs nasumično uparivanje