Volby 2006

Školení, která pořádám

Asi se nenajde nikdo, komu by se líbil výsledek letošních voleb, protože ať povolební vyjednávání dopadnou jakkoliv, bude to s největší pravděpodobností znamenat jenom zdržení na cestě, kterou Česká republika kráčí, ať už má vést kamkoliv. Zajímalo mě, jak se hlasy voličů přepočítávají na poslanecká křesla, což je poměrně přehledně popsáno na stránkách ČSÚ. Na serveru Volby.cz jsou potom k dispozici nejen souhrnné výsledky prezentované v médiích, ale i kompletní volební výsledky do posledního hlasu, na základě kterých se dá odpovědět na různé otázky co by, kdyby.

Základní výpočet

Algoritmizace d'Hondtovy metody s dosazením konkrétních čísel vypadá takto:

<?php
$kraje = array("Praha", "Středočeský", "Jihočeský", "Plzeňský", "Karlovarský", "Ústecký", "Liberecký", "Královéhradecký", "Pardubický", "Vysočina", "Jihomoravský", "Olomoucký", "Zlínský", "Moravskoslezský");
$mandaty = array(25, 23, 13, 11, 5, 14, 8, 11, 10, 10, 23, 12, 12, 23); // celkový počet mandátů v jednotlivých krajích
$hlasy = array( // počet hlasů v jednotlivých krajích
    "ODS" => array(317224, 243012, 123804, 105391, 49189, 130365, 83647, 111466, 91113, 76393, 186779, 101151, 101376, 171565),
    "ČSSD" => array(152962, 190607, 102833, 91606, 44887, 132895, 63181, 89204, 90268, 97568, 200619, 118334, 106481, 247382),
    "SZ" => array(60384, 37219, 19924, 17090, 9206, 22616, 20646, 19819, 17148, 13514, 37771, 18398, 16224, 26528),
    "KSČM" => array(51925, 79964, 45099, 40578, 20323, 60175, 24823, 34093, 33956, 40480, 83687, 49026, 35998, 85201),
    "KDU-ČSL" => array(31820, 30207, 27630, 16338, 4723, 8365, 9131, 19893, 24023, 33587, 67865, 27609, 41663, 43852),
);
foreach ($kraje as $kraj => $kraj_text) { // postupně pro všechny kraje
    $podil = array();
    for ($i=1; $i <= $mandaty[$kraj]; $i++) { // vypočte se podíl hlasů pro jednotlivé strany
        foreach ($hlasy as $strana => $val) {
            $podil["$strana:$i"] = $val[$kraj] / $i;
        }
    }
    arsort($podil);
    for ($i=1; $i <= $mandaty[$kraj]; $i++) { // křesla se přiřadí stranám podle hodnoty podílů
        $kresel[preg_replace('~:[0-9]+$~', '', key($podil))]++;
        next($podil);
    }
}
?>
ODS81
ČSSD74
KSČM26
KDU-ČSL13
SZ6

Celorepublikové sčítání

V první řadě mě zajímalo, jak by výsledky dopadly v případě, že by se mandáty nerozdělovaly po krajích, ale celorepublikově, což by poměrnému způsobu zastoupení odpovídalo podle mě lépe. V tom případě by poměrně přesvědčivě vyhrála pravice poměrem 104:96 křesel:

<?php
$celkem = array( // řazeno podle čísla strany
    "ODS" => 1892475,
    "ČSSD" => 1728827,
    "SZ" => 336487,
    "KSČM" => 685328,
    "KDU-ČSL" => 386706,
);
$podil = array();
foreach ($celkem as $strana => $hlasy) {
    for ($i=1; $i <= 200; $i++) {
        $podil["$strana:$i"] = $hlasy / $i;
    }
}
arsort($podil);
$kresel = array();
for ($i=1; $i <= 200; $i++) {
    $kresel[preg_replace('~:[0-9]+$~', '', key($podil))]++;
    next($podil);
}
?>
ODS76-5
ČSSD69-5
KSČM27+1
KDU-ČSL15+2
SZ13+7

