Keďže sa v SR v súčasnosti rozbieha činnosť dátových kancelárií a dátových kurátorov (viď povedzme položku "Zriadenie dátovej kancelárie vo verejnej správe" v Národnáňej koncepcii informatizácie verejnej správy (NKIVS)), tak o.i. vyvstala drobná praktická otázka, čo si má čerstvý nový dátový kurátor, alebo laik, predstaviť pod pojmom "čistenie dát"? Pojem to je vlastne veľmi dôležitý, keďže konzument údajov vie málokedy použiť údaje rovno v takej forme, v akej ich získal. Údaje totiž treba takmer vždy skonvertovať, prečistiť, spárovať a pod., aj preto idú mnohé štátne či súkromné investície to tzv. ETL nástrojov (ETL = Extract Transform Load), pričom práve krok "transform" má na starosti o.i. čistenie dát.

Čistenie obnáša mnohé veci, od jednoduchých (konverzie znakovej sady alebo použitých rozdeľovacích znakov, atď.) až po zložité (detekcia duplicít a preklepov, ich následná oprava, prepojenie údajov z jedného zdroja s údajmi z iného zdroja, atď.). Na začiatok si ukážme zopár jednoduchých príkladov. A aby príspevok nebol až taký "suchý", ilustrujem ich na otvorených údajoch z Elektronického kontraktačného systému (EKS), ktorých kópiu si môžete zadovážiť napr. na adrese https://github.com/OpenDataSk/eks-od-data .

Príklad EKS: ZoznamZakaziekReport_2018-12_.csv

Obsah súboru vyzerá nasledovne (prvé tri riadky):

