Aplicación web tipo dashboard que busca presentar de forma sencilla y compacta los principales indicadores de la economía chilena.
Los datos de este repositorio se actualizan automáticamente cada 12 horas por medio de GitHub Actions. Estos datos se obtienen realizando web scraping al sitio web del Banco Central. usando el paquete de R {rvest}
.
- PIB
- IMACEC
- IPC
- IPSA
- UF
- Tasa de desempleo
- Índice de remuneraciones reales
- Inversión extranjera (nuevo)
- Precio del cobre (nuevo)
- Indicador de fecha de actualización de los datos, y de dato más reciente (excluyendo la UF, que es diaria)
- Ajustes menores de la interfaz
- Nuevo indicador: inversión extranjera directa (IED)
- Nuevo indicador: precio del cobre
- Interpretación automática de las tendencias de aumento/disminución
Lanzamiento de la app
El script obtener_datos.R
realiza el web scraping desde el Banco Central, y guarda los resultados sólo si es que encuentra diferencias con los datos preexistentes. Este script es ejecutado cada 12 horas en GitHub Actions. Toma aprox. 5 minutos en ejecutarse, y si encuentra datos nuevos, los sube al repositorio. El script de automatización, con las especificaciones del contenedor que crea, se encuentran en .github/workflows/scrapear_bancocentral.yaml
.
La aplicación web, por su parte, carga los datos directamente desde el repositorio de GitHub, en formato .csv, y por lo tanto, la aplicación cuenta con datos actualizados sin necesidad de actualizar la aplicación misma, ya que obtiene sus datos remotamente. Si por algún motivo no se pudieran cargar los datos desde el repositorio, la app tiene versiones antiguas de los datos como plan B.
Podrían obtenerse los datos desde la app directamente por medio de scraping usando las mismas funciones que se automatizan en el workflow de GitHub Actions, pero sería poco considerado con el servidor del Banco Central. Del mismo modo, podría optimizarse la carga de los datos, ya que actualmente cada dato se guarda en un solo archivo .csv, pero no creo que valga la pena volver más engorroso el proceso para ahorrar 4 segundos. Finalmente, otro punto de optimización sería que toda la app fuera un reporte Quarto estático.
La app en sí se caracteriza por estar completamente optimizada en su estructura de código, dado que todos los elementos son generados con funciones. Por lo tanto, basta con copiar y pegar aproximadamente 6 bloques breves de código para agregar un indicador nuevo, incluyendo la automatización de su obtención de datos.
- crear una función
obtener_fuente()
, posiblemente usando las funcionesscrapear_tabla_bc()
ylimpiar_tabla_bc()
- agregar la función al script
obtener_datos.R
, y también albind_rows()
para uqe se agregue a la base de datos final - cargar el dato específico en la app, filtrando la base por el id del dato (
datos |> filter(dato == "fuente")
) - filtrar el dato por la
serie
apropiada, y usandocalcular_metricas()
para que se calcule todo lo necesario - agregar el dato a la tabla de tendencias con
tendencia_ui()
- crear el texto con
tendencia_texto()
, peor primero hay que especificar dentro de esa función la interpretación de si el valor sube, baja o se mantiene - crear el panel de tendencias con
panel_tendencia()
, que usa los dos outputs de los pasos 5 y 6 - crear el panel de cuadritos en el UI
- crear los outputs para el panel de cuadritos con las funciones
dato_ui()
,grafico_variacion()
ygrafico_historico()
Si bien son muchos pasos, todos son muy cortos. Sería posible automatizarlos todos (especificando una vez el id del dato y algunos metadatos del dato para que se produzca todo lo demás de forma automática), pero no creo que valga la pena