Ako zverejňovať otvorené dáta

Ako zverejňovať otvorené dáta

To, že štátna správa a samospráva zverejňujú svoje dáta je skvelý počin, avšak často s tým ruka v ruke prichádzajú aj problémy ako tie dáta správne zverejniť. Rozhodol som sa preto spísať niekoľko postrehov z pohľadu programátora/užívateľa tých zverejnených údajov a taktiež poradiť odporúčané postupy (best practices). Ak však chcete komplexnejší e-learning o téme otvorených dát, OZ Alvaria pre vás jeden pripravila . Je možné, že niektorými odporúčaniami sa budem prekrývať s tým, čo nájdete v linkovanom e-learningu, ale opakovanie ešte nikomu neuškodilo.


Pri časti projektov, ktoré na webe vidím, mám pocit, že tvorba prebiehala nasledovne: počas pondelkovej porady sme si povedali, že ideme zverejňovať otvorené dáta, následne oslovíme niektorého dodávateľa alebo si vlastnými silami rozbeháme katalóg na našej webstránke (alebo na data.gov.sk) a nahráme tam zopár excelových súborov z rôznych oddelení a po pár týždňoch si spokojne odfajkneme splnený cieľ. Nápad dobrý, ale realizácia kríva na obe nohy.


Ako začať?


Len v skratke spomeniem to, čo nájdete aj vo vyššie spomínanom e-learningu. Rozhodnite sa aké dáta chcete zverejňovať a prečo. Aký o ne asi bude záujem? Máte tie dáta v dostatočnej kvalite? 

Keď už viete, že dáta ktoré chcete zverejniť, dávajú zmysel nie len vám, ale aj potencionálnym užívateľom, zastavte sa. Najhoršie čo môžete urobiť pre programátorov/užívateľov, ktorí by chceli vaše dáta používať, je narýchlo zverejniť bez riadnej prípravy hneď prvé datasety, čo máte. Ako vieme, jednotka dočasnosti je "1 Furt" a keď už raz niečo zverejníte, je veľká pravdepodobnosť, že tak budete zverejňovať aj ďalšie a následne odstraňovanie problémov, ktoré vám programátori/užívatelia nahlásia (ak budu ochotní sa tými problémovými dátami vôbec prelúskať), bude nielen veľmi bolestivé, ale aj časovo zdĺhavé a možno aj finančne náročné. A samozrejme, pôvodné datasety už neopravíte, len nové zverejníte opravené, čím spôsobíte len chaos.


Dobre teda, čo mám spraviť, keď chcem zverejniť naše dáta?

Všetky spomenuté problémy nebudú vymyslené, ale reálne skúsenosti z praxe pri práci s otvorenými dátami.

Správny formát


Pre programátora je vhodný iný formát než pre bežného návštevníka katalógu s otvorenými dátami, ktorý si ich chce len prezrieť, nejak vložiť do Excelu a spraviť jednoduché porovnania, vyhľadávania. Zatiaľ čo bežný návštevník/neprogramátor ocení CSV formát, ktorý jednoducho prečíta/importuje kam potrebuje, pre programátora, ktorý síce vie ten CSV tiež spracovať (v ďalšej časti opíšem bežne starosti pri CSV extraktoch), je pohodlnejšia práca s JSON alebo XML formátom. Preto je ideálne myslieť na oba typy návštevníkov a ponúkať datasety v týchto formátoch. Určite sa treba vyhnúť PDF či DOC súborom (ak to nie sú dokumenty).

Nie len typ súboru, ale aj jeho znaková sada môže robiť problém, hlavne kvôli slovenčine. Osobne za najvhodnejšie riešenie považujem používať UTF8, avšak keď je nutné iné, dá sa to prežiť. Avšak keď ho už raz použijete, je nutné sa toho držať. Nie jeden dataset uverejniť v UTF8, ďalší vo Windows-1250 podľa toho, z ktorého počítača zrovna exportujete z Excelu dáta.


Jednotné názvoslovie