"IdentifikatorZakazky","ZakazkaUrl","StavZakazky","PouzityPostup","ObjednavatelDruh","ObjednavatelObchodneMeno","ObjednavatelICO","ObjednavatelStat","ObjednavatelObec","ObjednavatelPSC","ObjednavatelUlica","DatumVyhlasenia","DatumZazmluvnenia","OpisnyFormularNazov","OpisnyFormularKlucoveSlova","OpisnyFormularCpv","OpisnyFormularDruh","OpisnyFormularKategoriaSluzieb","OpisnyFormularFunkcnaSpecifikacia","OpisnyFormularTechnickaSpecifikaciaTextova","OpisnyFormularTechnickaSpecifikaciaCiselna","MiestoPlneniaStat","MiestoPlneniaKraj","MiestoPlneniaOkres","MiestoPlneniaObec","MiestoPlneniaUlica","LehotaPlneniaOd","LehotaPlneniaDo","LehotaPlneniaPresne","MnozstvoJednotka","MnozstvoHodnota","MaximalnaVyskaZdrojov","ZmluvnyVztah","FinancovanieEU","HodnotiaceKriterium","LehotaNaPredkladaniePonuk","PocetNotifikovanychDodavatelov","VstupnaCena","PocetSutaziacich","PocetPredlozenychPonuk","ZaciatokAukcie","TrvanieAukcie_Minut","PredlzovanieAukcie_Minut","ProtokolOPriebehuZadavaniaZakazky","Priloha_c1_ZmluvnyFormularZakazky","Priloha_c2_VyslednePoradieDodavatelov","Priloha_c3_Zmluva","Priloha_c4A_ZaznamOSystemovychUdalostiachZakazky","Priloha_c4B_ZaznamOSystemovychUdalostiachElektronickejAukcie","AnonymnyZmluvnyFormularZakazky","ObjednavkovyFormularZakazky",
"Z201850369","https://portal.eks.sk/SpravaZakaziek/Zakazky/Detail/213294","zazmluvnená","§ 110 ZVO","§ 7 ods. 1 písm. d)","Národný onkologický ústav","00165336","Slovenská republika","Bratislava","83110","Klenová 1","21.11.2018 11:48:06","6.12.2018 12:10:00","Lieky ATC skupiny - N02BB02 Metamizol 500mg/ml, 1000mg/2ml","Metamizol 500mg/ml","33661200-3 Analgetiká; 60000000-8 Dopravné služby (bez prepravy odpadu)","Tovar; Služba","","Analgetiká","Technické vlastnosti: ATC skupina, Hodnota / charakteristika: N02BB02; Technické vlastnosti: názov účinnej látky, Hodnota / charakteristika: Metamizol; Technické vlastnosti: cesta podania, Hodnota / charakteristika: parenterálne; Technické vlastnosti: lieková forma, Hodnota / charakteristika: Injekčný roztok; Technické vlastnosti: doplnok, Hodnota / charakteristika: sol inj 10x2 ml/1000 mg","Technické vlastnosti: celkový obsah liečiva v celkovom objeme roztoku, Jednotka: mg, Minimum: , Maximum: , Presná hodnota: 1000; Technické vlastnosti: celkový objem roztoku, Jednotka: ml, Minimum: , Maximum: , Presná hodnota: 2","Slovenská republika","Bratislavský","Bratislava III","Bratislava - mestská časť Nové Mesto","Klenová 1","","","","bal","750,0000","2706,820","Rámcová dohoda","False","Cena bez DPH","6.12.2018 9:32:00","265","2706,820","3","181","6.12.2018 9:47:00","20","2","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=f050ab3a-0530-4034-a593-bd3d8b8ead69","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=1ef5f3f1-f214-420a-9657-89e377635bd3","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=442e98da-0b27-41cc-8df2-cae803bdf475","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=b8f00118-89f5-4ec2-aadd-845437332e27","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=534fde1f-e471-4711-bef1-2959b09ed466","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=224a89cc-11c7-4b9e-9b2e-aaaab68c5cde","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=e3e4c60e-d064-4c0f-b018-3b9fce8c89db","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=64d2fc59-ac09-4e0e-bf0c-cb8dfc55d49f",
"Z201851359","https://portal.eks.sk/SpravaZakaziek/Zakazky/Detail/214284","zazmluvnená","§ 110 ZVO","§ 7 ods. 1 písm. a)","Okresný súd Nové Mesto nad Váhom","42025524","Slovenská republika","Nové Mesto nad Váhom","91519","Hviezdoslavova 37","21.11.2018 15:12:43","3.12.2018 15:44:00","Zabezpečenie stravovania zamestnancov prostredníctvom stravných lístkov.","Stravné poukážky, dodanie stravných poukážok, zabezpečenie stravovania v zmluvných stravovacích zariadeniach","30199770-8 Stravné poukážky; 55520000-1 Služby hromadného stravovania; 60000000-8 Dopravné služby (bez prepravy odpadu)","Tovar; Služba","","Zabezpečenie stravovania zamestnancov objednávateľa formou stravných poukážok vo vybraných stravovacích zariadeniach zmluvných partnerov dodávateľa, ktorí sú oprávnení tieto služby poskytovať.; Poskytovanie predmetu zákazky musí byť v súlade s ustanovením §152 ods.2 zák. č. 311/2011 Z.z. Zákonníka práce v znení neskorších predpisov.; Počas platnosti zmluvy je dodávateľ povinný mať uzatvorené zmluvy na využitie stravných poukážok s minimálne 10 zariadeniami v sídle verejného obstarávateľa. V prípade, že dodávateľ danú podmienku počas účinnosti zmluvy nebude spĺnať je verejný obstarávateľ oprávnený od zmluvy odstúpiť.  ","Technické vlastnosti: Stravná poukážka obsahuje, Hodnota / charakteristika: názov a logo dodávateľa; Technické vlastnosti: Stravná poukážka obsahuje, Hodnota / charakteristika: ochranné prvky proti falšovaniu používané pre tlač cenných papierov; Technické vlastnosti: Stravná poukážka obsahuje, Hodnota / charakteristika: rok platnosti stravnej poukážky; Technické vlastnosti: Stravná poukážka obsahuje, Hodnota / charakteristika: nominálnu hodnotu stravnej poukážky","Technické vlastnosti: Nominálna hodnota jednej stravnej poukážky, Jednotka: €, Minimum: , Maximum: , Presná hodnota: 4,80; Technické vlastnosti: Predpokladané množstvo odobratých stravných poukážok, Jednotka: ks, Minimum: 40000, Maximum: 41666, Presná hodnota: ","Slovenská republika","Trenčiansky","Nové Mesto nad Váhom","Nové Mesto nad Váhom","Hviezdoslavova 37","1.1.2019 15:04:00","31.12.2021 15:04:00","","ks","41666,0000","199999,000","Zmluva o poskytovaní služieb","False","Cena bez DPH","3.12.2018 15:06:00","545","199999,000","5","8","3.12.2018 15:21:00","20","2","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=26e3343a-bad5-405b-a492-1c0d3bbba5b1","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=e8b6daec-b993-4539-8d33-701613d72962","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=27cc2092-4223-4532-ae03-ad59a978048e","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=0391480a-65bf-4ab3-9ce7-12c97dbdebab","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=afd84937-dae0-4a7b-a288-c0c8b4e23262","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=da8f5cb6-ceaf-4f09-aab6-5d8123b93db1","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=0f897ab4-6962-4c06-8405-6dc5598cfa95","https://portal.eks.sk/Zakazky/StiahniZmluvnuPrilohuZakazky?correlationId=ef3690e6-f63c-4fb7-924b-dcb2cbd2f375",
...