Koalice

Co kdybychom měli jen jednu levicovou a jednu pravicovou stranu (přesněji řečeno jednu spolupracující s komunisty a druhou ne)? Opět poměrně přesvědčivý výsledek 105:95 ve prospěch pravice.

<?php
$hlasy2 = array();
foreach ($kraje as $kraj => $kraj_text) {
    $hlasy2["pravice"][$kraj] = $hlasy["ODS"][$kraj] + $hlasy["SZ"][$kraj] + $hlasy["KDU-ČSL"][$kraj];
    $hlasy2["levice"][$kraj] = $hlasy["ČSSD"][$kraj] + $hlasy["KSČM"][$kraj];
}
?>

Do tohoto výsledku by se navíc daly započítat i menší strany, což by pravici ještě posílilo.

Těsnost výsledků

Dále mě zajímalo, jak těsně výsledky vlastně dopadly, neboli kolik nejméně voličů mohlo rozhodnout o jiném složení sněmovny. Vyšlo mi, že stačilo, kdyby v Jihočeském kraji přišlo o 337 voličů ČSSD více (což by se celorepublikově projevilo ziskem 0.006 % hlasů) a levice by získala 101 křesel. K vítězství pravice by bylo zapotřebí nejméně 1127 hlasů pro KDU-ČSL v Moravskoslezském kraji. Při takto komplikovaném systému přepočtu křesel je skutečně důležitý každý hlas.

<?php
foreach ($kraje as $kraj => $kraj_text) {
    $podil = array();
    for ($i=1; $i <= $mandaty[$kraj]; $i++) {
        foreach ($hlasy as $strana => $val) {
            $podil["$strana:$i"] = $val[$kraj] / $i;
        }
    }
    arsort($podil);
    for ($i=1; $i <= $mandaty[$kraj]; $i++) {
        $posledni = key($podil);
        next($podil);
    }
    $min = null;
    while ($val = current($podil)) {
        $key = key($podil);
        $i = preg_replace('~^.*:~', '', $key);
        if (preg_match('~^(ČSSD|KSČM)~', $key) xor preg_match('~^(ČSSD|KSČM)~', $posledni)) {
            // kolik hlasů by bylo zapotřebí na sesazení strany, která dostala poslední mandát
            if (!isset($min) || ($podil[$posledni] - $val) * $i < $min) {
                $min = ($podil[$posledni] - $val) * $i;
                $min_key = $key;
            }
        }
        next($podil);
    }
    echo "$kraj_text\t$min\t$min_key\n";
}
?>

Paradoxní také je, že i kdyby k volbám přišel stejný počet lidí a všichni zůstali na stejné straně barikády, výsledek voleb by také mohl být zásadně jiný. 337 hlasů, které ČSSD chyběly v Jihočeském kraji, by ve stejném kraji klidně mohli postrádat komunisté, které by to o křeslo nepřipravilo. Podobných případů je samozřejmě celá řada na obě strany.

Pětiprocentní hranice

Mnoho lidí si také stěžuje na pětiprocentní hranici, kterou když strana celorepublikově nedosáhne, tak se z dalšího počítání vylučuje. Převládající názor je, že tato hranice znevýhodňuje malé strany, skutečnost je ale jiná – při rozdělení do krajů jsou malé strany znevýhodněny samy od sebe a tato hranice tak omezuje spíše regionální strany, které by v několika málo krajích křeslo získaly, na celorepublikové úrovni by toho ale nejspíš moc nesvedly.

Při zrušení této hranice by došlo k jediné změně – v Praze by místo ODS získali jedno křeslo Evropští demokraté, rozložení sil by zůstalo stejné.

