Využití dat z dopravních kamer

, Michal Škop

Kolik kterým místem projíždí aut, kolik z nich jezdí nebezpečně rychle. To jsou jen některé statistiky, které lze získat z otevřených dat z dopravních kamer.

Česká republika je plná kamer provozovaných jak veřejnými organizacemi (např. policií státní i městskou, obcemi, kraji, ŘSD), tak i soukromými. Jen naprosté minimum z nich ale poskytuje nějakou další službu veřejnosti nebo firmám nad rámec úzce omezeného důvodu své instalace.

Tento článek ukazuje malý kousek potenciálu, který v sobě otevřená data z existujících kamer mají. Jako příklad dalšího využití otevřených dat z dopravních kamer vznikla mapová aplikace, která vizualizuje data z dopravních kamer v Plzeňském kraji. Konkrétně zde je ukázán detailní postup tvorby mapy Podíl vozidel překračujících 50 km/h zaznamenaných dopravními kamerami v Plzeňském kraji.

Kamera v Plasích zapojená do systému sběru informací o dopravě v Plzeňském kraji (foto: Josef Škop)
Kamera v Plasích zapojená do systému sběru informací o dopravě v Plzeňském kraji (foto: Josef Škop)

Takové mapy (obdobně jako grafy nebo statistiky) mohou sloužit jako jeden z podkladů pro jednání samospráv, pro plánování místních úprav nebo jako přehled o vytíženosti silnic apod. Za další průzkum stojí i propojení těchto dat z kamer (ze kterých lze získat intenzitu provozu a rychlosti vozidel) s daty o dopravních nehodách. Dat o mobilitě existuje v ČR mnoho (např. použité v Atlase mobility), ovšem naprostá většina z nich není veřejně dostupná.

Použitá data

Z mnoha veřejných kamerových systémů používaných v ČR poskytuje data veřejnosti jako otevřená data pouze Plzeňský kraj v rámci projektu Systém sběru informací o průjezdu a měření rychlosti vozidel na území Plzeňského kraje.

Data z tohoto projektu jsou registrována v NKOD - Národním katalogu otevřených dat. Zdrojová data jsou dostupná po jednotlivých dnech v zazipovaných souborech. Podrobná data: Open data systému

Data obsahují informaci o průjezdu každého vozidla kolem zapojené kamery o systému. Údaje jsou dostupné od roku 2016 a dnes je již do systému zapojeno přes 100 kamer rozmístěných v obcích po celém území Plzeňského kraje. Za každé vozidlo jsou k dispozici čas průjezdu, rychlost, směr, typ vozidla. Je třeba ale počítat s tím, že někdy jsou údaje neúplné (spec. u rychlosti) a někdy také mají kamery výpadky a data z nich chybějí komplet. Některé dny chybějí data úplně za všechny kamery.

Postup zpracování

V tomto článku se zpracování ukazuje v jazyce Python 3 s velkým použitím knihovny Pandas.

Stažení a extrakce dat

Pro práci s podrobnými daty o průjezdu každého vozidla je třeba nejprve data získat a a) buď si pořídit jejich lokální kopii nebo b) je zpracovat rovnou při stažení (a soubor neukládat).

U obou postupů je třeba počítat s tím, že velikost zazipovaných souborů je kolem 5 - 10 MB, takže kompletní pětiletá historie znamená stažení až 20 GB dat. Pokud u první varianty navíc rozzipujeme stažený soubor a uložíme samotná data (v .csv, aby se s nimi následně snadněji pracovalo), musíme počítat s tím, že 1 rok zabere až nějakých 40 GB místa na disku. Proto stojí za úvahu uložit pouze údaje, které budeme potřebovat (v případě této analýzy soubory zabíraly zhruba 80 GB).

Ukázka hlavní části kódu, který stáhne a extrahuje data o kamerách pro jeden den d.

dstring = d.strftime("%Y%m%d")
url = "https://doprava.plzensky-kraj.cz/opendata/doprava/den/DOPR_D_" + dstring + ".zip"
r = requests.get(url)
with zipfile.ZipFile(io.BytesIO(r.content)) as z:
  with z.open("DOPR_D_" + dstring + ".csv") as f:
    df = pd.read_csv(f, header=None, delimiter="|")

Celý použitý soubor: download.py

Výpočty střední rychlosti, překračování rychlosti

