Dataset BQuant Finance
BQuant Finance — Dataset historico
Dataset de 8,69 millones de registros historicos de licitaciones publicas recopilados y estructurados por BQuant Finance. Formato Parquet optimizado para analisis.
Ficha tecnica
- Formato
- Parquet
- Registros
- 8,69 millones
- Cobertura
- Historico
- Actualizacion
- Periodica
- Licencia
- Datos abiertos
- Entidad
- BQuant Finance
Descripcion
BQuant Finance ha recopilado y estructurado un dataset de 8,69 millones de registros de licitaciones publicas espanolas en formato Apache Parquet, optimizado para analisis con Python (pandas, polars) y herramientas de data science.
El repositorio en GitHub contiene el dataset completo con 48 campos por registro, incluyendo datos que no siempre estan disponibles en los feeds oficiales como el importe con IVA.
Estructura de datos
- id — Identificador unico
- expediente — Numero de expediente
- objeto — Descripcion del contrato
- tipo_contrato — Suministros, Servicios, Obras...
- procedimiento — Abierto, Restringido, Negociado...
- importe_licitacion — Importe sin IVA
- importe_adj_con_iva — Importe adjudicacion con IVA
- nif_adjudicatario — NIF/CIF del adjudicatario
- nombre_adjudicatario — Nombre del adjudicatario
- nuts — Codigo NUTS del lugar de ejecucion
- cpv — Codigo CPV del objeto
- fecha_publicacion, fecha_adjudicacion, fecha_formalizacion
Ejemplos de codigo
Cargar dataset con pandas python
import pandas as pd
# Descargar desde GitHub (o clonar el repo)
df = pd.read_parquet('licitaciones_espana.parquet')
print(f'Registros: {len(df):,}')
print(f'Columnas: {list(df.columns)}')
# Filtrar por CCAA (Andalucia = ES61)
andalucia = df[df['nuts'].str.startswith('ES61', na=False)]
print(f'Andalucia: {len(andalucia):,} contratos')
# Top 10 adjudicatarios por importe
top = df.groupby('nombre_adjudicatario')['importe_adj_con_iva'].sum()
print(top.sort_values(ascending=False).head(10)) Analisis con polars (mas rapido) python
import polars as pl
df = pl.read_parquet('licitaciones_espana.parquet')
# Contratos por tipo
print(df.group_by('tipo_contrato').agg(
pl.count().alias('n'),
pl.col('importe_licitacion').sum().alias('importe_total')
).sort('n', descending=True))