<?php
$hlasy = array( // počet hlasů v jednotlivých krajích
    "SZR" => array(2039, 2998, 1444, 1783, 967, 1771, 1437, 1770, 1447, 1028, 1698, 1627, 1405, 3414),
    "ČHNJ" => array(0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0),
    "BPS" => array(1073, 1559, 417, 356, 207, 452, 305, 380, 323, 293, 589, 183, 335, 425),
    "LiRA" => array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0),
    "PaS" => array(937, 1992, 694, 1084, 404, 1387, 460, 688, 637, 724, 1015, 1073, 617, 1044),
    "NEZ" => array(1763, 3990, 2402, 2184, 441, 2887, 2053, 1652, 2381, 976, 2850, 3295, 1966, 4190),
    "ČP" => array(23, 82, 0, 0, 0, 124, 0, 0, 0, 0, 45, 41, 38, 42),
    "KČ" => array(1083, 989, 559, 604, 206, 418, 294, 593, 260, 314, 821, 337, 395, 420),
    "ODS" => array(317224, 243012, 123804, 105391, 49189, 130365, 83647, 111466, 91113, 76393, 186779, 101151, 101376, 171565),
    "ČSSD" => array(152962, 190607, 102833, 91606, 44887, 132895, 63181, 89204, 90268, 97568, 200619, 118334, 106481, 247382),
    "SNK ED" => array(23386, 13055, 6570, 5912, 2312, 5372, 4304, 9126, 6641, 5525, 7343, 3821, 6390, 11967),
    "US-DEU" => array(1638, 1854, 1008, 973, 725, 1234, 753, 1431, 936, 931, 1495, 764, 1089, 1626),
    "HOB" => array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1375),
    "PB" => array(2052, 2420, 1393, 1339, 846, 1367, 1139, 1712, 1104, 1110, 2426, 1094, 929, 1451),
    "4 VIZE" => array(313, 474, 234, 233, 121, 218, 257, 224, 191, 155, 201, 186, 116, 186),
    "ČSNS2005" => array(552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 835, 0, 0, 0),
    "M" => array(0, 0, 377, 0, 0, 0, 0, 0, 445, 622, 4677, 2650, 2289, 1492),
    "SZ" => array(60384, 37219, 19924, 17090, 9206, 22616, 20646, 19819, 17148, 13514, 37771, 18398, 16224, 26528),
    "H.S." => array(857, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
    "KSČM" => array(51925, 79964, 45099, 40578, 20323, 60175, 24823, 34093, 33956, 40480, 83687, 49026, 35998, 85201),
    "Koal_ČR" => array(554, 1132, 421, 560, 259, 580, 474, 603, 718, 614, 522, 598, 296, 809),
    "NS" => array(973, 1257, 524, 495, 532, 861, 568, 641, 368, 344, 542, 478, 282, 1476),
    "FiS" => array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 0, 0),
    "KDU-ČSL" => array(31820, 30207, 27630, 16338, 4723, 8365, 9131, 19893, 24023, 33587, 67865, 27609, 41663, 43852),
    "NEZ/DEM" => array(2665, 5723, 1486, 1912, 1296, 2821, 1538, 2056, 1582, 1403, 5171, 2636, 1592, 4827),
    "SRŠ" => array(2272, 1513, 568, 611, 473, 612, 500, 580, 380, 416, 1026, 548, 452, 928),
);
?>

Při celorepublikovém sčítání by výsledek byl mnohem zajímavější – 107 pravice, 93 levice:

<?php
$celkem = array(
    "SZR" => 24828,
    "ČHNJ" => 216,
    "BPS" => 6897,
    "LiRA" => 253,
    "PaS" => 12756,
    "NEZ" => 33030,
    "ČP" => 395,
    "KČ" => 7293,
    "ODS" => 1892475,
    "ČSSD" => 1728827,
    "SNK ED" => 111724,
    "US-DEU" => 16457,
    "HOB" => 1375,
    "PB" => 20382,
    "4 VIZE" => 3109,
    "ČSNS2005" => 1387,
    "M" => 12552,
    "SZ" => 336487,
    "H.S." => 857,
    "KSČM" => 685328,
    "Koal_ČR" => 8140,
    "NS" => 9341,
    "FiS" => 574,
    "KDU-ČSL" => 386706,
    "NEZ/DEM" => 36708,
    "SRŠ" => 10879,
);
?>
ODS73
ČSSD67
KSČM26
KDU-ČSL15
SZ13
SNKED4
NEZ/DEM1
NEZ1

