Introducción: Análisis de la Red de Oficinas del Fondo Nacional del Ahorro

El presente informe analiza la estructura y distribución de la red de oficinas del Fondo Nacional del Ahorro (FNA), institución de carácter oficial que cumple una función fundamental en el sistema de ahorro y crédito para vivienda en Colombia. Los datos utilizados en este estudio, actualizados al 25 de agosto de 2025, fueron proporcionados oficialmente por el Fondo Nacional del Ahorro a través del portal de datos abiertos del Gobierno Colombiano en datos.gov.co.

El conjunto de datos constituye un registro completo de la infraestructura física de atención al público del FNA, donde cada registro representa una sede u oficina operativa de la entidad en el territorio nacional. Esta información es de vital importancia para comprender la capacidad institucional de cobertura, el acceso a servicios financieros de vivienda por parte de la ciudadanía y la presencia territorial de una de las entidades más importantes del sector.

La disponibilidad de estos datos mediante la política de Gobierno Abierto implementada por el Gobierno de Colombia, refleja el compromiso del Estado con la transparencia y la rendición de cuentas, permitiendo a ciudadanos, investigadores y tomadores de decisiones realizar análisis basados en evidencia sobre la prestación de servicios públicos.

Taller de Georreferenciación en R

Importar Librerías

Se importan las librerías esenciales para facilitar el análisis que abarca la carga de datos, la visualización, la transformación de datos, la fusión y la unión.

suppressPackageStartupMessages({
  library(readr)
  library(dplyr)
  library(tibble)
  library(stringr)
  library(ggplot2)
  library(leaflet)
  library(sf)
  library(knitr)
  library(rmarkdown)
  library(DT)
})

Usamos el siguiente comando para ignorar todos los warnings.

options(warn = -1) 

Lectura del Shapefile del DANE

En este paso cargamos el archivo shapefile que contiene la información geográfica de los departamentos colombianos. Especificamos la codificación UTF-8 para garantizar la correcta lectura de caracteres especiales.

data = st_read("C:/Users/david/Downloads/MGN2021_DPTO_POLITICO/MGN_DPTO_POLITICO.shp", quiet = FALSE)
## Reading layer `MGN_DPTO_POLITICO' from data source 
##   `C:\Users\david\Downloads\MGN2021_DPTO_POLITICO\MGN_DPTO_POLITICO.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 33 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -81.73562 ymin: -4.229406 xmax: -66.84722 ymax: 13.39473
## Geodetic CRS:  MAGNA-SIRGAS

Se muestran los departamentos para verificar que la lectura se hizo correctamente.

paged_table(st_drop_geometry(data))

Se emplea el método glimpse para revisar la información de los departamentos contenida en el objeto data, que representa la estructura de datos asociada al archivo shapefile (shp). Esta estructura incluye nombres de departamentos, identificadores geográficos, y otras características relevantes para la visualización geoespacial.

glimpse(data)
## Rows: 33
## Columns: 10
## $ DPTO_CCDGO <chr> "05", "08", "11", "13", "15", "17", "18", "19", "20", "23",…
## $ DPTO_CNMBR <chr> "ANTIOQUIA", "ATLÁNTICO", "BOGOTÁ, D.C.", "BOLÍVAR", "BOYAC…
## $ DPTO_ANO_C <int> 1886, 1910, 1538, 1886, 1886, 1905, 1981, 1857, 1967, 1951,…
## $ DPTO_ACT_A <chr> "Constitucion Politica de 1886", "Ley 21 de 1910", "Constit…
## $ DPTO_NAREA <dbl> 62808.630, 3314.447, 1622.853, 26719.968, 23138.048, 7425.2…
## $ DPTO_CSMBL <chr> "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3",…
## $ DPTO_VGNC  <int> 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021,…
## $ Shape_Leng <dbl> 21.492374, 2.573162, 3.765324, 16.233072, 15.906491, 6.6637…
## $ Shape_Area <dbl> 5.1352363, 0.2738225, 0.1322079, 2.1956393, 1.8883908, 0.60…
## $ geometry   <MULTIPOLYGON [°]> MULTIPOLYGON (((-76.41355 8..., MULTIPOLYGON (…

Valores únicos (Shapefile)

Se calcula el número de valores únicos para cada variable del Shapefile.

sapply(data, function(x) length(unique(x)))
## DPTO_CCDGO DPTO_CNMBR DPTO_ANO_C DPTO_ACT_A DPTO_NAREA DPTO_CSMBL  DPTO_VGNC 
##         33         33         15         24         33          1          1 
## Shape_Leng Shape_Area   geometry 
##         33         33         33

Se verifican los departamentos en el Shapefile.