Vzhledem k velikosti dat si postup rozdělíme do dvou kroků. Načteme data za každý den a pro každou kameru (a směr jízdy) spočítáme požadované statistiky (pokud jsou data v pořádku). Spočteme statistiky za všechny dny.

Načtení dat, výpočet statistik pro každou kameru, směr a den

V tomto kroku je potřeba vyhodnotit, zda data jsou pro danou kameru za konkrétní den úplná (jak jsme uvedli výše, nemusí to tak být). Vzhledem k povaze dat, kdy chybějící data chybějí “bez upozornění”, je třeba použít nějakou heuristiku. V případě tohoto článku šlo o nenulový počet zaznamenaných vozidel v každé hodině mimo několika nočních. Pokud tomu některá data za den a kameru nevyhověla, dále se s nimi nepracovalo.

Pro každou kameru, směr a den poté spočítáme počet vozidel, mediánovou rychlost a podíl vozidel, která jela rychleji než postupně 30, 40, … 100 km/h.

Vzhledem k velikosti souborů se vyplatí věnovat pozornost způsobu zpracování dat - použití knihovny Pandas na hromadné zpracování souboru může ušetřit řádově sekundy u každého souboru, což se překlopí do řádů hodin u celé analýzy.

Použitý soubor: daily.py

Celkové statistiky pro danou kameru

Pro zobrazení v mapě spočteme pro všední dny střední počet vozidel a střední podíl vozidel, která jela rychleji než 50 km/h. S ohledem na robustnost dat použijeme median a ne průměr (čímž také de facto vyřešíme problém se státními svátky připadajícími na dny pondělí až pátek, kdy je provoz logicky výrazně jiný než v pracovní dny).

Příklad kódu na výpočet středního (median) podílu vozidel, která jela rychleji než 50 km/h, pondělí až pátek, za každou kameru (jen její hlavní směr):

# podíl vozidel s rychlostí > 50 km/h, Po-Pá, jen hlavní směr kamery
pd.pivot_table(daily[(daily['day'].between(0, 4)) & (daily['direction'] == 1)].dropna(), values='min50', index='id', aggfunc=lambda x: np.percentile(x, 50)).reset_index().to_csv("working_day_over50.csv")

Podobně bychom ale mohli spočítat další statistiky - např. podíl vozidel jedoucí rychleji než 70 km/h, statistiky po jednotlivých letech, atd. Příklady takových dalších výpočtů jsou v odkazovaném souboru.

Použitý soubor: statistics.py

Zobrazení v mapě

Souřadnice umístění kamer lze získat s trochou snahy přímo ze zdrojového kódu mapy s dopravními informacemi projektu kamer.

Pro zobrazení v mapě je možné použít různé způsoby. Zde použijeme aplikaci Flourish, mezi jiné způsoby by určitě patřilo zobrazení pomocí knihovny Leaflet . Jako příklad použití Leafletu může sloužit právě mapa projektu Plzeňského kraje.

Výsledek

Výsledná mapa přehledně zobrazuje informace o intenzitě i rychlosti dopravy v jednotlivých místech kraje.

Mapa: Podíl vozidel překračujících 50 km/h - Plzeňský kraj

Podíl vozidel překračujících 50 km/h | Plzeňský kraj
Podíl vozidel překračujících 50 km/h | Plzeňský kraj

Legenda:

Interaktivní verze

Interaktivní mapa podílu vozidel překračujících 50 km/h v Plzeňském kraji

Další užití

Přímo s těmito daty a výše uvedeným postupem lze zcela obdobně vytvořit mapy s jinými vypočtenými statistikami. Např. s podílem vozidel, které už významně překračují rychlostní limit a jedou rychlostí vyšší než 70 km/h. Nebo se lze zaměřit jen na časy, kdy děti chodí do a ze školy apod.

Potenciál má propojení výše provedené analýzy s dalšími daty, např. o nehodách dostupných na Portálu nehod.

Podobný postup se stejnými daty byl použit jako jeden z argumentů při analýze dopadu uzavírce okresů kvůli šíření viru covid-19 na jaře 2021 - zde se ukázalo, že takto prakticky provedená uzavírka neměla na mobilitu vliv.

Analýza půjde použít i v okamžiku, kdy některé další subjekty začnou publikovat obdobná data ze svých kamer.

Použité nástroje a zdroje