Závěr

Žádný systém asi nebude z každého úhlu pohledu spravedlivý. I v Americe vládne prezident, který dostal méně hlasů než jeho protivník. Ale mám pocit, že současný systém, především fakt rozdělení po krajích, vede k větší náhodnosti (a tím i nespravedlnosti) výsledků.

Jakub Vrána, Řešení problému, 7.6.2006, diskuse: 29 (nové: 0)

Diskuse

qwe:

Kromě amerického systému (kde v roce 2000 pro Gora hlasovalo více lidí než pro Bushe, ale kvůli různému počtu lidí na volitele v jednotlivých státech USA vyhrál nakonec Bush) bych připomněl i systém britský, kde např. může mít v parlamentu díky nestejné velikosti volebních okrsků dvě třetiny křesel strana, která dostane třeba o 2 miliony hlasů méně než strana, která má jen třetinu křesel.

V Itálii zase strana, která vyhraje, bez ohledu na to jak těsně, automaticky dostává 55% křesel v parlamentu.

ikona Jakub Vrána OpenID:

Italský systém mi přijde docela dobrý, já jsem spíš příznivce silných vlád. Dá se směřovat tam nebo onam, ale přešlapování na místě mi přijde ze všeho nejhorší.

qwe:

Já bych byl taky pro většinový systém, i když není moc demokratický.

Viz třeba volby v Británii:

1983 - pro Thatcherovou 13 milionů voličů = 397 mandátů, pro ostatní 17 milionů = 250 mandátů

http://en.wikipedia.org/wiki/United_Kingd…_election%2C_1983

Nebo poslední volby 2005:

- pro Blaira 9,5 milionů = 356 mandátů
- pro konzervativce 8,7 milionu = 198 mandátů
- pro liberály 5,9 milionu = 62 mandátů
- pro opozici tak hlasovalo 14,5 milionu lidí

Není to moc demokratické, ale generuje to silnou a stabilní vládu

http://en.wikipedia.org/wiki/United_Kingd…_election%2C_2005

gp:

IMHO většinový systém popírá účel parlamentu. Jeho účelem je aby se domluvili zástupci všech voličů a ne aby jedna strana získala převahu.

Mirek:

S tím souhlasím ... ano účelem parlamentu je nalézat taková řešení, která jsou přijatelná pro názorové skupiny, které poslanci zastupují. Ono to nemusí vést jen k přešlapování na místě. V technice musí také člověk respektovat mnoho protichůdných požadavků a přesto lze přicházet s progresívními řešeními. Takže ať si politici namáhají hlavu. ... Ono bude myslím za této situace více zřejmé, kdo z nich na své řemeslo opravdu má :o)

tygr007:

Ukolem voleb je nagenerovat vladu, ktera muze jednak vladnout podle predvolebnich slibu a druhak nest zodpovednost za uspesnost sveho projektu. Tohle nas pomerny system neumoznuje, nutnost povolebnich koalic zcela zlikviduje zodpovednost jak za predvolebni sliby tak za vysledky vladnuti. Dale misto cest k reseni problemu definovanych projektem vlady, resi se co si kdo mysli o cim vyroku a jestli to neznemozni jejich vzajemnou plichtu, coz politicke kulture neprospiva.

Jarin:

V tomto pripade je ale velke riziko, ze tech 55% kresel ziska nejaka extremisticka strana (viz Meciar na Slovensku mel zatim nejvic procent v kazdych volbach).

Sairon:

