Původně jsem chtěl tento příspěvek pojmenovat "Jak vypočítat docházku poslance snadno a rychle", ale pak jsem si uvědomil, že pro uživatele, který nemá alespoň základní znalost práce s databázemi, to může být trochu pracné. Konkrétně je potřeba umět následující triky:

  • rozdělování datového řetězce do sloupců podle určitého znaku nebo znaků
  • slučování tabulek podle identifikátoru
  • řazení sloupců podle velikosti v určitém sloupci nebo sloupcích
  • funkce počet neprázdných buněk
  • funkce počet neprázdných buněk podmíněný výskytem specifického znaku nebo znaků
  • převod tabulky v "long form" na "wide form" pomocí makra

Všechny tyto operace kromě slučování buněk podle identifikátoru zvládne Microsoft Excel. Pokud nechcete investovat do jiného softwaru, můžete ke slučování tabulek použít třeba Google Fusion Tables. Já tabulky slučuji pomocí programovacího jazyka R, protože ho používám pro statistickou analýzu. Pokud ale hledáte nástroj pouze na slučování, je Rko prakticky nejhorší možná varianta.

Nejprve je potřeba sehnat oficiální výsledky všech hlasování ve Sněmovně za daný časový úsek. Až do minulého roku jsme museli v KohoVolit.eu data získávat z webu Sněmovny pomocí web scrappingu, tedy strojového stahování obsahu webových stránek. Vytvoření scrapperu vyžaduje znalost programování a občas i následnou údržbu.

Loni se nám ale díky laskavé pomoci poslankyně Lenky Andrýsové podařilo přesvědčit Poslaneckou sněmovnu, aby výsledky hlasování i další data sama poskytovala ve formě tzv. "database dump". Dnes si tedy lze například stáhnout výsledky všech hlasování v několika málo souborech, což běžnému uživateli práci s těmito daty podstatně ulehčuje.

Abychom mohli sestavit přehled hlasování, musíme "slepit" dohromady několik oddělených souborů nacházejících se zde na základě specifických identifikátorů. Pro přehled docházky v období leden - červen 2013 vypadá mapa tohoto postupu takto:

Žluté soubory jsou umístěny v ZIPu s názvem "hl-2010ps" a oranžové soubory v ZIPu s názvem "poslanci". Datový soubor s výsledky hlasování "hl2010h2" má tři sloupce. První z nich obsahuje ID poslance, druhý obsahuje ID hlasování a třetí obsahuje výsledek hlasování.

Data se nachází v tzv. "long form" - nejprve je uveden výsledek prvního hlasování u všech 200 poslanců, pak následuje výsledek dalšího hlasování u všech 200 poslanců atd. Aby se s daty dalo pracovat, je potřeba je převést do tzv. "wide form", tedy do tabulky, kde jeden řádek odpovídá jednomu poslanci a jeden sloupec jednomu hlasování. K tomu lze použít například toto makro:

  • Sub main()
  • For k = 1 To HODNOTA1
  • Dim i As Integer
  • Dim j As Integer
  • i = CInt(Cells(k, HODNOTA2).Value)
  • j = CInt(Cells(k, HODNOTA3).Value)
  • Cells(i, j) = Cells(k, HODNOTA4).Value
  • Next k
  • End Sub

Vysvětlivky:

  • HODNOTA1 - Počet řádek v tabulce hlasování
  • HODNOTA 2 - Pořadové číslo sloupce, v němž jsou zapsány souřadnice řádku výsledné tabulky ve "wide form"
  • HODNOTA 3 - Pořadové číslo sloupce, v němž jsou zapsány souřadnice sloupce výsledné tabulky ve "wide form"
  • HODNOTA 4 - Pořadové číslo sloupce, v němž jsou zapsány hodnoty buněk výsledné tabulky ve "wide form"

Ze souboru "hl2010s" následně natáhnete přes ID hlasování informace o hlasování, jako je název, číslo schůze, datum a čas atd. Získat identitu poslanců je trochu obtížnější, protože každý jednotlivý poslanec má dvě ID - ID poslance a ID osoby. ID osoby mají navíc i další lidé (např. členové vlády, kteří nejsou poslanci). Vtip je v tom, že jméno a příjmení poslance se nachází v tabulce "osoby", která neobsahuje ID poslance, ale jen ID osoby. Obě ID lze ale snadno propojit pomocí tabulky "poslanci".

Ještě bych mohl popsat, jak k poslancům přiřadit příslušnost ke klubu, ale to je ještě složitější, než získání jména a příjmení. Proto je jednodušší nakopírovat příslušnost z webu Sněmovny.

Tím máme data připravena. Jako obvykle zabírá příprava dat asi 70 % veškerého potřebného času. Nyní již můžeme snadno vypočítat účast. Zbývá jen rozhodnout, co vlastně účastí na hlasování myslíme. Není to totiž tak jednoduché, jak by se na první pohled zdálo.

U jednoho hlasování může být u jednoho poslance uvedena jedna ze šesti hodnot:

  • hlasoval pro (v datovém souboru označeno jako "A")
  • hlasoval proti ("B")
  • zdržel se ("C")
  • byl přihlášen, ale nestiskl žádné tlačítko ("F")
  • nebyl přihlášen a nebyl omluven ("@")
  • nebyl přihlášen a byl omluven ("M")

Pokud poslanec nebyl členem Sněmovny celé sledované období, vyplatí se doplnit ještě sedmou hodnotu "nebyl poslancem" (např. "NA").

V KohoVolit.eu počítáme jako absenci poslední tři možnosti ("F", "@", "M"). Poslední dvě ("@", "M") jsou běžné absence, tedy situace, kdy poslanec chybí celý den nebo jeho podstatnou část. Rozdíl spočívá v tom, zda se řádné omluvil. Počítání možnosti "byl přihlášen, ale nestiskl žádné tlačítko" ("F") za absenci je kontroverzní, poslanec totiž může být fyzicky přítomen ve Sněmovně, např. si pouze odběhne na toaletu a hlasování nestihne.

Tuto možnost řadíme mezi absence ze dvou důvodů: Zaprvé se poslanec nehlasováním zbavuje své hlavní funkce, kterou je tvorba právního řádu. Zadruhé nelze poznat, že se poslanec pouze přihlásil a následně ze Sněmovny odešel. Z dat vyplývá, že se to stává poměrně běžně - často vidíme, že než poslanec začne být omluven nebo nepřihlášen, u několika hlasování je ještě stále přihlášen, ale nestiskne žádné tlačítko.

Samotnou účast už spočítáme snadno pomocí funkce. V Microsoft Excel by to bylo např.:

=(POČET2(ROZSAH)-COUNTIF(ROZSAH;ROZSAH;"NA")-COUNTIF(ROZSAH;ROZSAH;"@")-COUNTIF(ROZSAH;ROZSAH;"M")-COUNTIF(ROZSAH;ROZSAH;"F"))/(POČET2(ROZSAH)-COUNTIF(ROZSAH;ROZSAH;"NA"))

Ještě upozorním na jednu drobnost: Na webu Sněmovny se na stránkách s výsledky hlasování (např. zde) zobrazuje možnost "byl přihlášen, ale nestiskl žádné tlačítko" jako "zdržel se", ačkoli se jedná o dva různé výsledky hlasování. Ptal jsem se na to adminů webu a ti mi řekli, že se obě možnosti při zobrazování dat nerozlišují, protože se v obou případech počítají do kvóra.