Este documento presenta un análisis exploratorio de datos (EDA) del conjunto de datos “BD SFC.csv”, que contiene información detallada sobre las carteras de microcréditos y otros rubros, de diversas entidades financieras vigiladas en Colombia ..
Primero cargamos las librerías necesarias para nuestro análisis.
## [1] ".GlobalEnv" "package:stats" "package:graphics"
## [4] "package:grDevices" "package:utils" "package:datasets"
## [7] "package:methods" "Autoloads" "package:base"
Cargamos el dataset y examinamos su estructura.
# Carga de datos - ajusta la ruta según sea necesario
SFC_data <- read_csv("BD SFC.csv")
# Vista preliminar de los datos
head(SFC_data)## # A tibble: 6 × 11
## TIPO_ENTIDAD NOMBRE_TIPO_ENTIDAD CODIGO_ENTIDAD NOMBRE_ENTIDAD FECHA_CORTE
## <dbl> <chr> <dbl> <chr> <chr>
## 1 1 ESTABLECIMIENTOS BANCA… 1 BANCO DE BOGO… 31/07/2024
## 2 1 ESTABLECIMIENTOS BANCA… 1 BANCO DE BOGO… 30/06/2024
## 3 1 ESTABLECIMIENTOS BANCA… 1 BANCO DE BOGO… 31/05/2024
## 4 1 ESTABLECIMIENTOS BANCA… 1 BANCO DE BOGO… 30/04/2024
## 5 1 ESTABLECIMIENTOS BANCA… 1 BANCO DE BOGO… 31/03/2024
## 6 1 ESTABLECIMIENTOS BANCA… 1 BANCO DE BOGO… 29/02/2024
## # ℹ 6 more variables: CUENTA <dbl>, NOMBRE_CUENTA <chr>, MONEDA <dbl>,
## # `NOMBRE MONEDA` <chr>, SIGNO_VALOR <chr>, VALOR <dbl>
## Rows: 16,286,348
## Columns: 11
## $ TIPO_ENTIDAD <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ NOMBRE_TIPO_ENTIDAD <chr> "ESTABLECIMIENTOS BANCARIOS", "ESTABLECIMIENTOS BA…
## $ CODIGO_ENTIDAD <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ NOMBRE_ENTIDAD <chr> "BANCO DE BOGOTA S.A.", "BANCO DE BOGOTA S.A.", "B…
## $ FECHA_CORTE <chr> "31/07/2024", "30/06/2024", "31/05/2024", "30/04/2…
## $ CUENTA <dbl> 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1e+05, 1…
## $ NOMBRE_CUENTA <chr> "ACTIVO", "ACTIVO", "ACTIVO", "ACTIVO", "ACTIVO", …
## $ MONEDA <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ `NOMBRE MONEDA` <chr> "Total", "Total", "Total", "Total", "Total", "Tota…
## $ SIGNO_VALOR <chr> "+", "+", "+", "+", "+", "+", "+", "+", "+", "+", …
## $ VALOR <dbl> 1.248434e+14, 1.237484e+14, 1.211837e+14, 1.205890…
## TIPO_ENTIDAD NOMBRE_TIPO_ENTIDAD CODIGO_ENTIDAD NOMBRE_ENTIDAD
## Min. : 1.00 Length:16286348 Min. : 1.00 Length:16286348
## 1st Qu.: 1.00 Class :character 1st Qu.: 6.00 Class :character
## Median : 11.00 Mode :character Median : 20.00 Mode :character
## Mean : 40.92 Mean : 29.64
## 3rd Qu.: 22.00 3rd Qu.: 46.00
## Max. :509.00 Max. :161.00
## FECHA_CORTE CUENTA NOMBRE_CUENTA MONEDA
## Length:16286348 Min. :100000 Length:16286348 Min. :0.000
## Class :character 1st Qu.:190000 Class :character 1st Qu.:0.000
## Mode :character Median :410238 Mode :character Median :1.000
## Mean :387658 Mean :0.637
## 3rd Qu.:515000 3rd Qu.:1.000
## Max. :840500 Max. :2.000
## NOMBRE MONEDA SIGNO_VALOR VALOR
## Length:16286348 Length:16286348 Min. :-7.485e+13
## Class :character Class :character 1st Qu.: 2.072e+07
## Mode :character Mode :character Median : 5.023e+08
## Mean : 1.247e+12
## 3rd Qu.: 8.635e+09
## Max. : 8.998e+15
Antes de profundizar en el análisis, vamos a filtrar, limpiar y transformar los datos.
# Filtrar los datos para el microcrédito (cuentas 141200-141299) y moneda = 0
SFC_filtrada <- subset(SFC_data, CUENTA >= 141200 & CUENTA <= 141299 & MONEDA == 0)
# Eliminar columnas innecesarias
columnas_a_eliminar <- c("TIPO_ENTIDAD", "NOMBRE_TIPO_ENTIDAD", "CODIGO_ENTIDAD", "MONEDA", "NOMBRE.MONEDA", "SIGNO_VALOR")
SFC_filtrada <- SFC_filtrada[, !(names(SFC_filtrada) %in% columnas_a_eliminar)]
# Convertir 'FECHA_CORTE' y establecer como índice (usando rownames)
SFC_filtrada$ID <- 1:nrow(SFC_filtrada)
rownames(SFC_filtrada) <- paste(SFC_filtrada$FECHA_CORTE, SFC_filtrada$ID, sep = "_")
# Asegurarse de que la columna 'VALOR' sea numérica
SFC_filtrada$VALOR <- as.numeric(as.character(SFC_filtrada$VALOR))
SFC_filtrada <- SFC_filtrada[!is.na(SFC_filtrada$VALOR), ]
# Asegurarse de que la columna 'FECHA_CORTE' sea de tipo Date
SFC_filtrada$FECHA_CORTE <- as.Date(SFC_filtrada$FECHA_CORTE, format = "%d/%m/%Y") # Ajusta el formato si es diferente
# Agrupar por fecha para obtener el total mensual de microcréditos
# Suponemos que 'VALOR' es el valor de microcréditos en un periodo específico.
data_series <- aggregate(VALOR ~ format(FECHA_CORTE, "%Y-%m"), SFC_filtrada, sum)
# Convertir la columna de fechas a Date y establecer como índice
data_series$FECHA_CORTE <- as.Date(paste0(data_series$`format(FECHA_CORTE, "%Y-%m")`, "-01"))
rownames(data_series) <- data_series$FECHA_CORTE## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000e+00 6.073e+08 7.337e+09 2.166e+11 5.066e+10 9.888e+12
# Histograma de VALOR
ggplot(SFC_filtrada, aes(x = VALOR)) +
geom_histogram(fill = "lightblue", color = "black") +
labs(title = "Histograma de VALOR", x = "Valor", y = "Frecuencia") +
theme_minimal()# Boxplot de VALOR
ggplot(SFC_filtrada, aes(y = VALOR)) +
geom_boxplot(fill = "lightgreen", color = "black") +
labs(title = "Boxplot de VALOR", y = "Valor") +
theme_minimal()# Gráfico de series de tiempo de VALOR
ggplot(SFC_filtrada, aes(x = FECHA_CORTE, y = VALOR)) +
geom_line(color = "blue") +
labs(title = "Valor de microcréditos a lo largo del tiempo", x = "Fecha", y = "Valor") +
theme_minimal()# Gráfico de series de tiempo de VALOR agregado por mes
ggplot(data_series, aes(x = FECHA_CORTE, y = VALOR)) +
geom_line(color = "red") +
labs(title = "Valor total de microcréditos por mes", x = "Fecha", y = "Valor") +
theme_minimal()# Descomposición de la serie de tiempo agregada
ts_data <- ts(data_series$VALOR, frequency = 12) # Asumiendo datos mensuales
decomposed <- decompose(ts_data)
autoplot(decomposed) +
theme_minimal()#{r distributions} #