Velmi zajímavé, taky mě přesný systém přepočítávání na mandáty zajímal.
Nicméně teď uvidíme, jestli se tato "perfektně" zvolená vláda nějak uchytí, nebo si tenhle skript budu moct vyzkoušet za čtyři měsíce v praxi :)

ikona dgx:

Na tom je pěkně vidět, že skutečně každý hlas rozhoduje.

RadimH:

Líbí se mi, jak jsi vtipně napsal komentář k volbám a zároveň přidal nezbytné PHP :-).

Leo:

Osobne nejak vubec nevidim duvod, aby volby do celostatniho organu nebyly celostatni - kazda strana da seznam kandidatu bez urceneho poradi (resp. v abecednim), kandidatka je stejna pro celou republiku, a volic MUSI vybrat konkretniho cloveka nebo dva. Uzemni cleneni vede k absurdnostem typu Cesi v USA volici za Jihocesky kraj... A v kazdem organu, kde se hlasuje by mel byt uzakonen lichy pocet clenu. Leo

magelan:

V předchozí diskuzi se mi líbí tyhle myšlenky: za prvé bezva nápad, aktuální volby a do toho PHP (smekám, fakt, špičkový nápad). A za druhé ta myšlenka s lichým počtem členů. Veškeré ostatní možnosti totiž jsou více či méně nedemokratické (nespravedlivé,nesprávné, říkejte si tomu jak chcete). (neříkám, že současný systém je ideál, to ne, je to jenom jedna z možných ale nesprávných variant - svým způsobem jsou nesprávné/nespravedlivé všechny. - ale kdyby měl parlament 201 členů, nebude nikdy pat...)

4Key:

Radši 199, ať je tam méně lidí placených z naších daní ;)

tygr007:

Potom by k patu stacilo prebehnuti jednoho poslance, stabilitu 101ckove vlady snad jeste pamatujeme ...

Cesta ven je bohuzel pouze vetsinovy volebni system.

Ivan:

jo, a názor 35% lidí bude určovat životy 100%

libchavak:

Lichý počet mándátů neznamená, že nemůže dojít k patové situaci. V současné době se vychází z toho, že existuje jedna ultra-strana(ksčm). Co když se dostane do sněmovny jiná ultra-strana(např.Republikání), se kterou se nebude chtít bavit žádná z velkých stran, a shodou okolností bude mít tato ultra-strana lichý počet křesel?

Antirux:

Moc oceňuji super vysvětlení toho, jak málo hlasů dokáže ovlivnit výsledek voleb. Tohle by se mělo využít při příštích volbách k propagaci aby lidi šli volit. Něco na způsob "V roce 2006 337 hlasů mohlo změnit výsledek voleb. Chcete být jedním z nich? Jděte volit!"

Robert Němec:

Je rozdíl mezi vládou a parlamentem. Osobně jsem pro silnou vládu (většinový systém nebo klidně monarchismus :-)) a opravdu poměrný (klidně celorepublikový) parlament.

Ivan:

"jenom zdržení na cestě, kterou Česká republika kráčí, ať už má vést kamkoliv" - to mi silně připomíná Návštěvníci z mlčící planety (volně): "...On říká, že neví co se jeho rase přihodí, ale chce aby se jí toho přihodilo co nevíce..." :)

bahara:

Uvědomujete si, že z toho co Jakub napsal (mimochodem s tím PHP to byl skvělý nápad) vyplývá, že politiku v Čechách mohli klidně změnit krajané v cizině. Neboť hlasovali pravě za ten Jihočeský kraj?

mrzout:

"Asi se nenajde nikdo, komu by se líbil výsledek letošních voleb"

ale najde viz: http://www.abclinuxu.cz/blog/mrzutej/2006/6/5/135731
:)