K tomuto stačí jeden príklad za všetky. Keď viete, že budete mat niekoľko datasetov, kde budete poskytovať údaje o dodávateľovi, tak ten záznam nazvite napríklad "Dodávateľ" a držte sa ho. Pretože v praxi narážam na to, že jeden dataset obsahuje stĺpec "dodávateľ", druhý "názov dodávateľa", tretí "názov" štvrtý "Tab_1_1_nazev_subjektu" a všetky obsahujú to isté, meno firmy, čo dodáva tovar/službu. Rozumiem, že toto často vzniká tým, že faktúry a objednávky môžu spravovať iné osoby vo svojich Exceloch, alebo tabuľky v databáze vytváral vždy niekto iný. Preto je pred zverejnením vhodné spraviť kontrolu, či máte rovnaké názvy stĺpcov a v prípade, že nie, napraviť to. Premenovať to v Exceloch, z ktorých sa to exportuje, zvyčajne nebýva problém, avšak čo spraviť ak to máte takto v databáze, na ktorú sa pripája niekoľko interných systémov a premenovaním stĺpcov by sa toho mohlo pokaziť viac než očakávam? Jedno z jednoduchých riešení je vytvoriť view v databáze, kde tie sĺpce premenujete a až z neho následne exportujete dáta von. 


Logické rozdelenie dát


Nasledovná situácia sa veľa ľudom nemusí zdať ako nejaký problém, avšak ak chcete aby vaše otvorené dáta priniesli aj vyššiu pridanú hodnotu a boli použité do nejakej rozumnej aplikácie, skúste sa na tento krok zamerať. Logické rozdelenie vysvetlím na príkladoch.

Príklad 1

Majme tabuľku faktúr, kde jeden zo stĺpcov uvádza sumu na faktúre. Ak je vaša organizácia platca DPH a vy si vediete záznamy, či je platba s alebo bez DPH, vytvorte tejto informácii ďalší stĺpec. Taktiež ak nakupujete tovary a služby na internete z krajín kde nie je euro, pridajte stĺpec pre menu. Pre ľudí pracujúcich s databázami to je samozrejmosť, ale všímam si, že je úplne bežne vytvárať datasety, kde je stĺpec Suma s hodnotou "1025,43 EUR bez DPH" a hneď pod ním "900 € s DPH" (áno, cielene som sem rovno zahrnul ďalší problém a to je nejednotnosť v dátach, raz slovom, raz znakom symbol eura). Už pri vložení takýchto údajov do Excelu nebudete vedieť rýchlo spočítať celkovú sumu za vami zvolené obdobie a programátor bude musieť vytvoriť ďalších pár riadkov kódu, kde extrahuje z tejto hodnoty údaj o DPH a mene. Správne by teda tento údaj bol napríklad v CSV súbore so stĺpcom Suma a hodnotou "1025,43", Mena s hodnotou "EUR" a stĺpec DPH s hodnotou "nie".

Príklad 2

Majme dataset zmlúv vo forme JSON súboru. Na tomto príklade jednoducho ukážem výhody JSON súboru oproti tabuľkám v CSV súboroch. Zmluva môže mať dve ale aj viac zmluvných strán. Zatiaľ čo v CSV formáte nemôžete pridať stĺpce s extra názvami firiem len pre pár riadkov ak neviete aké maximum možných zmluvných strán budete raz v dátach mať, pri JSON formáte môžete vytvoriť kľúč s názvom "zmluvne_strany" a do neho vložiť pole záznamov s 1 až N zmluvnými stranami. Preto ak máte viac zmluvných strán, v CSV spravte kompromis a vložte ich do jedného stĺpca, oddeľte jasným delimiterom/oddeľovačom  (určite nepoužívajte čiarku, čo je bežne videný problém, oddeľovať názvy firiem čiarkou, keď čiarka býva v samotnom názve firmy) a držte sa jednotného poradia (aby ste rovnako mohli zoskupiť IČO), ale určite to rovnako nevkladajte do JSON súboru, ale využite jeho prednosti.


Unikátne identifikátory


Vždy ak máte možnosť, vložte do datasetu aj unikátne identifikátory. Napríklad ak pripravujete dataset pre faktúry, či objednávky, vždy zverejnite IČO dodávateľov a pre uľahčenie práce tým, ktorí vaše dáta chcú zahrnúť do niečoho väčšieho, pridajte aj IČO vašej organizácie/úradu. Ak máte v systéme údaje o naviazaných dátach, ako napríklad číslo objednávky k faktúre, zverejnite ich. Taktiež ak niekde zverejňujete samotné dokumenty, pokúste sa vložiť aj link na súvisiaci dokument (link na scan objednávky do tabuľky objednávok napr.).


Čisté dáta


