kokes / od

Česká otevřená data
Mozilla Public License 2.0
132 stars 16 forks source link

Adding feature of getting company's business scope from business registry to output (ARES) #218

Open sedmar opened 2 years ago

sedmar commented 2 years ago

Pridani schopnosti zpracovat pri parsovani ARESu pole predmet cinnost a predmet podnikani. Do vystupniho csv je pridan sloupec "cinnosti" kde v kazdem radku je json dictionary s klici PredmetPodnikaniText a PredmetCinnostiText. Hodnoty u kazdeho klice jsou strednikem oddelene predmety cinnosti pripadne predmety podnikani (muze byt 0 nebo N).

kokes commented 2 years ago

Ahoj, díky za PR!

  1. Ten timestamp u csv exportu se mi líbí, často se mi stává, že si přemažu starý exporty. Asi by to mělo být separé PR, ale tady to asi nevadí, protože nemám moc námitek
  2. K těm činnostem... hele, já bych je tam klidně měl, ale nejsem moc fanda hodně složitých datových JSON struktur v rámci jednoho sloupce. a) blbě se to dotazuje (je to samý UNNEST, split na středník a pak zpátky atd.), b) dost to navyšuje velikost řádku a tím pádem cache efficiency při dotazování. Navíc v tomhle případě jde o docela tučný element, takže já bych se vůbec nebránil nové tabulce. Navíc se to pak obejde bez nových funkcí pro extrakci dat. Svůj nástřel dávám zde (chybí tam aktualizace schema.py, ale to je triviální).
diff --git a/data/ares/main.py b/data/ares/main.py
index 8ff002f..9a96cff 100644
--- a/data/ares/main.py
+++ b/data/ares/main.py
@@ -87,10 +87,13 @@ def remote_data(partial):
 def main(outdir: str, partial: bool = False):
     with open(os.path.join(outdir, "firmy.csv"), "w", encoding="utf8") as ud, open(
         os.path.join(outdir, "fosoby.csv"), "w", encoding="utf8"
-    ) as fo, open(os.path.join(outdir, "posoby.csv"), "w", encoding="utf8") as po:
+    ) as fo, open(os.path.join(outdir, "posoby.csv"), "w", encoding="utf8") as po, open(
+        os.path.join(outdir, "cinnosti.csv"), "w", encoding="utf8"
+    ) as co:
         udc = csv.writer(ud, lineterminator="\n")
         foc = csv.writer(fo, lineterminator="\n")
         poc = csv.writer(po, lineterminator="\n")
+        coc = csv.writer(co, lineterminator="\n")

         cols = [
             "zdroj",
@@ -133,6 +136,13 @@ def main(outdir: str, partial: bool = False):
                 "adresa",
             ]
         )
+        coc.writerow(
+            [
+                "ico",
+                "typ_cinnosti",
+                "text",
+            ]
+        )

         for rw, (el, fl) in enumerate(remote_data(partial)):
             et = lxml.etree.fromstring(fl)
@@ -203,6 +213,13 @@ def main(outdir: str, partial: bool = False):
                 for j in org["posoby"]:
                     poc.writerow(j)

+            for txt in vypis.iterfind(
+                ".//are:Cinnosti/*/are:Text", namespaces=et.nsmap
+            ):
+                text = txt.text.strip()
+                ctype = txt.getparent().tag.rpartition("}")[-1]
+                coc.writerow([ico, ctype, text])
+

 if __name__ == "__main__":
     main(".")

Celý soubor bez diffu je tady: https://gist.github.com/kokes/c2f155c26a03ac93a50fe7e52e7a15a4

Co myslíš?

sedmar commented 2 years ago

Ahoj, sorry za zpozdeni, ted jsem zkousel to tvoje navrhovane reseni a libi se mi vic, z pohledu datovych struktur je to asi i cistsi nez to moje.