Prvý riadok je hlavička, vďaka ktorej máme lepší prehľad, ktorý stĺpec čo obsahuje. Super.

Ďalšie dva riadky sú príkladom obsahu. Je v nich však niekoľko položiek, ktoré síce nie sú zlé (sú v súlade so štandardom RFC 4180), ale mierne komplikujú ďalšiu prácu s údajmi (ak ich chcem povedzme spracúvať v Python skripte a neskôr v databáze):

položkaEKS údajčo potrebujem v Python-e resp. neskôr v DBpoznámka
DatumVyhlasenia"21.11.2018 11:48:06"21.11.2018T11:48:06o.i. konvertujeme formát dátumu, aby bol dátum v tzv. ISO formáte a teda vedel som ho použiť priamo ako premennú typu 'datetime' (t.j. dátum s časom)
MnozstvoHodnota"750,0000"750.0o.i. konvertujeme čiarku (používaná podľa slovenského pravopisu) na bodku (programátorská konvencia), aby bola hodnota priamo použiteľná ako premenná typu 'float' (t.j. desatinné číslo)
PocetNotifikovanychDodavatelov"250"250odstraňujeme úvodzovky, aby bola hodnota priamo použiteľná ako premenná typu 'integer' (t.j. celé číslo)

Príklad, ako potom vyzerá reálny (a nie úplne dokonalý) Python skript, ktorý také čistenie robí, možno nájsť tu:

https://github.com/OpenDataSk/eks-od-datastore-pusher/blob/master/datastore_updater.py#L291,L331

Úryvok:

def convert_date(eks_date):
    """Convert date used by EKS to ISO date, e.g.:
        '5.3.2018 9:00:00' -> '2018-03-05T09:00:00'
    """

    if len(eks_date) <= 0:
        return None

    date = datetime.datetime.strptime(eks_date, '%d.%m.%Y %H:%M:%S')
    return date.isoformat()

(Kód je k dispozícii ako Open Source - BSD licencia, takže ho môžete kľudne použiť ďalej, či už celý alebo po kúskoch.)

A čo si z tohto príkladu môžeme odniesť? V tomto jednoduchom prípade až tak veľmi nevadí, ak by X (X > 0) konzumentov údajov robilo dokola tie isté drobné "čistiace" operácie. Mnohí by sa ale aj tak potešili, ak by časť týchto operácií robiť nemuseli. To by sa dalo, v tomto konkrétnom prípade, dosiahnuť drobnými úpravami v spôsobe, akým EKS zverejňuje údaje (všetko v súlade so štandardom):

  • používať úvodzovky len keď naozaj treba, t.j. tam, kde sú v hodnote použité čiarky (t.j. nie v číslach a krátkych reťazcoch, a pod.)
  • v desatinných číslach používať bodku (nie čiarku) ako oddeľovač desatinných miest


Význam toho, ako presne sú údaje publikované stúpa s tým, ako veľmi a ako zložito treba údaje čistiť. Čím je čistenie zložitejšie, tým konzumenti údajov viac uvítajú úpravy zverejňovania, ktoré čistenie eliminujú alebo uľahčia. A tiež, čím viac je konzumentov (čím väčšie vyššie spomenuté X), tým väčší dopad majú aj malé zmeny.

Toť teda krátke priblíženie pre dátových kurátorov alebo aj laikov, ktorí by neskôr mohli zlepšiť zverejňovanie niektorých otvorených údajov.

(Niektoré zložitejšie prípady popíšem možno nabudúce.)

Peter Hanečák, 19.12.2018

obrázok: NASA: "Goddard Engineers Prepare Hubble's New Batteries"

  • No labels