Python library that consumes the BCRP API, you can query the series and define the time range.
Project description
USEBCRP
Una biblioteca de Python que consume la API del Banco Central de Reservas del Perú (BCRP). Para descarga de series y rangos de tiempo determinados.
Explore the docs »
View Demo
·
Report Bug
·
Request Feature
Table of Contents
Acerca del proyecto
Esta biblioteca de Python, dedicado a consumir el API del Banco Central de Reservas del Perú (BCRP) y que descarga series de datos publicados desde la institución.
El API tiene la siguiente estructura:
https://estadisticas.bcrp.gob.pe/estadisticas/series/api/[códigos de series]/[formato de salida]/[periodo inicial]/[periodo final]/[idioma]
Tal como se observa en la API, esta conformado por una sección para:
- códigos de series
- formato de salida
- periodo inicial
- periodo final
- idioma
Esta información se encuentra en las tablas que comparten en el portal del BCRP.
Las secciones se detallan a continuación.
Códigos de series
Este es un parámetro obligatorio que requiere una extensión maxima de diez. Se puede agregar varios códigos de series separados por un guión.
En la estructura del API, la ubicación para ingresar los códigos de las series es la siguiente:
https://estadisticas.bcrp.gob.pe/estadisticas/series/api/[__códigos de series__]/../../../..
Los códigos de las series son un total de 16 446, los cuales están agrupadas en las siguientes categorías.
| Nro | Categoría de series | Cantidad | Porcentaje |
|---|---|---|---|
| 01 | Balanza comercial | 674 | 4.10% |
| 02 | Balanza de pagos | 7 | 0.04% |
| 03 | Balanza de pagos BPM5 | 995 | 6.05% |
| 04 | Banco Central de Reserva | 288 | 1.75% |
| 05 | Bolsa internacional | 1 | 0.01% |
| 06 | Caja del tesoro | 28 | 0.17% |
| 07 | Cotizaciones internacionales | 53 | 0.32% |
| 08 | Cuenta financiera | 119 | 0.72% |
| 09 | Deuda externa | 69 | 0.42% |
| 10 | Deuda pública | 206 | 1.25% |
| 11 | Empresas bancarias | 1 591 | 9.67% |
| 12 | Entre 1930 a 1980 | 1 418 | 8.62% |
| 13 | Expectativas empresariales | 156 | 0.95% |
| 14 | Expectativas Macroeconómicas | 3 | 0.02% |
| 15 | Exportaciones e importaciones | 1 482 | 9.01% |
| 16 | Gastos | 274 | 1.67% |
| 17 | Indicadores Internacionales | 29 | 0.18% |
| 18 | Indicadores de coyuntura | 21 | 0.13% |
| 19 | Inflación | 99 | 0.60% |
| 20 | Ingresos | 283 | 1.72% |
| 21 | Mercado de capitales | 218 | 1.33% |
| 22 | Mercado inmobiliario | 28 | 0.17% |
| 23 | Moneda y crédito | 111 | 0.67% |
| 24 | Operaciones de las empresas bancarias | 106 | 0.64% |
| 25 | Otras cuentas monetarias | 303 | 1.84% |
| 26 | Otros no categorizados | 30 | 0.18% |
| 27 | PBI gasto | 134 | 0.81% |
| 28 | PBI por sectores | 538 | 3.27% |
| 29 | PBI y demografía | 48 | 0.29% |
| 30 | Periodo colonial tardío | 244 | 1.48% |
| 31 | Periodo colonial temprano | 289 | 1.76% |
| 32 | Posición de activos y pasivos | 86 | 0.52% |
| 33 | Precios | 12 | 0.07% |
| 34 | Precios y tarifas | 12 | 0.07% |
| 35 | Presupuesto público | 4 | 0.02% |
| 36 | Primera centuria independiente | 596 | 3.62% |
| 37 | Producción | 1 449 | 8.81% |
| 38 | Remuneraciones y empleo | 35 | 0.21% |
| 39 | Renta de factores | 36 | 0.22% |
| 40 | Resultados de la balanza de pagos | 104 | 0.63% |
| 41 | Resultado económico | 395 | 2.40% |
| 42 | Sector público | 1 195 | 7.27% |
| 43 | Servicios | 54 | 0.33% |
| 44 | Sistema financiero | 642 | 3.90% |
| 45 | Sistemas de pagos | 1 058 | 6.43% |
| 46 | Sociedades creadoras de depósito | 489 | 2.97% |
| 47 | Tasas de interés | 235 | 1.43% |
| 48 | Tasas de interés internacionales | 26 | 0.16% |
| 49 | Tipo de cambio | 12 | 0.07% |
| 50 | Tipo de cambio de otras divisas | 24 | 0.15% |
| 51 | Tipo de cambio nominal | 81 | 0.49% |
| 52 | Tipo de cambio real | 29 | 0.18% |
| 53 | Términos de intercambio | 26 | 0.16% |
| 54 | Índice de reajuste diario | 1 | 0.01% |
Ejemplo
https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01270PM
Formato de salida
https://estadisticas.bcrp.gob.pe/estadisticas/series/api/../[__formato de salida__]/../../..
Existen 7 formatos de salida disponibles para el API del BCRP y son:
| Formato | Código para API | ejemplo |
|---|---|---|
| HTML | ../html | https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM/html |
| GRÁFICO | ../grafico | https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM/grafico |
| XLS | ../xls | https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM/xls |
| XML | ../xml | https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM/xml |
| JSON Y JSONP | ../json | https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM/json |
| TXT | ../txt | https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM/txt |
| CSV | ../csv | https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM/csv |
Periodo inicial y final
La ubicación de estos parámetros en la estructura del API es la siguiente:
https://estadisticas.bcrp.gob.pe/estadisticas/series/api/../../[__periodo inicial__]/[periodo final]/..
Con este parámetro se indica el periodo de tiempo, de la consulta de datos que se realiza a la API. Si no se coloca ningún datoa en estos espacios, se entiende que la consulta se realizara para los datos actuales.
Si se ingresa solo un periodo, la API respondera información solo de dicho periodo.
Ejemplos
- Un solo periodo
https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM/csv/2016-9
- Un periodo inicial y final
https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM/grafico/2010-1/2016-9/esp
- Sin periodo definido
https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM
Idioma
La ubicación del parámetro correspondiente al idioma, dentro del API es la siguiente:
https://estadisticas.bcrp.gob.pe/estadisticas/series/api/../../../../[__idioma__]
La API del BCRP soporta dos idiomas:
| Idioma | Código | Ejemplo |
|---|---|---|
| Español | Sin necesidad de agregar algo | https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM-PN01289PM/csv/2010-1/2016-9 |
| Ingles | ../ing | https://estadisticas.bcrp.gob.pe/estadisticas/series/api/PN01288PM/json/2010-1/2016-9/ing |
FUENTE
Esta sección se construyo en base a la información disponible del BCRP en las siguientes páginas
Construido con
Instalación
Este proyecto puede ser instalado directamente a su entorno virtual de trabajo.
La instalación se puede realizar de la siguiente manera:
-
Desde una terminal
(.venv) pip install usebcrp
-
Desde Jupyter o Google Colaboratory
!pip install usebcrp
Ejecutando los códigos anteriores, automáticamente se realizara la instalación de los paquetes complementarios a usebcrp.
Uso
La biblioteca de python, se puede usar de la siguiente manera:
1.- Se puede consultar en los metadatos, el nombre de una variable que se quiera descargar la información.
2.- Se puede descargar la información que expone el API del BCRP
Es importante señalar, que para el uso de la biblioteca "usebcrp" no necesitamos realizar alguna modificación en la API, dado que el paquete automaticamente gestiona la construcción del API para realizar las consultas. Esto lo realiza de acuerdo a los parametros que ingresemos.
I.- Consulta a los metadatos
Para realizar la consulta a los metadatos de la existencia de un indicador que pueda ser expuesta por la API, se procede de la siguiente manera.
- Instanciamos la clase
from usebcrp import BCRP
client_bcrp = BCRP()
- Luego de instanciar la clase, hacemos uso del metodo browse(), en este método se puede poner el texto del nombre de cualquier indicador que se quiera filtrar.
series = client_bcrp.browse("pesca")
- Luego hacemos una impresión del objeto y sus columnas.
# Imprimimos las variables
print(series.columns)
# Imprimimos los datos
print(series)
- Ejemplo completo
from usebcrp import BCRP
client_bcrp = BCRP()
series = client_bcrp.browse("pesca")
print(series.columns)
print(series)
Este codigo se puede ejecutar en un archivo ejemplo.py llamandolo desde la terminal.
(.venv) python ejemplo.py
Los resultados mostrados son los siguientes:
Nota: El objetivo de este proceso, se centra en conocer la existencia de un indicador que se quiere descargar desde la API del BCRP, realizando una consulta a los metados del BCRP.
II.- Descarga de la información
Una vez que se tenga identificado el indicador que se quiere descagar, podemos solicitar la información para luego exportarlo en un formato determinado.
- Instanciamos la clase BCRP
En este aspecto, se debe mencionar que los atributos de la clase BCRP son:
| Atributos | Tipo de dato | Descripción | Valor por defecto |
|---|---|---|---|
| cachepath | str, optional | Directory to cache API responses and export files. | None |
| verbose | bool, optional | If True, print debug messages. | False |
| sleep_sec | float, optional | Seconds to sleep after downloading to avoid overloading the server | 1.0 |
Entonces vamos a instanciar la clase BCRP() de la siguiente manera:
from usebcrp import BCRP
client_bcrp = BCRP(cachepath="cache_bcrp", verbose=True)
Se instancia en client_bcrp la clase BCRP(), con los atributos cachepath="cache_bcrp" que indica la creación de una carpeta que lleva este nombre; y el atributo "verbose=True" que permite que se muestren el procedimiento. En esta situación, no se instancio "sleep_sec", sin embargo, por defecto toma el valor de "1.0".
- Se hace uso del metodo "stat()" de la clase BCRP
En esta etapa, se llama el método stat() para descargar la información que se identificó con ayuda del metodo browse() o simplemente que ya se tenia mapeado anteriormente.
En este método, se puede ingresar el codigo de una serie o de varias series, asimismo, también se señala el periodo de tiempo que se quiere consultar.
Los argumentos de la función stat() son:
| Argumentos | Tipo de variable | Descripción | Valor por defecto |
|---|---|---|---|
| series | List | List of series codes to request | |
| range | str, optional | Date range as a string | None |
La lista de codigos de los indicadores que se quieren consultar, se deben poner entre comillas y separadas por una coma dentro de corchetes. Para el caso de range, se tiene que agregar el periodo de tiempo dentro de comillas y separadas por un espacio, empezando por el año seguidos por el mes.
...
df_stat = client_bcrp.stat(series=["PN38706PM", "PN38707PM"], range="2013-1 2024-9")
Luego podemos imprimir los resultados.
print("\n DataFrame from stat:")
print(df_stat.head())
Resultados
- Exportamos los resultados obtenidos
Se hace uso del método export_df(), diseñado para exportar los datos en diferentes formatos como csv, xlsx y dta. Los argumentos del método son los siguientes:
| Argumentos | Tipo de variable | Descripción | Valor por defecto |
|---|---|---|---|
| df | pd.DataFrame | DataFrame to export | |
| filename | str | Base file name(without extensión) | |
| fmt | str, optional | Export format: "csv", "xlsx", "dta" | "csv" |
Para exportar la información consultada, se ejecuta el siguiente código que es diferente para cada extensión.
En formato .csv
client_bcrp.export_df(df_stat, filename="data_stat", fmt="csv")
En formato .xlsx
client_bcrp.export_df(df_stat, filename="data_stat", fmt="xlsx")
En formato .dta
client_bcrp.export_df(df_stat, filename="data_stat", fmt="dta")
Los resultados de los códigos de exportación, se presentan a continuación:
- Ejemplo completo
from usebcrp import BCRP
client = BCRP(cachepath="cache_bcrp", verbose=True)
df_stat = client.stat(series=["PN38706PM", "PN38707PM"], range="2013-1 2024-9")
print("DataFrame from stat:")
print(df_stat.head())
client.export_df(df_stat, filename="data_stat", fmt="csv")
client.export_df(df_stat, filename="data_stat", fmt="xlsx")
client.export_df(df_stat, filename="data_stat", fmt="dta")
III.- Exportamos una tabla de variaciones
Para esta sección, se hara uso del método table() de la clase BCRP que tiene los siguientes argumentos:
| Argumentos | Tipo de variable | Descripción | Valor por defecto |
|---|---|---|---|
| series | list | List of series codes to request. | |
| range | str, optional | Date range as a string (e.g., "2013-1 2024-9"). | None |
| names | list, optional | New names for the columns (must match the length of series). | None |
| freq | str, optional | Resampling frequency (e.g., "ME" for month end, "MS" for month start, "QE" for quearter end, "QS" for quarter start, "YE" for year end, "YS" for year start). | None |
| collapse | function, str, list, or dict, optional | Aggregation function for resampling. Required if freq is specified. | None |
| variation | int of str, optional | If an integer, the number of months to shift for percent change; otherwise, passed directly to pct_change. | None |
| resample_kwargs | dict, optional | Additional keyword arguments for DataFrame.resample. | None |
| agg_kwargs | dict, optional | Additional keyword arguments for DataFrame.aggregate. | None |
El código completo que hace uso del método table() es el siguiente:
# Importamos la clase BCRP()
from usebcrp import BCRP
# Instanciamos la clase BCRP
client_bcrp = BCRP(cachepath="cache_client_table_bcrp", verbose=True)
# Señalamos los nombres de las columnas que exportamos
names = ["IPC sin alimentos", "IPC Alimentos"]
# Llamamos al método table()
df_table = client_bcrp.table(
series=["PN38706PM", "PN38707PM"],
range="2013-1 2024-9",
names=names,
freq="ME", # "ME" for month end; alternatives: "MS", "QE", "QS", "YE", "YS"
collapse="mean",
variation=1
)
# Exportamos los archivos
client_bcrp.export_df(df_stat, filename="data_stat", fmt="csv")
client_bcrp.export_df(df_stat, filename="data_stat", fmt="xlsx")
client_bcrp.export_df(df_stat, filename="data_stat", fmt="dta")
IV.- Resultados
Los resultados se presentan a continuación
Contribuidores
Las contribuciones son lo que hace de la comunidad de código abierto un lugar increíble para aprender, inspirarse y crear. Cualquier contribución que hagas es muy apreciada.
Si tienes alguna sugerencia para mejorar esto, por favor, bifurca el repositorio y crea una solicitud de extracción. También puedes simplemente abrir una incidencia con la etiqueta "mejora". ¡No olvides darle una estrella al proyecto! ¡Gracias de nuevo!
- Fork el proyecto
- Crea tu Feature Branch (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push el Branch (
git push origin feature/AmazingFeature) - Abre un Pull Request
Principales contribuidores:
Licencia
Distributed under the Unlicense License. See LICENSE for more information.
Como citar este repositorio
Contacto
Jelsin Palomino - @Linkedin - jstpalomino@hotmail.com
Maykol Medrano - @Linkedin - maykolmedrano35@gmail.com
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file usebcrp-1.0.0.tar.gz.
File metadata
- Download URL: usebcrp-1.0.0.tar.gz
- Upload date:
- Size: 22.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eaf55f048a10a82151fc6a0a03d45c1ccedc64fb9c37e226bae2d63076af47b8
|
|
| MD5 |
8b2746e73ef76509520a867796a398da
|
|
| BLAKE2b-256 |
33320124da56e2eef2400c8d542a551c27ebc4c066165e0d25f7928ceeda94a6
|
File details
Details for the file usebcrp-1.0.0-py3-none-any.whl.
File metadata
- Download URL: usebcrp-1.0.0-py3-none-any.whl
- Upload date:
- Size: 16.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9d1d9ea6a1716bcd3b6b3c400551a46cf9de266469ad486ec2b1eb7014b94b8
|
|
| MD5 |
e9bcf81c7c92cf6fea6b1cc31e1c75f8
|
|
| BLAKE2b-256 |
a7b97d3152a06a0bde2a64f56dbc639e0bbbb01872cd0fdec059cb0bc7bb94ab
|