Nezávislá kontrola dat parkování
Nezávislá kontrola dat parkování
Datum kontroly: 2026-08-02
Kontrolované zdroje:
/Volumes/Verbatim 2TB/Radnice/Dokumenty úřad/Parkování/Analýza/Textova_zprava_2023.pdf/Volumes/Verbatim 2TB/Radnice/Dokumenty úřad/Parkování/data celoplošné brandýs public.xlsxdoprava/data/parkovani.jsondoprava/tools/parkovani-import.py
Stručný závěr
Potvrzuji, že sloupce v PDF příloze nejsou v dosavadním čtení prohozené. Hlavička odpovídá pořadí:
PS 361 | PS ČSN | OA DEN | OA NOC | OBS NOC 361 | OBS DEN 361 | OBS NOC ČSN | OBS DEN ČSN
Vnitřní kontrola obsazeností toto pořadí podporuje: procentní obsazenost se až na zaokrouhlení vztahuje k nočnímu počtu pro OBS NOC a k dennímu počtu pro OBS DEN. Zobrazené počty OA jsou ale zjevně zaokrouhlené celé hodnoty, zatímco procenta byla pravděpodobně počítána z nezaokrouhlených průměrů.
Zásadní nesrovnalost je jinde: kapacity v souhrnných tabulkách 3.1 a 3.2 přesně odpovídají součtům kapacit z PDF přílohy, ale počty vozidel OA v souhrnných tabulkách neodpovídají součtům OA DEN/OA NOC z PDF přílohy. Souhrnné počty OA naopak velmi dobře odpovídají agregaci průměrů z Excelu, s několika výjimkami způsobenými přečíslováním, dělenými řádky a duplicitou ID.
Následná sekvenční kontrola našla kořenovou příčinu s vysokou jistotou. Sloupce OA v PDF vznikly pozičním spojením dvou nezávisle seřazených seznamů, nikoli spojením přes správné ID. Identifikace úseku, název a kapacity proto patří aktuálnímu řádku, ale OA DEN/OA NOC zpravidla patří jinému úseku z Excelu. Procenta OBS byla následně správně vypočtena z chybně přiřazených OA a kapacity aktuálního řádku, takže jsou aritmeticky konzistentní, ale místně nesprávná.
Pro veřejnou mapu jsou proto nepoužitelné nejen absolutní počty OA z PDF přílohy, ale i její hotové hodnoty OBS. Bezpečnější základ je spojit kapacity z přílohy s excelovými průměry přes skutečné ID a obsazenost znovu vypočítat.
Ověření bodů A-D
A) Kapacity souhlasí
Potvrzuji.
Pro Historické jádro a typy MK + SIL vychází z PDF přílohy:
| zdroj/výběr | PS 361 | PS ČSN |
|---|---|---|
| PDF příloha, Historické jádro, MK+SIL | 257 | 306 |
| tabulka 3.2 | 257 | 306 |
Kontrola přes všechny ZSJ:
- tabulka 3.1, všechny typy komunikací: kapacity sedí ve 20 z 20 řádků;
- tabulka 3.2, jen MK+SIL: kapacity sedí v 19 z 19 řádků.
B) Počty vozidel nesouhlasí
Potvrzuji rozpor, ale upřesňuji jeho velikost.
Čísla OA NOC = 524 a OA DEN = 364 odpovídají neúplné extrakci v parkovani.json: chybí v ní mimo jiné řádek 382 a sufixové řádky v historickém jádru. Při plné extrakci PDF přílohy vychází pro Historické jádro, MK+SIL:
| zdroj/výběr | OA NOC | OA DEN |
|---|---|---|
| PDF příloha, plná extrakce | 662 | 446 |
parkovani.json, neúplná extrakce |
524 | 364 |
| tabulka 3.2 | 167 | 226 |
Rozpor tedy není chyba ve čtení pořadí sloupců. Naopak, po opravě extrakce je rozpor u nočního OA ještě větší.
Stejný vzorec platí obecně:
- tabulka 3.1: součet
OAz PDF přílohy má shodu se souhrnem v 0 z 20 ZSJ; - tabulka 3.2: součet
OAz PDF přílohy má shodu se souhrnem v 0 z 19 ZSJ.
C) PDF příloha nesouhlasí s Excel souborem
Potvrzuji.
U uvedených ID sedí přímé párování podle ID a názvů úseků, ale nesedí hodnoty vozidel:
| ID | úsek | Excel průměr den | Excel průměr noc | PDF OA DEN | PDF OA NOC |
|---|---|---|---|---|---|
| 101 | Nádražní, U Železnice - slepá | 6,5 | 1,5 | 16 | 16 |
| 354 | Na prádle, Ivana Olbrachta - S.K. Neumanna - 1. část | 12,3 | 11,5 | 2 | 0 |
| 355 | S.K. Neumanna, Podkostelní - Na prádle | 8,8 | 13,0 | 33 | 35 |
Test přes celý soubor:
- přímé párování
xlsx.ID -> PDF IDje správná osa: 669 spárovaných řádků, z toho 663 má současně velmi dobrou shodu ulice i úseku; xlsx.úsek -> PDF IDje špatná osa: 486 spárovaných řádků, ale jen 2 mají současně dobrou shodu ulice i úseku;- konstantní posun ID neobstál: nejlepší je posun 0, další posuny mají řádově horší shodu.
Hodnota v PDF příloze není ani prostý průměr, ani součet, ani maximum měření z Excelu. Při přímém párování 669 řádků vyšlo:
| hypotéza pro PDF OA | přesná shoda den | přesná shoda noc | přesná shoda obojí |
|---|---|---|---|
Excel Průměr den/noc |
22 | 52 | 9 |
| součet měření z Excelu | 24 | 43 | 11 |
| maximum měření z Excelu | 48 | 56 | 15 |
Žádná z těchto hypotéz nevysvětluje PDF OA DEN/OA NOC při přímém párování stejného ID. Hodnoty ale vysvětluje jejich pořadí po seřazení Excelu podle pomocného sloupce úsek; podrobnosti jsou níže.
D) Počet záznamů
Upřesňuji.
PDF příloha má podle nezávislé extrakce:
- 669 řádků s čistě číselným ID;
- 35 řádků se sufixem typu
354a; - 8 dělených řádků typu
416-1; - celkem tedy 712 datových řádků.
Excel má:
- 708 datových řádků;
- 707 unikátních hodnot
ID; - duplicitní
ID = 627; - 672 řádků s číselným ID, 35 se sufixem a 1 s děleným ID.
Tvrzení PDF 669, xlsx 708 platí jen pro počítání čistě číselných ID v PDF. Pokud se bere celá tabulková příloha včetně sufixových a dělených ID, PDF má 712 datových řádků.
Vztah mezi PDF, Excel a souhrnnými tabulkami
Nejlépe obstála tato hypotéza:
Kapacity v souhrnech jsou agregované z PDF přílohy, ale souhrnné počty OA jsou agregované z průměrů v Excelu nebo z blízkého předchůdce Excelu, nikoli ze sloupců
OA DEN/OA NOCv PDF příloze.
Evidence:
- Kapacity z PDF sedí na souhrny 3.1 a 3.2 přesně ve všech řádcích.
- Součty
OA DEN/OA NOCz PDF nesedí na souhrny v žádné ZSJ. - Agregace
Průměr den/nocz Excelu přes příméIDsedí nebo téměř sedí na většinu souhrnných OA. - Pro
Historické jádro,MK+SILodpovídá tabulka 3.2 hodnotám z Excelu po zohlednění přejmenovaného ID496a -> 500a:OA NOCpřibližně166,5 -> 167,OA DENpřibližně225,8 -> 226.
Nalezená kořenová příčina: poziční spojení řádků
Hodnoty OA v tabulkové příloze nejsou jinou metrikou ani náhodnými čísly. Jsou to průměry z Excelu nebo z jeho velmi blízké verze, které byly připojeny ke kapacitní tabulce podle pořadí řádků. Kapacitní tabulka je řazena podle zveřejněného ID, zatímco zdroj počtů vozidel odpovídá pořadí pomocného excelového sloupce úsek.
Přímé důkazy:
| PDF řádek | správný excelový řádek stejného místa | řádek, ze kterého PDF skutečně převzalo OA |
|---|---|---|
101, Nádražní |
ID 101: den 6,5, noc 1,5 |
ID 299, úsek=101: den 15,5, noc 16 → PDF 16/16 |
354, Na prádle |
ID 354: den 12,33, noc 11,5 |
ID 591, úsek=501: den 1,5, noc 0 → PDF 2/0 |
355, S. K. Neumanna |
ID 355: den 8,83, noc 13 |
ID 592, úsek=502: den 32,5, noc 34,5 → PDF 33/35 |
U ID 354 dává chybně připojený denní průměr 1,5 po zaokrouhlení PDF hodnotu 2 a současně 1,5 / 19 = 7,9 %, přesně jako v příloze. U ID 355 dávají průměry 32,5/34,5 po zaokrouhlení 33/35 a při kapacitě 8 také přesně uvedených 406,3 %/431,3 %.
Pořadí je rozhodující: PDF ID 354 je 253. číselný řádek přílohy a excelový záznam s úsek=501 je 253. záznam po seřazení podle tohoto pomocného pole. ID 355 a úsek=502 jsou shodně 254. záznamy.
Přísná sekvenční kontrola, která vyžadovala současnou shodu zaokrouhlených OA i všech čtyř procent OBS, takto spárovala 622 z 669 číselných řádků. Dlouhé souvislé bloky mají postupné posuny 0, +30, +70, +113 a další; skoky přesně odpovídají mezerám v technickém číslování a vloženým či odebraným řádkům mezi verzemi. Zbylých 47 řádků lze vysvětlit verzovými změnami, dělením úseků a formátovými anomáliemi, ale bez původního Word/GIS projektu nelze určit konkrétní operaci, která chybu vytvořila. Datově nelze rozlišit například kopírování sloupců řádek po řádku od GIS joinu přes pořadové rowid.
Důsledek: vnitřní shoda OBS = OA / kapacita nepotvrzuje správnost řádku. Potvrzuje jen to, že procenta byla dopočtena až po chybném připojení OA.
Neobstály tyto hypotézy:
- PDF
OAje součet měření z Excelu: ne, přesná shoda jen u 11 z 669 řádků pro den i noc současně. - PDF
OAje maximum měření z Excelu: ne, přesná shoda jen u 15 z 669 řádků pro den i noc současně. - Souhrn je prostý součet
OAz PDF přílohy: ne, nesedí ani v jedné ZSJ. - ID jsou posunutá o konstantu: ne, nejlepší shoda je bez posunu.
- Sloupec
xlsx.úseksedí na PDF ID lépe nežxlsx.ID: ne, je výrazně horší.
Poslední bod platí pro přímý join xlsx.úsek = PDF ID a shodu názvů. Nový nález je odlišný: nejde o join podle hodnoty tohoto pole, ale o shodu pořadí záznamů po jeho seřazení.
Výjimky a signály přečíslování:
- Excel obsahuje
496a, zatímco PDF obsahuje odpovídající úsek jako500a. - Excel obsahuje
578a, zatímco PDF obsahuje odpovídající úsek jako570a. - Excel obsahuje základní ID
416,689,729, zatímco PDF má dělené řádky416-1/2/3,689-1/2,729-1/2. - PDF obsahuje
479, které jsem v Excelu nenašel. - Excel má duplicitní
ID = 627; druhý řádek má v Exceluúsek = 941.
Kontrola parkovani.json
Aktuální soubor parkovani.json obsahuje všech 712 řádků PDF přílohy:
669 s čistě číselným ID, 35 se sufixem a 8 s děleným ID. Následující
odstavec zachycuje historický stav první verze importu, který vysvětlil,
proč tehdy vznikl výstup pouze se 662 úseky.
Původní import čistě číselných řádků vynechal těchto 7 z 669 záznamů:
| ID | typ | ZSJ | komunikace/úsek | proč vypadlo |
|---|---|---|---|---|
| 382 | MK | Historické jádro | Na potoce, Petra Jilemnického - U kapličky | v PDF je v obsazenosti ######, regex ho nebral |
| 519 | SIL | K Toušení | Královická, křižovatka Y - hranice města | v PDF je holé 0 místo 0,0% |
| 526 | MK | K Toušení | Jiřího Macháčka, Královická - jih | ZPS je v PDF ano malými písmeny |
| 527 | MK | K Toušení | Jiřího Macháčka, před sportovištěm | ZPS je v PDF ano malými písmeny |
| 528 | MK | K Toušení | Jiřího Macháčka, parkoviště vedle sportoviště | ZPS je v PDF ano malými písmeny |
| 529 | MK | K Toušení | Jiřího Macháčka, komunikace 1 | ZPS je v PDF ano malými písmeny |
| 552 | MK | U školy | Husova, U parku - U cikorky | v PDF je holé 0 místo 0,0% |
Není to systematický výpadek jednoho typu komunikace: ze 7 číselných výpadků je 6 MK a 1 SIL, příčinou je formát textové extrakce.
Proti plným 712 řádkům PDF přílohy tak původní parkovani.json vynechával 50 řádků:
- 7 číselných řádků výše;
- všech 35 sufixových ID typu
354a; - všech 8 dělených ID typu
416-1.
Typově šlo o 39 MK, 8 UK a 3 SIL. Pro veřejnou mapu to bylo významné, protože mezi vynechanými byly i skutečné uliční úseky a parkoviště, ne jen technické poznámky. Tato konkrétní chyba textové extrakce je v aktuálním importu opravena; chybná OA/OBS v PDF a neshody ID mezi PDF a Excelovým sešitem zůstávají.
Další rizika pro veřejnou mapu
OA DEN/OA NOCv PDF příloze jsou přiřazené k nesprávným úsekům kvůli pozičnímu spojení dvou seznamů.- Hotové hodnoty
OBSv PDF jsou také místně nesprávné, přestože jsou uvnitř řádku aritmeticky konzistentní. - Některá ID jsou přečíslovaná nebo rozdělená mezi verzemi dat.
- Excel obsahuje duplicitní ID
627. - PDF obsahuje formátové anomálie:
######, holé0ve sloupcích obsazenosti, maléano, extrémní procenta a řádky se sufixem nebo děleným ID. - U úseků s nulovou kapacitou se objevují stavy
ZÁKAZa zároveň nenulové počty vozidel. Mapová vrstva musí tyto případy zobrazovat odděleně od běžné procentní obsazenosti.
Vypořádání v mapě (2. 8. 2026)
Nálezy byly nezávisle přepočítány a promítnuty do /doprava:
- Ověření extrakce: vlastní
pdftotexta vlastní parser dal 712 řádků s unikátními ID a nulovou odchylkou protiparkovani.json. - Ověření kořenové příčiny: seřazení surových dat podle pomocného sloupce
úsekvysvětlí 661 z 669 číselných řádků přílohy osmi posuny, zatímco pořadí podleIDjen 147 a přímý join přesIDpouhých 20. Šum je ~25 shod na posun, dva hlavní posuny mají 286 a 261. Kořenová příčina potvrzena. - Ověření vnitřní konzistence
OBS: zpětný dopočet sedí u 346 z 351 ověřitelných řádků. Konzistence tedy platí a skutečně nic nedokazuje. - Ověření agregace: kapacity z přílohy sedí na tabulku 3.1 v 16 z 16 porovnatelných ZSJ, počty vozidel z přílohy v 0 z 16.
Doporučení 2 (převodník přejmenovaných a dělených ID) nebylo do té doby
implementované. Deset úseků nemělo v surových datech protějšek, jejich
kapacita ale v součtu ulice zůstávala — Rozmarýnova se proto v mapě
zobrazovala jako prázdná (0 %) místo skutečných 120 %, Kralupská jako 47 %
místo 93 %. Převodník je doplněný v doprava/tools/parkovani-geometrie.py
(PREVOD_ID), dělené úseky sdílejí jeden řádek surových dat.
Tím se současně vysvětlily oba dosud nerozhodnuté rozdíly proti tabulce 3.1:
| ZSJ | publikováno (noc/den) | agregace před opravou | po opravě |
|---|---|---|---|
| U nádraží | 1285 / 1032 | 1152,5 / 953,7 | 1284,5 / 1032,0 |
| Zahradní město | 158 / 89 | 34,5 / 33,2 | 158,0 / 88,8 |
Rozdíl tedy nebyl rozporem v datech, ale chybou párování na naší straně.
Příznak spolehlivostVozidel: "nejista" byl u obou oblastí zrušen.
Blok 245–249 ve Staré Boleslavi
Poslední skupina neshod se ukázala jako lokální přečíslování po změně dělení území, ne jako další systematická chyba. Napříč všemi 711 spárovanými řádky je medián podobnosti názvů 1,00 a pod 0,75 klesá jen pět dvojic — všechny v tomto jednom bloku.
Zpracovatel k němu podklady nemá, rozhodovala proto shoda názvů, protože ta určuje identitu úseku:
| xlsx | jistota | |
|---|---|---|
| 248 „nám. SV. Václava - jih” | 245 „nám. SV. Václava / jih” | vysoká — doslovná shoda |
| 247 „nám. SV. Václava - sever” | 248 „nám. SV. Václava / sever” | vysoká — doslovná shoda |
| 479 „Františka Strunze, Martinovskí-slepá” | 249 „Františka Strunze / Martinovská - slepá” | vysoká — jediný výskyt ulice v obou souborech |
| 249 „Maxe Švabinského + nám. Sv. václava” | 247 „Maxe Švabinského / k nám. Sv Václava” | střední — zbytek po vyloučení, oba popisy míří na tutéž spojku |
| 245 „parkoviště pod Mariánským nám.” | ponecháno bez protějšku | — |
U 245 se nabízel xlsx 147a „Boleslavská / parkoviště pod Mariánským nám.
- západ”, jenže příloha slovník východ/západ používá na řádku
244, kde sedí doslova, a u245ne. Přiřazení by bylo dohadem, proto zůstává „nevíme”. Dvojice PDF147/147ase neřeší: všechny excelové řádky, které pro ně přicházejí v úvahu, mají nula vozidel, takže na výsledku nezáleží.
Vyhodnocení dopadu. Na mapě se nezměnilo nic kromě 479, které přešlo
z „neznámo” na „naměřeno nula”. Čtyři z pěti dotčených úseků (30 stání) mají
v příloze název, který neodpovídá žádné ulici v silniční síti, takže se
nekreslí. Bilance za ZSJ se nezměnila vůbec — celá permutace probíhá uvnitř
ZSJ U kostela a přesouvaný řádek 249 má nulové hodnoty. U kostela zůstává
na 142 vozidlech v noci a 271 ve dne, tedy přesně na publikované tabulce 3.1.
Oprava je tedy správná, ale prakticky bezvýznamná; její cenou je, že
kontrolní výpis skriptu už hlásí jen dva skutečné překlepy místo šesti
smíšených nálezů.
Zbývající známá nejistota: PDF 245 (19 stání) je bez počtů vozidel.
Doporučení
Pro veřejnou mapu nelze použít OA DEN/OA NOC ani OBS z PDF přílohy. Kořenová příčina rozporu je dostatečně doložená i bez vyjádření zpracovatele: vozidla jsou v příloze připojená k jiným úsekům.
Nejmenší bezpečný postup:
- Brát z PDF pouze identifikaci úseku, typ, ZSJ a kapacity; nepřebírat jeho OA ani OBS.
- Brát
Průměr den/nocz Excelu a spojovat jej s kapacitami přes skutečnéID, včetně explicitního převodníku pro přejmenované a dělené úseky. - Obsazenost dopočítat z nezaokrouhlených excelových průměrů a zvolené kapacity. Zobrazený počet lze zaokrouhlit až samostatně pro popisek.
- Opravit import tak, aby bral sufixová a dělená ID a formátové výjimky.
- V mapě explicitně označit úseky s nulovou kapacitou a stavy
ZÁKAZ/NO, protože běžné procento obsazenosti u nich není interpretovatelné stejně jako u nenulové kapacity. - Vyžádat od zpracovatele původní zdrojový sešit/GIS projekt a potvrzení chyby; to je důležité pro oficiální opravu analýzy, nikoli už pro identifikaci technické příčiny.