Caso de uso - Generación de indicadores

En esta prueba se demuestra el uso del método de generación de indicadores de la librería, junto con el retorno esperado. La función utilizada es única, generate_catalogs_indicators.

Ejemplo básico

Calculamos indicadores sobre un único catálogo. El método espera un objeto str (o unicode), con una ruta o URL a el data.json del catálogo.


In [13]:
import os
from pydatajson import DataJson

dj = DataJson()
catalog = os.path.join("samples", "catalogo-justicia.json")
dj.generate_catalogs_indicators(catalog)


Out[13]:
([{u'campos_optativos_pct': 12.54,
   u'campos_recomendados_pct': 62.96,
   u'catalogo_ultima_actualizacion_dias': 155.0,
   u'datasets_actualizados_cant': 4,
   u'datasets_actualizados_pct': 22.0,
   u'datasets_cant': 18,
   u'datasets_desactualizados_cant': 14,
   u'datasets_frecuencia_cant': {u'R/P0.5M': 2,
    u'R/P1D': 1,
    u'R/P1M': 9,
    u'R/P1Y': 1,
    u'R/P3M': 2,
    u'eventual': 3},
   u'datasets_meta_error_cant': 0,
   u'datasets_meta_ok_cant': 18,
   u'datasets_meta_ok_pct': 100.0,
   u'distribuciones_cant': 71,
   u'distribuciones_formatos_cant': {u'CSV': 70, u'RDF': 1}}],
 {u'campos_optativos_pct': 12.54,
  u'campos_recomendados_pct': 62.96,
  u'catalogo_ultima_actualizacion_dias': 155.0,
  u'catalogos_cant': 1,
  u'datasets_actualizados_cant': 4,
  u'datasets_actualizados_pct': 22.22,
  u'datasets_cant': 18,
  u'datasets_desactualizados_cant': 14,
  u'datasets_frecuencia_cant': {u'R/P0.5M': 2,
   u'R/P1D': 1,
   u'R/P1M': 9,
   u'R/P1Y': 1,
   u'R/P3M': 2,
   u'eventual': 3},
  u'datasets_meta_error_cant': 0,
  u'datasets_meta_ok_cant': 18,
  u'datasets_meta_ok_pct': 100.0,
  u'distribuciones_cant': 71,
  u'distribuciones_formatos_cant': {u'CSV': 70, u'RDF': 1}})

El método devuelve un objeto tuple con dos valores, el primero los indicadores del catálogo individual, y el segundo los indicadores de la red entera, que para este caso, al ser la red entera constituída por un único catálogo, son exactamente idénticos. Se calculan los siguientes indicadores:

  • Cantidad de datasets: datasets_cant
  • Cantidad de distribuciones: distribuciones_cant
  • Validez de los datasets: datasets_meta_ok_cant, datasets_meta_error_cant, datasets_meta_ok_pct
  • Actualidad del catálogo/datasets: catalogo_ultima_actualizacion_dias, datasets_actualizados_cant, datasets_no_actualizados_cant, datasets_actualizados_pct
  • Uso de campos optativos/recomendados: campos_recomendados_pct, campos_optativos_pct
  • Frecuencia de actualización de datasets: datasets_frecuencia_cant
  • Formatos de las distribuciones de los datasets: distribuciones_formatos_cant

Notar que los últimos dos son a su vez diccionarios, con las claves representando los formatos / frecuencias particulares y sus valores, la cantidad.

Varios catálogos

Si se pasa una lista de catálogos, se calculan varios indicadores a la vez, y los indicadores de la red entera contienen a la suma de los indicadores individuales.


In [18]:
import os
from pydatajson import DataJson

dj = DataJson()
catalogs = [
    os.path.join("samples", "catalogo-justicia.json"),
    "http://datos.gob.ar/data.json"
]
dj.generate_catalogs_indicators(catalogs)


