import urllib.request, json
import requests
import pandas as pd
Análizamos el resultado de uno de los endpoints disponibles y vemos que existe un total de 100 datasets en Teruel.
get_count_uri = "https://236ws.dpteruel.es/transparencia/dpteruel/open-data/api/v1/getCount"
r = requests.get(get_count_uri)
total_dataset_count = r.json()['result']['results']
print(total_dataset_count)
[100]
Hacemos una primera petición para obtener todos los datasets y ver con que podemos trabajar y descubrimos que de los 100 indicados en el apartado anterior tan solo vemos 8 resultados disponibles.
get_all_uri = "https://236ws.dpteruel.es/transparencia/dpteruel/open-data/api/v1/getAll"
r = requests.get(get_all_uri)
all_datasets = r.json()['result']['results']
all_datasets_df = pd.DataFrame.from_dict(all_datasets)
all_datasets_df = all_datasets_df.set_index('id')
all_datasets_df.shape
(10, 7)
Como podemos ver tenemos los siguientes campos disponibles:
all_datasets_df.columns.values
array(['title', 'url', 'date', 'last_modified_date', 'categories', 'resources', 'tags'], dtype=object)
all_datasets_df.head()
title | url | date | last_modified_date | categories | resources | tags | |
---|---|---|---|---|---|---|---|
id | |||||||
2751 | Informes periódicos de la ejecución de los pre... | https://236ws.dpteruel.es/transparencia/dpteru... | 2021-05-05 10:39:02 | 2021-05-05 10:39:47 | [Economía] | [{'url': 'https://236ws.dpteruel.es/transparen... | NaN |
2744 | Liquidación del presupuesto del ejercicio ante... | https://236ws.dpteruel.es/transparencia/dpteru... | 2021-05-05 10:29:34 | 2021-05-05 10:30:58 | [Economía] | [{'url': 'https://236ws.dpteruel.es/transparen... | NaN |
2741 | Presupuestos generales anuales - 2021 | https://236ws.dpteruel.es/transparencia/dpteru... | 2021-03-01 11:58:59 | 2021-03-01 12:01:30 | [Economía] | [{'url': 'https://236ws.dpteruel.es/transparen... | NaN |
2641 | Informes periódicos de la ejecución de los pre... | https://236ws.dpteruel.es/transparencia/dpteru... | 2020-05-26 10:47:02 | 2021-02-23 11:47:31 | [Economía] | [{'url': 'https://236ws.dpteruel.es/transparen... | NaN |
2599 | Cumplimiento de los periodos de pago a proveed... | https://236ws.dpteruel.es/transparencia/dpteru... | 2020-02-10 11:33:40 | 2021-01-25 11:34:32 | [Economía] | [{'url': 'Periodo Medio de Pago enero 2020', '... | NaN |
Si nos fijamos solamente en los titulos de los datasets, vemos que todos ellos hacen referencia a presupuestos.
all_datasets_df.title.to_list()
['Informes periódicos de la ejecución de los presupuestos - Ejercicio 2021', 'Liquidación del presupuesto del ejercicio anterior (2020)', 'Presupuestos generales anuales - 2021', 'Informes periódicos de la ejecución de los presupuestos - Ejercicio 2020', 'Cumplimiento de los periodos de pago a proveedores - Ejercicio 2020', 'Modificaciones presupuestarias aprobadas - Ejercicio 2020', 'Inversión financieramente sostenible 2020 a financiar con el superávit presupuestario de la Liquidación del Presupuesto de 2019', 'Liquidación del presupuesto del ejercicio anterior (2019)', 'Plan presupuestario a medio plazo (2021-2023) de la Diputación Provincial de Teruel', 'Plan estratégico de subvenciones 2020-2023']
all_datasets_df.categories
id 2751 [Economía] 2744 [Economía] 2741 [Economía] 2641 [Economía] 2599 [Economía] 2613 [Economía] 2690 [Economía] 2647 [Economía] 2638 [Economía] 2607 [Plan estratégico] Name: categories, dtype: object
all_datasets_df.tags
id 2751 NaN 2744 NaN 2741 NaN 2641 NaN 2599 NaN 2613 NaN 2690 NaN 2647 NaN 2638 NaN 2607 [plan estratégico, subvenciones] Name: tags, dtype: object
Si creamos un dataset con los recursos de todos los conjuntos de datos disponibles vemosque tenemos un total de 54 a nuestra dispocición. Algo que dista mucho de los 100 que nos habían indicado al inicio.
columns = ['title', 'categories', 'tags', 'resources']
all_datasets_df = all_datasets_df[columns]
all_datasets_df['tags'] = all_datasets_df['tags'].apply(lambda d: d if isinstance(d, list) else [])
all_datasets_df.resources.to_list()[0]
[{'url': 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ejec-presu/P4400000H-2021-LIQUIDACION-TRIMESTRAL-PRESUPUESTOS-1T.xml', 'description': 'Informe de ejecución del presupuesto de la Diputación, 1er. trimestre 2021', 'title': 'Informe de ejecución del presupuesto de la Diputación, 1er. trimestre 2021', 'format': 'XML'}, {'url': 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ejec-presu/G44010965-2021-LIQUIDACION-TRIMESTRAL-PRESUPUESTOS-1T.xml', 'description': 'Informe de ejecución del presupuesto del Instituto de Estudios Turolenses, 1er. trimestre 2021', 'title': 'Informe de ejecución del presupuesto del Instituto de Estudios Turolenses, 1er. trimestre 2021', 'format': 'XML'}]
resources = all_datasets_df.resources.to_list()
resources_df = pd.DataFrame(columns=['url', 'description', 'title', 'format'])
for dataset_resources in resources:
resources_df = resources_df.append(dataset_resources, ignore_index=True)
resources_df.shape
(54, 4)
Si vemos los formatos disponibles, veremos que tan solo hay tres posibilidades y uno desconocido.
resources_df.format.unique()
array(['XML', 'TXT', None, 'PDF'], dtype=object)
Si miramos los recursos en formato TXT vemos que los resultados son comprensibles y puede que transladables a un dataFrame, parece una salidad de una consulta de SQL.
resources_df[resources_df.format == 'TXT'].url.to_list()
['https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ejec-presu/MINHAP-PRIMER-TRIMESTRE-DPT-2020-1T.txt', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ejec-presu/MINHAP-SEGUNDO-TRIMESTRE-DPT-2020-2T.txt', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ejec-presu/MINHAP-SEGUNDO-TRIMESTRE-DPT-2020-3T.txt']
resources_df[resources_df.format == 'XML'].url.to_list()
['https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ejec-presu/P4400000H-2021-LIQUIDACION-TRIMESTRAL-PRESUPUESTOS-1T.xml', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ejec-presu/G44010965-2021-LIQUIDACION-TRIMESTRAL-PRESUPUESTOS-1T.xml', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/liq-ptto-anterior-2020/P4400000H-2020-LIQUIDACION-PRESUPUESTOS.xml', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/liq-ptto-anterior-2020/G44010965-2020-LIQUIDACION-PRESUPUESTOS.xml', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ppto-2021/PPTO-2021-DPT-PENLOC.xml', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ppto-2021/PPTO-2021-IET-PENLOC.xml', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ejec-presu/P4400000H-2020-LIQUIDACION-TRIMESTRAL-PRESUPUESTOS-1T.xml', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ejec-presu/G44010965-2020-LIQUIDACION-TRIMESTRAL-PRESUPUESTOS-1T.xml', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ejec-presu/P4400000H-2020-LIQUIDACION-TRIMESTRAL-PRESUPUESTOS-2T.xml', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ejec-presu/G44010965-2020-LIQUIDACION-TRIMESTRAL-PRESUPUESTOS-2T.xml', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ejec-presu/P4400000H-2020-LIQUIDACION-TRIMESTRAL-PRESUPUESTOS-3T.xml', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ejec-presu/G44010965-2020-LIQUIDACION-TRIMESTRAL-PRESUPUESTOS-3T.xml', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ejec-presu/P4400000H-2020-LIQUIDACION-TRIMESTRAL-PRESUPUESTOS-4T.xml', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/ejec-presu/G44010965-2020-LIQUIDACION-TRIMESTRAL-PRESUPUESTOS-3T.xml', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/liq-ptto-anterior-2019/P4400000H-2019-LIQUIDACION-PRESUPUESTOS.xml', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/liq-ptto-anterior-2019/G44010965-2019-LIQUIDACION-PRESUPUESTOS.xml']
resources_df[resources_df.format == 'PDF'].url.to_list()
['https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/modif-ppto/EXPTE-MODIF-CTO-01-2020-DPT.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/modif-ppto/EXPTE-MODIF-CTO-02-2020-DPT.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/modif-ppto/EXPTE-MODIF-CTO-03-2020-DPT.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/modif-ppto/EXPTE-MODIF-CTO-04-2020-DPT.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/modif-ppto/EXPTE-MODIF-CTO-05-2020-DPT.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/modif-ppto/EXPTE-MODIF-CTO-06-2020-DPT.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/modif-ppto/EXPTE-MODIF-CTO-07-2020-DPT.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/modif-ppto/EXPTE-MODIF-CTO-08-2020-DPT.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/modif-ppto/EXPTE-MODIF-CTO-09-2020-DPT.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/modif-ppto/EXPTE-MODIF-CTO-10-2020-DPT.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/modif-ppto/EXPTE-MODIF-CTO-11-2020-DPT.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/modif-ppto/EXPTE-MODIF-CTO-12-2020-DPT.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/modif-ppto/EXPTE-MODIF-CTO-13-2020-DPT.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/modif-ppto/EXPTE-MODIF-CTO-14-2020-DPT.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/INF-INV-FIN-SOST-SUPERAVIT.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/liq-ptto-anterior-2019/P4400000H-2019-LIQUIDACION-PRESUPUESTOS.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/liq-ptto-anterior-2019/G44010965-2019-LIQUIDACION-PRESUPUESTOS.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/economia/PLAN-PRESUPUESTARIO-DPT-2021-2023.pdf', 'https://236ws.dpteruel.es/transparencia/dpteruel/recurso/legislacion-justicia/PES 2020-2023TextoConsolidado.pdf']