Consolidación de Tipo de Cambio BCV desde Múltiples Archivos Excel

Author

Náyuha Palenzuela

Consolidación del tipo de cambio BCV

Para obtener los datos del tipo de cambio oficial del Banco Central de Venezuela debemos de ingresar a la página oficial https://www.bcv.org.ve/estadisticas/tipo-cambio-de-referencia-smc y descargar los documentos necesarios, estos se encuentran en formato .xls, para no tener dificultades a la hora de procesarlos es recomendable guardar de nuevo el documento, cambiar sus propiedades para que se convierta en un libro excel y así quede en formato .xlsx.

Una vez realizado los cambios de formato, se recomienda crear una carpeta con todos los documentos descargados para facilitar el proceso de extracción y limpieza de los datos.

Definimos la ruta de la carpeta de nuestros archivos

carpeta <- "C:/Users/usuario/Desktop/Semestre 2-2025/economia_internacional_II/internacional/tipo_de_cambio"  

Obtener todos los nombres de archivos Excel en esa carpeta

archivos <- list.files(path = carpeta, pattern = "\\.xlsx$", full.names = TRUE)

Leer un archivo y extraer la fila de interés

En nuestro caso queremos extrae el precio del dólar (USD), por lo que la fila que nos interesa es la 15.

leer_archivo <- function(archivo) {
  hojas <- excel_sheets(archivo)
  
  # Leer cada hoja (fila 15)
  datos_por_hoja <- map(hojas, function(hoja) {
    df <- read_excel(archivo, sheet = hoja, skip = 14, n_max = 1, col_names = FALSE)
    df <- df %>%
      mutate(hoja = hoja)
  })
  
  # Unir todas las hojas del archivo
  datos_archivo <- bind_rows(datos_por_hoja) %>%
    mutate(archivo = basename(archivo))
  
  return(datos_archivo)
}

Aplicamos la función para el resto de los archivos

todos_los_datos <- map_dfr(archivos, leer_archivo)

Renombramos las columnas y limpiamos

La estructura del excel del BCV tiene una particularidad que es de gran importancia, cada hoja esta nombrada con la fecha del tipo de cambio que se publicó, por ejemplo (03012022) por lo que debemos de cambiar el formato para poder extraer esta información.

tabla_final <- todos_los_datos %>%
  rename(
    moneda = ...1,
    pais = ...2,
    base = ...3,
    referencia = ...4,
    compra = ...5,
    venta = ...6
  ) %>%
  mutate(
    fecha = as.Date(hoja, format = "%d%m%Y")
  ) %>%
  select(fecha, moneda, pais, base, referencia, compra, venta, archivo)

Visualizamos la tabla y podemos observar que los datos obtenidos no tienen un orden, así que debemos de ordenar de forma ascendente o descendete.

print(tabla_final)
# A tibble: 916 × 8
   fecha      moneda pais    base referencia compra venta archivo          
   <date>     <chr>  <chr>  <dbl>      <dbl>  <dbl> <dbl> <chr>            
 1 2022-03-31 USD    E.U.A.     1          1   4.37  4.38 2_1_2a22_smc.xlsx
 2 2022-03-30 USD    E.U.A.     1          1   4.37  4.38 2_1_2a22_smc.xlsx
 3 2022-03-29 USD    E.U.A.     1          1   4.36  4.37 2_1_2a22_smc.xlsx
 4 2022-03-28 USD    E.U.A.     1          1   4.36  4.37 2_1_2a22_smc.xlsx
 5 2022-03-25 USD    E.U.A.     1          1   4.35  4.36 2_1_2a22_smc.xlsx
 6 2022-03-24 USD    E.U.A.     1          1   4.33  4.34 2_1_2a22_smc.xlsx
 7 2022-03-23 USD    E.U.A.     1          1   4.32  4.33 2_1_2a22_smc.xlsx
 8 2022-03-22 USD    E.U.A.     1          1   4.30  4.31 2_1_2a22_smc.xlsx
 9 2022-03-21 USD    E.U.A.     1          1   4.29  4.30 2_1_2a22_smc.xlsx
10 2022-03-18 USD    E.U.A.     1          1   4.30  4.31 2_1_2a22_smc.xlsx
# ℹ 906 more rows

Organizamos los datos de froma ascendente

tabla_final <- tabla_final %>%
  arrange(fecha)
tabla_final
# A tibble: 916 × 8
   fecha      moneda pais    base referencia compra venta archivo          
   <date>     <chr>  <chr>  <dbl>      <dbl>  <dbl> <dbl> <chr>            
 1 2022-01-03 USD    E.U.A.     1          1   4.58  4.59 2_1_2a22_smc.xlsx
 2 2022-01-04 USD    E.U.A.     1          1   4.59  4.60 2_1_2a22_smc.xlsx
 3 2022-01-05 USD    E.U.A.     1          1   4.59  4.60 2_1_2a22_smc.xlsx
 4 2022-01-06 USD    E.U.A.     1          1   4.61  4.62 2_1_2a22_smc.xlsx
 5 2022-01-07 USD    E.U.A.     1          1   4.62  4.64 2_1_2a22_smc.xlsx
 6 2022-01-11 USD    E.U.A.     1          1   4.63  4.64 2_1_2a22_smc.xlsx
 7 2022-01-12 USD    E.U.A.     1          1   4.63  4.64 2_1_2a22_smc.xlsx
 8 2022-01-13 USD    E.U.A.     1          1   4.62  4.64 2_1_2a22_smc.xlsx
 9 2022-01-14 USD    E.U.A.     1          1   4.62  4.63 2_1_2a22_smc.xlsx
10 2022-01-18 USD    E.U.A.     1          1   4.62  4.63 2_1_2a22_smc.xlsx
# ℹ 906 more rows

Realizamos una extracción de los datos que nos interesan

En este caso solo nos interesa mantener la columna de fecha, moneda, compra y venta.

tipo_de_cambio <- tabla_final %>%
  select(fecha, moneda, compra, venta)

tipo_de_cambio
# A tibble: 916 × 4
   fecha      moneda compra venta
   <date>     <chr>   <dbl> <dbl>
 1 2022-01-03 USD      4.58  4.59
 2 2022-01-04 USD      4.59  4.60
 3 2022-01-05 USD      4.59  4.60
 4 2022-01-06 USD      4.61  4.62
 5 2022-01-07 USD      4.62  4.64
 6 2022-01-11 USD      4.63  4.64
 7 2022-01-12 USD      4.63  4.64
 8 2022-01-13 USD      4.62  4.64
 9 2022-01-14 USD      4.62  4.63
10 2022-01-18 USD      4.62  4.63
# ℹ 906 more rows

Tabla con el Tipo de Cambio Oficial publicada por el BCV

tipo_de_cambio <- tabla_final %>%
  select(fecha, moneda, compra, venta)

# Mostrar tabla interactiva
datatable(
  tipo_de_cambio,
  options = list(
    pageLength = 10,        # número de filas visibles por página
    autoWidth = TRUE,       # ajuste automático de columnas
    searching = TRUE,       # buscador
    ordering = TRUE         # ordenar columnas
  ),
  caption = "Tabla interactiva del tipo de cambio (compra y venta por fecha)",
  filter = "top"             # filtros en la parte superior
)