Pre čisté dáta je nutné nie len nastaviť určité pravidlá pri exportovaní datasetov, ale aj vzdelávať užívateľov, ktorí tie dáta tvoria. Ak k nejakému záznamu nemáte konkrétny údaj (napr. vám chýba adresa dodávateľa), nechajte ho prázdny, nedávajte do datasetu miesto prázdneho miesta pomlčku, medzeru, či ľubovoľný znak, ktorý sa zrovna zamestnancovi, vypĺňajúc Excel/interný systém pozdával. Taktiež ak je to možné, eliminujte "enter", teda nový riadok v jednotlivých záznamoch. Drvivú väčšinu času neprinesie dátam pridanú hodnotu a len sťaží prácu s CSV súbormi.

Ak sa pri CSV súboroch rozhodnete používať úvodzovky ako doplnkový delimiter/oddeľovač záznamu, nastavte systém, aby ho použil pri každom zázname. Osobne však preferujem rozumnejší hlavný delimiter/oddeľovač (napríklad tilda "~" pri bežných slovenských dátach nerobí problém, alebo môj obľúbený kombinovaný " |~| ", ktorý však už nie každý Excel vie spracovať), než používanie úvodzoviek ako doplnkového. Problém totiž nastáva v situácii, keď máte v názve objednávky úvodzovky, čo ako sledujem dáta, nie je žiadna výnimka, ale úplne bežná vec. 

Toto

Zmluva12345;"Nový projekt: opendata "ako zverejňovať?"; 1x ABC; Firma1; cena 45,50 EUR";45,5;23.11.2020;Firma 1, s.r.o.;Záhradnícka 1;82101;Bratislava;0011223344;

sa dá zverejniť aj takto

Zmluva1234~Nový projekt: opendata "ako zverejňovať?"; 1x ABC; Firma1; cena 45,50 EUR~45,5~23.11.2020~Firma 1, s.r.o.~Záhradnícka 1~82101~Bratislava~0011223344~


Preklepy sú bežná chyba, ktorej sa nie je ľahké vyhnúť, ale ak je to možné, požiadajte dodávateľa systému, v ktorom spracúvate svoje dáta, aby niektoré položky napojil na referenčné registre. Ušetríte tým veľa času zamestnancom, ktorí musia dokola ručne vypisovať IČO, názov a adresu dodávateľa, keď by sa podľa IČO dali dohľadať zvyšné údaje a odstránili by sa bežné preklepy ako "Bratsliava".


Ako ďalej?


Ak máte možnosť, pred zverejnením si svoje pravidlá/vzorové datasety nechajte skontrolovať niekým fundovaným. Po zverejnení neberte kritiku ako urážku a snahu zhodiť vašu snahu zverejniť dáta, ale tešte sa, že vaše dáta niekto chce reálne používať a má záujem vám spätnou väzbou pomôcť zlepšovať kvalitu. Berte však do úvahy, že ak raz začnete zverejňovať nekvalitné dáta, po určitej dobe bude komplikované robiť veľké opravy bez toho, aby ste nahnevali aktívnych používateľov, preto chyby opravujte čo najrýchlejšie.

Napriek tomu, že kvalitné údaje sú veľmi dôležité, ak vám to čas a prostriedky neumožňujú, nemusíte sa snažiť hneď dosiahnuť perfektný stav. Aj nejaké dáta sú lepšie ako žiadne, akurát netreba zabúdať na  postupné vylepšovanie vďaka spätnej väzbe od užívateľov. Taktiež popremýšľajte ako aktívne komunikovať s konzumentami vašich dát. Či už formou newslettera, aktívnej facebookovej stránky, alebo zriadením diskusného fóra môžete informovať o novinkách, úpravách, ktoré pripravujete a taktiež jednoduchšie zbierať spätnú väzbu. 



Problémy ktoré som opísal nie sú jediné, ale veľa záleží od typu dát a hlavne systému, z akého tie dáta extrahujete. Jednoduchšie sa robia korekcie nad databázou, kde sa dá pripraviť odladené databázové view určené na extrakt, než Excelovská tabuľka, ktorá je roky zaužívaná a koluje medzi x zamestnancami na zdieľanom úložisku. Ak si neviete rady a záleží vám na vašich dátach, ktoré púšťate do sveta, ozvite sa napr. vyššie spomenutej neziskovke Alvaria, či mne a v rámci možností sa vám dostane pomoci. 


Ak sa vám tento článok, či projekty na ktorých robím (UVOstat, Otvorená Bratislava) páčia, môžete ma podporiť pravidelnými platbami cez portál Patreon, alebo jednorázovo cez PayPal. Ďakujem

Autor: Miro Babič
Tagy:
opendata