Out[18]:
([{u'campos_optativos_pct': 12.54,
   u'campos_recomendados_pct': 62.96,
   u'catalogo_ultima_actualizacion_dias': 155.0,
   u'datasets_actualizados_cant': 4,
   u'datasets_actualizados_pct': 22.0,
   u'datasets_cant': 18,
   u'datasets_desactualizados_cant': 14,
   u'datasets_frecuencia_cant': {u'R/P0.5M': 2,
    u'R/P1D': 1,
    u'R/P1M': 9,
    u'R/P1Y': 1,
    u'R/P3M': 2,
    u'eventual': 3},
   u'datasets_meta_error_cant': 0,
   u'datasets_meta_ok_cant': 18,
   u'datasets_meta_ok_pct': 100.0,
   u'distribuciones_cant': 71,
   u'distribuciones_formatos_cant': {u'CSV': 70, u'RDF': 1}},
  {u'campos_optativos_pct': 14.6,
   u'campos_recomendados_pct': 38.13,
   u'catalogo_ultima_actualizacion_dias': 7.0,
   u'datasets_actualizados_cant': 4,
   u'datasets_actualizados_pct': 6.0,
   u'datasets_cant': 68,
   u'datasets_desactualizados_cant': 4,
   u'datasets_frecuencia_cant': {u'R/P1M': 2,
    u'R/P1Y': 1,
    u'R/P2Y': 1,
    u'R/P6M': 3,
    u'eventual': 1},
   u'datasets_meta_error_cant': 68,
   u'datasets_meta_ok_cant': 0,
   u'datasets_meta_ok_pct': 0.0,
   u'distribuciones_cant': 226,
   u'distribuciones_formatos_cant': {u'CSV': 156,
    u'JSON': 37,
    u'RDF': 1,
    u'XLS': 32}}],
 {u'campos_optativos_pct': 14.12,
  u'campos_recomendados_pct': 44.85,
  u'catalogo_ultima_actualizacion_dias': 162.0,
  u'catalogos_cant': 2,
  u'datasets_actualizados_cant': 8,
  u'datasets_actualizados_pct': 30.77,
  u'datasets_cant': 86,
  u'datasets_desactualizados_cant': 18,
  u'datasets_frecuencia_cant': {u'R/P0.5M': 2,
   u'R/P1D': 1,
   u'R/P1M': 11,
   u'R/P1Y': 2,
   u'R/P2Y': 1,
   u'R/P3M': 2,
   u'R/P6M': 3,
   u'eventual': 4},
  u'datasets_meta_error_cant': 68,
  u'datasets_meta_ok_cant': 18,
  u'datasets_meta_ok_pct': 20.93,
  u'distribuciones_cant': 297,
  u'distribuciones_formatos_cant': {u'CSV': 226,
   u'JSON': 37,
   u'RDF': 2,
   u'XLS': 32}})

Indicadores de federación

El método opcionalmente acepta un segundo parámetro: el catálogo central de la red de nodos. De estar presente, se calculan indicadores sobre la cantidad de datasets federados en la red central para cada catálogo, es decir, la cantidad de datasets del catálogo particular presentes en el catálogo central. El diccionario resultado contiene los indicadores datasets_federados_cant, datasets_no_federados_cant, datasets_federados_pct.


In [18]:
import os
from pydatajson import DataJson

dj = DataJson()
catalogs = [
    os.path.join("samples", "catalogo-justicia.json"),
]
central_catalog = "http://datos.gob.ar/data.json"
dj.generate_catalogs_indicators(catalogs, central_catalog)


Out[18]:
([{u'campos_optativos_pct': 12.54,
   u'campos_recomendados_pct': 62.96,
   u'catalogo_ultima_actualizacion_dias': 155.0,
   u'datasets_actualizados_cant': 4,
   u'datasets_actualizados_pct': 22.0,
   u'datasets_cant': 18,
   u'datasets_desactualizados_cant': 14,
   u'datasets_federados_cant': 18,
   u'datasets_federados_pct': 100.0,
   u'datasets_frecuencia_cant': {u'R/P0.5M': 2,
    u'R/P1D': 1,
    u'R/P1M': 9,
    u'R/P1Y': 1,
    u'R/P3M': 2,
    u'eventual': 3},
   u'datasets_meta_error_cant': 0,
   u'datasets_meta_ok_cant': 18,
   u'datasets_meta_ok_pct': 100.0,
   u'datasets_no_federados_cant': 0,
   u'distribuciones_cant': 71,
   u'distribuciones_formatos_cant': {u'CSV': 70, u'RDF': 1}}],
 {u'campos_optativos_pct': 12.54,
  u'campos_recomendados_pct': 62.96,
  u'catalogo_ultima_actualizacion_dias': 155.0,
  u'catalogos_cant': 1,
  u'datasets_actualizados_cant': 4,
  u'datasets_actualizados_pct': 22.22,
  u'datasets_cant': 18,
  u'datasets_desactualizados_cant': 14,
  u'datasets_federados_cant': 18,
  u'datasets_federados_pct': 100.0,
  u'datasets_frecuencia_cant': {u'R/P0.5M': 2,
   u'R/P1D': 1,
   u'R/P1M': 9,
   u'R/P1Y': 1,
   u'R/P3M': 2,
   u'eventual': 3},
  u'datasets_meta_error_cant': 0,
  u'datasets_meta_ok_cant': 18,
  u'datasets_meta_ok_pct': 100.0,
  u'datasets_no_federados_cant': 0,
  u'distribuciones_cant': 71,
  u'distribuciones_formatos_cant': {u'CSV': 70, u'RDF': 1}})