Jinak myslim, ze stabilni vladu by mohla byt konstitucni monarchie. Je to zhruba stejne demokraticka alternativa k vetsinovemu volebnimu systemu. V podstate kazde rozhodnuti ziska tretinovou podporu, ktera je zhruba potrebna i pro vitezstvi ve volbach, tak proc by ho nemohl udelat kral.

Parlament pak muzeme volit klidne pomerne, s pravem navrhovat zakony, bez moznosti monarchu prehlasovat. Pripadne vyhlasit referendum, ktere pri bude schopne rozhodnuti monarchy prehlasovat, ale minimalne 65% ucastniku se na tom musi shodnout.

Zni to absurdne? Proc? Je to stabilnejsi prostredi a zaroven demokratictejsi.

p.s. je to zert, ja jsem naopak pro pomerny system bez limitu pro vstup do parlamentu

Vojta:

add Celorepublikové sčítání: "V tom případě by poměrně přesvědčivě vyhrála pravice poměrem 104:96 křesel"

To je poněkud zavádějící informace... protože do počtu mandátů by vyhrála levice v poměru 109:91 nebo alespoň 96:91

Strana zelených je totiž stěží pravicovou stranou... Všude jinde v Evropě je to strana levice...

RejpalCZ:

Čeští voliči strany zelených jsou spíše pravicovými voliči. Program české strany zelených má blíže k pravici než levici.
Nesrovnávejte nás s Evropou. Ve Francii je pravice levicovější než SOCDEM. V celé Evropě je komunistická strana běžnou demokratickou stranou. Jen u nás je to strana hlásící se ke stalinismu.
V USA jsou liberálové levičáci, z pohledu Evropy jsou liberálové stále ještě hodně vpravo.

Vojta:

Nejde o to, jací jsou voliči strany zelených, jde o program... a ten má určitě blíž k čssd.

ikona Jakub Vrána OpenID:

Na jednom místě článku jsem to podrobněji rozvedl: "jednu levicovou a jednu pravicovou stranu (přesněji řečeno jednu spolupracující s komunisty a druhou ne)". Pojem levice a pravice používám jen z nedostatku výstižnějších jednoslovných pojmů.

Ale v zásadě souhlasím i s Rejpalem.

Jakub Šolc:

Zdravím autora stránek na stejné téma jako moje stránka

http://math.cas.cz/solc/volby

K algoritmu: ani na stránkách ČSÚ není popsán tak detailně, jak je potřeba. Viz zákon 204/2000 par. 48-51.
Např. se provádí takový nelogický krok, že se podíly zaokrouhlují na dvě desetinná čísla nahoru a v případě shody se porovná (celkový) počet hlasů, nikoli poměr hlasů/mandát. V těchto případech by Váš algoritmus selhal.
Ale uvedené počty hlasů mi vycházejí stejně.

Btw: Soudruzi z IDNES někde udělali chybu, když jim vyšlo 338 pro ČSSD v JČ.

ikona Jakub Vrána OpenID:

Díky za podrobnější a další zajímavé informace. Nejvíc mě dostalo, že kdyby ODS volilo v Moravskoslezském kraji míň lidí, dostala by tato strana celkem o jedno křeslo víc. Současný systém je vážně absurdní.

Jan Vaněk jr.:

Nikoli, chybu udělal Jakub Šolc (takže nemůžu moc věřit ani zbytku jeho údajů). Vizte http://www.volby.cz/pls/ps2006/ps532?xjazyk=CZ&xkraj=3
Kdyby měla ČSSD víc jen o 337 hlasů, měla by jich celkem 103 170. Pátý d'Hondtův podíl je přesně 20 634, tedy stejně, kolik činil šestý ODS - a pak "rozhoduje o jejich pořadí absolutní počet platných hlasů odevzdaných pro politický subjekt ve volebním kraji", tedy poslední mandát by pořád získala ODS a až 338. hlas pro ČSSD by to zvrátil.

Jan Vaněk jr.:

Čistě pro pořádek: seznam opraven, mohu ho doporučit.

Vložit příspěvek

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2016 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.