kokes / od

Česká otevřená data
Mozilla Public License 2.0
132 stars 16 forks source link
civic-tech etl opendata postgresql

Česká otevřená data

Cílem tohoto repozitáře je sjednotit přístup k otevřeným datům, které se týkají finančních výdajů státu. Jde nám o shromáždění dat v konzistentním formátu a přidání číselníků, které rozklíčují vztahy státu a firem, případně organizačních složek státu.

Před několika lety se stát začal víc a víc otevírat vůči veřejnosti, ale často tak činil pouze formálně. Do veřejné sféry se dostala data, ale často ve formátech špatně zpracovatelných, s chybami, případně obojí. Komunitě tak často trvalo dlouhou dobu, než data zpracovala, na některé datasety se vůbec nedostalo.

I když proběhlo samotné zpracování, často se nedostalo na klíčovou část - fúzi jednotlivých datasetů, aby se na veřejnost dostaly předem neznámé skutečnosti. I to je jeden z účelů této práce.

Ačkoliv se tu nenachází příliš mnoho kódu, věřte, že tato práce stojí na letech námahy a komunikace s úřady, na nekonečných diskusích s lidmi ze všech sfér státní správy i soukromých účastníků. I přes tyto nástrahy se nám za ta léta podařilo vytvořit dialog mezi uživateli a poskytovateli dat a jen doufáme, že se nám podaří jej udržet.

Účel repozitáře

Najdete zde několik sad kódů, v tuto chvíli nejsou nějak značně sešňerované, jde o spíše samostatné skripty, časem snad vymyslíme nějakou koherentní orchestraci.

Účely skriptů budou zhruba následující:

  1. Stažení dat - většinou jsou definované adresy, odkud se dají čerstvá data strojově stáhnout, občas je třeba ručního zásahu (zejm. u evropských dotací od MMR).
  2. Konverze dat a prvotní čištění. Po tomto kroku bude každý dataset v CSV, které pak člověk může nahrát prakticky kamkoliv, včetně Excelu.
  3. Export dat z CSV do databáze, v našem případě PostgreSQL. Můžete si zvolit svoji vlastní, my jsme náš systém indexů, datových verifikací a dalších mechanismů postavili nad PostgreSQL.

Posledním aspektem je aktualizace dat. V tuto chvíli máme hotové jednorázové nalití všech dat, postupně promýšlíme, jak by se ideálně dal provádět update.

Již v tuto chvíli ale funguje základní princip tohoto projektu - jakmile člověk dostane datasety do jednoho systému/databáze, může se dotazovat napříč - například seznam zakázek pro firmu, která splňuje nějaká kritéria na základě informací z ARES a je propojena s určitými politicky aktivními lidmi.

Lokální spuštění

Účelem projektu je, aby se dal snadno použít nejen autorem. Pro základní použití vám postačí Python (3.7+) a nic jiného. Stačí si nainstalovat pár základních závislostí a můžete data nahrát do CSV nebo i databáze - podporovaná je SQLite (vestavěná do Pythonu) nebo PostgreSQL.

python3 -m venv .venv
. .venv/bin/activate
pip3 install -r requirements.txt
python3 main.py --all --partial

Tato sekvence příkazů nainstaluje potřebné závislosti do virtuálního prostředí a zpracuje všechna data do CSV.

Selektivní zpracování jde udělat pomocí specifikace datasetu jako pozičního argumentu

python3 main.py --partial ares volby

A nahrání do databáze se řídí argumentem --connstring. Při specifikaci databáze proběhne vše - stažení dat, konverze do CSV a nahrání do databáze. Bez specifikace databáze skončíte u CSV.


python3 main.py --connstring sqlite:///soubor.db --partial ares volby
python3 main.py --connstring postgresql://localhost/data --partial ares volby

Název schématu u Postgresu, či tabulky u SQLite lze prefixovat parametrem --schema_prefix.

python3 main.py --connstring postgresql://localhost/data --schema_prefix opendata_ --partial ares volby

Spuštění v Docker kontejneru

Pokud si nechcete lokálne instalovat Python, můžete využít přiložený Dockerfile, vytvořit si Docker image a spustit vše v kontejneru.

Všechna generovaná data včetně stažených zdrojových souborů se zapisují do složky /data v kontejneru. Zpracované CSV výstupy najdete v /data/csv.

Tvorba Docker image

docker build -t kokes-od .

Spuštění

docker run -it --rm -v $PWD:/data kokes-od --partial ares volby

Doménová znalost a kvalita dat

Než se dostaneme k datasetům samotným, je třeba zmínit klíčový předpoklad pro správnou interpretaci dat, tím je doménová znalost, tedy pochopení dané problematiky na věcné úrovni, ne pouhé technické zpracování dat.

Člověk musí pochopit, proč je něco v IS ReD a ne v DotInfo a naopak. Většina dat obsahuje jisté informace o platnosti dat, datum podpisu není to samé jako datum čerpání. Když pak člověk informace páruje např. s obchodním rejstříkem, jsou tyto atribuce klíčové.

Je tu též věcný překryv, kdy dotace by měly mít sepsané smlouvy a pokud byly uzavřeny v určitou dobu, budu i v registru smluv (ale nemusí!).

V neposlední řadě jsou všechny datasety zatíženy jistou chybovostí. Neznamená to, že bychom měli rezignovat na jisté analýzy, spíš že bychom měli být extrémně opatrní v tom, co z dat vyčteme.

Formát dat

Při zpracování dat se řídíme jedním hlavním principem - snažíme se neměnit strukturu dat nad nezbytnou mez. To znamená, že bereme všechny sloupce ze zdrojových datasetů, až na extrémní případy neměníme obsah dat (i tak jen kvůli párování dat - tedy IČO).

Jde nám o to, aby člověk mohl vždy dohledat primární zdroj, což se mu v případě naší manipulaci s daty nepodaří.

I přes naši značnou snahu se může stát, že při našem zpracování dat něco změníme či smažeme. Jakoukoliv takovouto chybu nám prosím hlašte, pokusíme se ji opravit v co možná nejkratším termínu. Je důležité zdůraznit, že nejsme autory žádných těchto dat, pouze je zpřístupňujeme veřejnosti.

Datasety

Plánujeme zde zapojit dva typy datasetů - transakční a klasifikační, byť toto rozdělení není čisté, budou zde jisté překryvy.

Identifikace podniků

Jedním z hlavních zásahů do dat je nahrazení identifikace podniků našimi “vlastními” daty, konkrétně daty z ARES. Problémem je, že místo odkazování do ARES se každý z poskytovatelů dat snaží tvořit si vlastní databázi podniků a v oněch datech jsou často chyby. Z důvodu konzistence a kvality dat proto používáme většinou pouze IČO podniků a dál přebíráme informace z ARES.