unique(data$DPTO_CNMBR)
##  [1] "ANTIOQUIA"                                               
##  [2] "ATLÁNTICO"                                               
##  [3] "BOGOTÁ, D.C."                                            
##  [4] "BOLÍVAR"                                                 
##  [5] "BOYACÁ"                                                  
##  [6] "CALDAS"                                                  
##  [7] "CAQUETÁ"                                                 
##  [8] "CAUCA"                                                   
##  [9] "CESAR"                                                   
## [10] "CÓRDOBA"                                                 
## [11] "CUNDINAMARCA"                                            
## [12] "CHOCÓ"                                                   
## [13] "HUILA"                                                   
## [14] "LA GUAJIRA"                                              
## [15] "MAGDALENA"                                               
## [16] "META"                                                    
## [17] "NARIÑO"                                                  
## [18] "NORTE DE SANTANDER"                                      
## [19] "QUINDIO"                                                 
## [20] "RISARALDA"                                               
## [21] "SANTANDER"                                               
## [22] "SUCRE"                                                   
## [23] "TOLIMA"                                                  
## [24] "VALLE DEL CAUCA"                                         
## [25] "ARAUCA"                                                  
## [26] "CASANARE"                                                
## [27] "PUTUMAYO"                                                
## [28] "ARCHIPIÉLAGO DE SAN ANDRÉS, PROVIDENCIA Y SANTA CATALINA"
## [29] "AMAZONAS"                                                
## [30] "GUAINÍA"                                                 
## [31] "GUAVIARE"                                                
## [32] "VAUPÉS"                                                  
## [33] "VICHADA"

Podemos notar que BOGOTÁ, D.C. es tomado como un departamento aunque legalmente corresponde a un Distrito Capital.

Visualización del Shapefile

El siguiente gráfico muestra la representación geográfica de los departamentos colombianos según los datos del DANE.

leaflet(data) %>% 
  addTiles() %>%
  addPolygons(fillColor = "yellow",  
              color = "black",
              weight = 1.1,          
              fillOpacity = 0.5,     
              popup = ~DPTO_CNMBR) %>%  
  addControl("División Política Administrativa de Colombia - DANE", 
             position = "topright")

Lectura del Dataset

Este conjunto de datos contiene información geolocalizada de todas las oficinas del Fondo Nacional del Ahorro en Colombia, incluyendo coordenadas, departamentos, municipios, direcciones y detalles de las oficinas. Ideal para análisis de cobertura territorial y accesibilidad a servicios de vivienda.

df = read_csv("C:/Users/david/Downloads/Oficinas_Fondo_Nacional_del_Ahorro_20250906.csv")
## Rows: 71 Columns: 9
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): Regional, departamentos, tipodeentidad, cat, direccion, estado, hor...
## dbl (2): Latitud, Longitud
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Se muestran las primeras filas del DataFrame.

datatable(head(df), options = list(pageLength = 10))

Se muestran las últimas filas del DataFrame.

datatable(tail(df), options = list(pageLength = 10))

Se emplea el método glimpse para presentar un resumen detallado de todas las variables del dataset, incluyendo el tipo de dato (entero, punto flotante o carácter) lo que permite evaluar la integridad y estructura de los datos para su posterior procesamiento.

glimpse(df)
## Rows: 71
## Columns: 9
## $ Regional                       <chr> "BOGOTA CENTRO\nZONA 1", "BOGOTA CENTRO…
## $ departamentos                  <chr> "BOGOTA  D.C.", "BOGOTA  D.C.", "BOGOTA…
## $ tipodeentidad                  <chr> "CNA", "SUBA", "FISCALIA", "SUPERNOTARI…
## $ cat                            <chr> "A+", "A", "D", "D", "D", "D", "C", "C"…
## $ direccion                      <chr> "Calle 12 No. 65 -11\nZona Industrial P…
## $ estado                         <chr> "ABIERTO", "ABIERTO", "ABIERTO         …
## $ `horario actual /contingencia` <chr> "LUNES A VIERNES\n 8:00 AM A 4:00 PM\n …
## $ Latitud                        <dbl> 4.633520, 4.717090, 4.639465, 4.613235,…
## $ Longitud                       <dbl> 74.11646, 74.07320, 74.09936, 74.07217,…

1. Tamaño del Dataset (Dimensión) - Rows: 71, Columns: 9 - Interpretación: El dataset contiene 71 registros en total. Cada registro corresponde a una sede u oficina diferente del Fondo Nacional del Ahorro. Esto nos indica el tamaño total de la red de oficinas analizada.

2. Estructura (Columnas y Tipos de Datos) - Data columns (total 9 columns) - Interpretación: Por cada oficina, se almacenan 9 atributos o características diferentes que permiten describirla y ubicarla.

Desglose de las columnas por tipo de dato: - Dtype: object (7 columns): Indica que hay 7 columnas que contienen texto o datos categóricos. - Regional, departamentos, tipodeentidad, cat, direccion, estado, horario actual /contingencia - Estas variables son ideales para realizar agrupaciones, filtros y análisis categóricos (ej: contar oficinas por regional, por estado, etc.). - Dtype: float64 (2 columns): Indica que hay 2 columnas con datos numéricos decimales. - Latitud, Longitud

Valores únicos (Dataset)

Se calcula el número de valores únicos para cada variable del DataFrame.

sapply(df, function(x) length(unique(x)))
##                     Regional                departamentos 
##                            7                           34 
##                tipodeentidad                          cat 
##                           71                            8 
##                    direccion                       estado 
##                           71                            3 
## horario actual /contingencia                      Latitud 
##                           20                           71 
##                     Longitud 
##                           71