finální projekt
Výzkumné otázky
Jak si vedla ve volbách do PS 2025 strana Volt?
- Jakého souhrnného procentuálního zisku strana dosáhla?
- Který kraj zajistil straně největší podíl hlasů?
- Která obec zajistila straně největší podíl hlasů?
- Ve kterých obcích dosahuje strana nadprůměrných výsledků (>1% hlasů)?
- Jaká je korelace mezi volebním výsledkem Pirátů a Voltu napříč okrsky/obcemi?
- Kolik % celkových hlasů Voltu pochází z krajských měst?
Finální výstup
🔗 ZIP se všemi soubory
Nástroje
- Google Colab na práci s jupyter notebooky
- Google Sheets a Inkscape na zpracování grafů
- Google Slides na finální podobu prezentace
Postup
Příprava a analýza dat
- Získání dat z Volby.cz - Otevřená data pro volby do Poslanecké sněmovny Parlamentu ČR 2025 - Český statistický úřad | ČSÚ
- Jednak samotné výsledky voleb, druhak číselníky k přiřazení názvů obcí a krajů k jejich kódům
- Původní datová sada obsahovala jeden řádek za hlasy každé volební strany per okrsek (necelých 200 tisíc řádků). Před samotnou analýzou jsem si pomocí pandas udělala pivot table s potřebnými údaji, řádek per obec. Bylo potřeba
- přiřadit ke kódům obcí jejich názvy
- sloučit data do formátu řádek = obec, tak, aby počty hlasů/% voltu/pirátů byly v příslušných sloupcích
- VO1 - stačilo sečíst hlasy pro Volt přes všechny obce a vydělit celkovým počtem hlasů
- VO2 - seskupení (groupby) podle kraje, suma hlasů pro Volt, seřazení od největšího
- VO3 - seřazení obcí podle počtu hlasů pro Volt, vybrání top 15
- VO4 - filtr obcí kde VOLT_PCT > 1
- VO5 - Pearsonův korelační koeficient mezi procenty Pirátů a Voltu napříč všemi obcemi
- VO6 - definovala jsem si seznam kódů krajských měst, vyfiltrovala je z dat a sečetla jejich hlasy pro Volt
Zpracování, vizualizace
- Při vizualizaci jsem se rozhodla imitovat vizuální identitu Voltu, využila jsem k tomu prvky z jejich webové stránky
- U grafů, zejména sloupcových, jsem se rozhodla jít cestou největšího minimalismu (oproti úkolu v powerbi), protože vizualizace spíše dokreslují informaci, kterou dává prezentace
- výzkumné otázky dole jsou spíše pro pohodlí opravujícího
- VO4 byla vlastně velmi špatně položená, na výčtu obcí není nic insightful. Pokusila jsem se tedy spíše najít společné jmenovatele a kuriozitu jako Opolany
- VO5 byla ještě naivnější, doufala jsem že najdu nějakou korelaci. Možná by bylo potřeba podívat se detailněji na velikosti měst atd…
poslední a předposlední úkol
PowerBI & vizualizace
Obecné principy
Jedna stránka = jedno téma. Každá page má svůj jasný komunikační cíl, který nechci rozmělňovat.
Slider na rok chci vlastně všude. Minimálně pro mě jako pro člověka, co s PBI nikdy nepracoval je neintuitivní, že filtr nemusí fungovat vždy napříč celým projektem. Vždy je na stejném místě, konzistence a tak..
Nadpisy komunikují konkrétní sdělení grafu, ne jen popis dat. Čtenář má vědět, co si z grafu odnést.
Popisky grafů nechávám v pozadí – malé písmo, šedá barva. Jsou tam pro kontext a kredibilitu, ale nemají krást pozornost.
Page: Success Rate
Barvičky s “good vibes” patří neúspěšným útokům – ty jsou vlastně dobré zprávy. Úspěšné útoky jsou černé, zachmuřené. Mixovat zelenou/červenou s negací by působilo zmatečně.
Druhý graf zvýrazňuje trend rostoucího poměru neúspěšných útoků, což ze samotného celkového grafu není patrné.
Zvažovala jsem stacked area chart, ale pak jsem ho jsem zavrhla – a působí příliš kontinuálně pro diskrétní roční data a při kliknutí se choval divně.
Line stacked chart umožňuje snadné filtrování podle let, což odpovídá mému záměru se sliderem.
Ideální by bylo přidat čáru s trendem (lineární regrese?), ale s tím se mi upřímně nechtělo patlat.
Page: Methods
Mapku jsem dělala s pomocí Claude – nechtěla jsem vymýšlet metriku od nuly, ale chtěla jsem si podobný typ vizualizace vyzkoušet.
Automatické přepočítávání osy Y u line graphu je potenciálně problematické – nepozorný čtenář si nemusí všimnout rozdílů v celkových počtech. Ale když ji zafixuju, data z menších států jsou nečitelná. Nejsem si jistá, co by zde bylo ideální řešení
Barvy z mapky neodpovídají barvám z treemap. Opravit by trvalo příliš dlouho. (A ta mapa mi teď stejně nefunguje, protože příliš často ukazuje bomby… Nejsem si jistá co cs tim)
Quick fix by byla heatmapa/matice – typy útoků × oblast/stát. Ale to je takové škaredé, nešla jsem do toho.
Page: Regionality
Cílem stránky je ukázat bizarně velký počet útoků v Middle East – proto koláčový graf, který tohle sdělí na první pohled.
Bubbles na mapě mají nejmenší možnou velikost, aby přes ně šla mapa vůbec vidět.
Mapka se může zdát redundantní, ale kopíruje konfliktní oblasti. Ideálně by k ní patřily popisky typu “Konflikt XY” – ale to je beyond the scope.
Opět jsem zvažovala heatmap, ale zjistila jsem, že vypadá jak z malování a zdaleka nekomunikuje převahu ME tak moc, jak bych doufala.
Původně tu byl i graf s průběhem v čase, ale byl nadbytečný a nekomunikoval žádnou novou informaci.
Page: Middle East and North Africa
Treemap ukazuje bizarní převahu Iráku. Nastackovala jsem ho jako jednu linku – podle Cole Nussbaumer Knaflic se snáz vnímá rozdíl délek než ploch.
Odebraná desetinná místa u procent – méně clutteru, čistší vizuál.
Ideálně by na pozadí treemap byla vlajka dané země. Ale to Power BI neumí….
Asi by se s tím dalo ještě mnohem více vyhrát, ale už jsem nad tím strávila nekřesťanské množství času. Snad to takto stačí.
Přiznám se, že se mi report horkotěžko tvořil, protože jsem neměla moc představu, k čemu je, kdo je moje publikum a co mu vlastně chci sdělovat…
druhý úkol
XPATHs
link to spreadsheet -> 🔗🔗🔗
první problém - funkce IMPORTXML nezvládla scrapovat heureku, ani alzu, bazoš ano -> hence asi potřeba lepší scraping tool, který heureka nezablokuje -> obešla jsem to extenzí IMPORTFROMWEB. jinak syntaxe vypadá v podstatě stejně
druhý problém - filtr dle TOPu. if statements vypadaly jako peklo, takže jsem to nakonec obešla pomocí ancestor::div[#️⃣]
třetí problém - chybějící hodnocení se prostě nenaimportovala a chybějící data tak posunují celou tabulku. u případných chybějících cen (nebo akčního formátování) by to byl úplně stejný problém. nenapadlo mě elegantní řešení a domnívám se, že je beyond the scope of this domácí úkol (?)
sentiment analysis
zkusila jsem si zběžně Geneeu, nevím vlastně ale k čemu bych ji kde využila.
první úkol
CSVčko
jako jednu entitu jsem se nakonec rozhodla mít jeden blok času, resp. jednu událost v kalendáři
date,timestart,timestop,code,location
2025-09-16,10:00,12:00,ISKM95,teams
2025-09-17,16:00,18:00,ISKM55,G02
2025-09-23,10:00,12:00,ISKM95,teams
2025-09-23,16:00,18:00,ENTRE01,zoom
2025-09-24,16:00,18:00,ISKM55,G02
2025-09-26,12:00,16:00,ISKM11,D22
2025-09-30,10:00,12:00,ISKM95,teams
2025-09-30,16:00,18:00,ENTRE01,zoom
2025-10-01,16:00,18:00,ISKM55,G02
2025-10-07,10:00,12:00,ISKM95,teams
2025-10-07,16:00,18:00,ENTRE01,zoom
2025-10-08,16:00,18:00,ISKM55,G02
2025-10-10,12:00,16:00,ISKM11,D22
# so and so on

prvně jsem doufala, že jedna entita by byl jeden předmět. to by ale nepodchytilo různé frekvence předmětů, blokové předměty a jiné. četnost tedy dává smysl podchytit spíše řádky, jinak je to imo extrémně sloppy. tahle varianta by asi fungovala třeba na rozvrh pro prvňáčky, kde zas takové výkyvy nebývají.
na řešení se mi moc nelíbí, že jsou mnohé informace duplicitní - časy hodin, nebo kdyby se např. měla přidávat informace o vyučujícím. na druhou stranu to dovoluje flexibilitu při změnách ve výuce. 🤷
XML/GPX
celý soubor na githubu
<?xml version="1.0" encoding="utf-8"?>
<gpx version="1.1"
creator="viktorie"
xmlns="http://www.topografix.com/GPX/1/1">
<rte>
<name>brno heart</name>
<rtept lat="49.194373" lon="16.608736">
<ele>215.000000</ele>
</rtept>
<rtept lat="49.195442" lon="16.608852">
<ele>215.000000</ele>
</rtept>
<rtept lat="49.196704" lon="16.609122">
<ele>215.000000</ele>
</rtept>
<!-- so and so on -->
<rtept lat="49.194373" lon="16.608736">
<ele>215.000000</ele>
</rtept>
</rte>
</gpx>

API
web si každých pár sekund vyžádá json, kde každá entry (?) v array vehicles je jedno konkrétní vozidlo… každé vozidlo pak má přirazené údaje - číslo linky, destinaci, poslední zastávku atd.
(stačí takto? víc mi přijde jako okecávání)
