Estados Contables + R

Caso de uso

Marcelo G Gonzalez


Introducción

En esta publicación voy a mostrar un caso de uso de R para analizar estados contables Este es sólo un ejemplo sencillo pero muestra como se pueden aplicar este tipo de herramientas de analisis de datos (ya sea R python, etc.) en diversos ámbitos, tanto para realizar análisis como para automatizar tareas.

Librerías a usar

Código: Importación de librerías y configuración inicial
library(readxl) #Lectura de arhivos .xlsx
library(tidyverse) #Manipulación de tablas,datos y gráficos
library(corrplot) #Grafico de correlación
library(psych) #Estadísticos descriptivos
options(scipen = 999) #Desactiva notación cienctífica

Importación de dataset

Código: Importación de dataset con estados contables
Estados <- read_xlsx("Estados.xlsx",sheet = "Estados_Consolidados")

Muestra de 5 filas del dataset:

Apertura Año 2012 Año 2013 Año 2014 Año 2015 Año 2016 Año 2017 Año 2018 Año 2019 Año 2020 Tipo
ACTIVO CORRIENTE 89280157 106808572 127981468 133236812 145932260 161691553 171136122 175034341 179255248 ESTADO DE SITUACION FINANCIERA
ACTIVO NO CORRIENTE 30134240 34137367 39394739 42944871 44412384 51481978 56241853 77938278 77943263 ESTADO DE SITUACION FINANCIERA
ACTIVOS 119414397 140945939 167376206 176181683 190344644 213173530 227377975 252972618 257198511 ESTADO DE SITUACION FINANCIERA
PASIVO CORRIENTE 32905907 26160905 37878184 30370883 30890241 37639159 34881650 32961816 32751050 ESTADO DE SITUACION FINANCIERA
PASIVO NO CORRIENTE 3944831 12116701 4965328 6140325 6635056 7191573 7804871 28284310 28390605 ESTADO DE SITUACION FINANCIERA

Balance general

Balance <- Estados %>%
  filter(Tipo == "ESTADO DE SITUACION FINANCIERA") %>% 
  select(Apertura,starts_with("Añ")) %>% 
  pivot_longer(!Apertura,names_to = "Periodo",values_to = "Importe") %>%
  group_by(Periodo,Apertura) %>%
  summarise(Total = sum(Importe)) %>% 
  pivot_wider(names_from = Apertura,values_from = Total)
Periodo ACTIVO CORRIENTE ACTIVO NO CORRIENTE ACTIVOS PASIVO CORRIENTE PASIVO NO CORRIENTE PASIVOS PATRIMONIO
Año 2012 89280157 30134240 119414397 32905907 3944831 28961077 82563659
Año 2013 106808572 34137367 140945939 26160905 12116701 38277606 102668333
Año 2014 127981468 39394739 167376206 37878184 4965328 44025072 123351134
Año 2015 133236812 42944871 176181683 30370883 6140325 36511208 139670474
Año 2016 145932260 44412384 190344644 30890241 6635056 37525298 152819346
Año 2017 161691553 51481978 213173530 37639159 7191573 44830733 168342798
Año 2018 171136122 56241853 227377975 34881650 7804871 42686520 184691455
Año 2019 175034341 77938278 252972618 32961816 28284310 61246126 191726492
Año 2020 179255248 77943263 257198511 32751050 28390605 61141655 196056856

Estado de Resultados

Estado_Resultados <- Estados %>%
  filter(Tipo == "ESTADO DE RESULTADOS") %>% 
  select(Apertura,starts_with("Añ")) %>% 
  pivot_longer(!Apertura,names_to = "Periodo",values_to = "Importe") %>%
  group_by(Periodo,Apertura) %>%
  summarise(Total = sum(Importe)) %>% 
  pivot_wider(names_from = Apertura,values_from = Total)
Periodo COSTOS Ganancia Bruta GASTOS INGRESOS Utilidad antes de impuestos
Año 2012 134644066 56685905 27767072 191329971 29457933
Año 2013 168140123 70620734 34161040 238760857 36790013
Año 2014 192566011 80464977 37923831 273030988 42541146
Año 2015 193185204 83699788 39601143 276884992 44098646
Año 2016 169226644 75461034 37769059 244687678 37691975
Año 2017 186781737 80831729 40287571 267613466 40544158
Año 2018 197412085 89818669 44303162 287230754 45515506
Año 2019 195495224 88446713 46052358 283941937 42394355
Año 2020 173881570 83842214 45620680 257723784 38221535

Análisis exploratorio breve

Gráfico evolutivo del Balance

Código Gráfico
Balance %>% 
  select(-ACTIVOS,-PASIVOS) %>% 
  pivot_longer(!1,values_to = "importe",names_to = "indicador") %>%
  ggplot(aes(x = Periodo,y = importe, group = indicador, color = indicador)) +
  geom_line() + 
  geom_point() + 
  labs(x = "",y = "",title = "Evolución Elementos del Balance") +
  theme(legend.position = 'bottom')

Código Gráfico
Balance %>% 
  select(ACTIVOS,PASIVOS,PATRIMONIO) %>% 
  pivot_longer(!1,values_to = "importe",names_to = "indicador") %>%
  ggplot(aes(x = Periodo,y = importe, group = indicador, color = indicador)) +
  geom_line() + 
  geom_point() + 
  labs(x = "",y = "",title = "Evolución Elementos del Balance") +
  theme(legend.position = 'bottom')

Gráfico evolutivo del Estado de Resultados

Estado_Resultados %>% 
  pivot_longer(!1,values_to = "importe",names_to = "indicador") %>%
  ggplot(aes(x = Periodo,y = importe, group = indicador, color = indicador)) +
  geom_line() + 
  geom_point() + 
  labs(x = "",y = "",title = "Evolución Estado de Resultados") +
  theme(legend.position = 'bottom')


Creación de Indicadores:

A continuación vamos a ver algunos de los indicadores más comunes que se calculan al momento de analizar balances:

Indicador de Rentabilidad

\[Ind.Rentabilidad = \frac{Utilidad_{AI}}{ACTIVO_{T}}\]


Donde: - Numerador: Utilidad Antes de Impuestos - Denominador: Activo Total

Estados %>%
  select(-11) %>% 
  pivot_longer(!1,names_to = "Periodo",values_to = "Importe") %>%
  pivot_wider(names_from = Apertura,values_from = Importe) %>% 
  mutate(ACTIVO_TOTAL = `ACTIVO CORRIENTE`+`ACTIVO NO CORRIENTE`,
         PASIVO_TOTAL = `PASIVO CORRIENTE`+`PASIVO NO CORRIENTE`,
         RENTABILIDAD = `Utilidad antes de impuestos`/ACTIVO_TOTAL) %>%
  select(Periodo,RENTABILIDAD) %>% 
  kbl() %>%
  kable_styling(bootstrap_options = "striped",font_size = 9,full_width = F,position = "center")
Periodo RENTABILIDAD
Año 2012 0.2466866
Año 2013 0.2610222
Año 2014 0.2541648
Año 2015 0.2503021
Año 2016 0.1980196
Año 2017 0.1901932
Año 2018 0.2001755
Año 2019 0.1675848
Año 2020 0.1486071

Indicador de Liquidez

\[Ind.Liquidez = \frac{ACTIVO_{CORRIENTE}}{PASIVO_{CORRIENTE}}\]

Estados %>%
  select(-11) %>% 
  pivot_longer(!1,names_to = "Periodo",values_to = "Importe") %>%
  pivot_wider(names_from = Apertura,values_from = Importe) %>% 
  mutate(ACTIVO_TOTAL = `ACTIVO CORRIENTE`+`ACTIVO NO CORRIENTE`,
         PASIVO_TOTAL = `PASIVO CORRIENTE`+`PASIVO NO CORRIENTE`,
         LIQUIDEZ = `ACTIVO CORRIENTE` / `PASIVO CORRIENTE`) %>%
  select(Periodo,LIQUIDEZ) %>% 
  kbl() %>%
  kable_styling(bootstrap_options = "striped",font_size = 9,full_width = F,position = "center")
Periodo LIQUIDEZ
Año 2012 2.713195
Año 2013 4.082755
Año 2014 3.378765
Año 2015 4.386992
Año 2016 4.724219
Año 2017 4.295833
Año 2018 4.906193
Año 2019 5.310215
Año 2020 5.473267

Indicador de Calidad Deuda

\[Ind.CalidadDeuda = \frac{PASIVO_{CORRIENTE}}{ACTIVO_{TOTAL}}\]

Estados %>%
  select(-11) %>% 
  pivot_longer(!1,names_to = "Periodo",values_to = "Importe") %>%
  pivot_wider(names_from = Apertura,values_from = Importe) %>% 
  mutate(ACTIVO_TOTAL = `ACTIVO CORRIENTE`+`ACTIVO NO CORRIENTE`,
         PASIVO_TOTAL = `PASIVO CORRIENTE`+`PASIVO NO CORRIENTE`,
         CALIDAD_DEUDA = `PASIVO CORRIENTE` / PASIVO_TOTAL) %>%
  select(Periodo,CALIDAD_DEUDA) %>% 
  kbl() %>%
  kable_styling(bootstrap_options = "striped",font_size = 9,full_width = F,position = "center")
Periodo CALIDAD_DEUDA
Año 2012 0.8929511
Año 2013 0.6834520
Año 2014 0.8841055
Año 2015 0.8318236
Año 2016 0.8231844
Año 2017 0.8395839
Año 2018 0.8171584
Año 2019 0.5381861
Año 2020 0.5356585

Indicador de Solvencia

\[Ind.Solvencia = \frac{ACTIVO_{TOTAL}}{PASIVO_{TOTAL}}\]

Estados %>%
  select(-11) %>% 
  pivot_longer(!1,names_to = "Periodo",values_to = "Importe") %>%
  pivot_wider(names_from = Apertura,values_from = Importe) %>% 
  mutate(ACTIVO_TOTAL = `ACTIVO CORRIENTE`+`ACTIVO NO CORRIENTE`,
         PASIVO_TOTAL = `PASIVO CORRIENTE`+`PASIVO NO CORRIENTE`,
         SOLVENCIA = ACTIVO_TOTAL / PASIVO_TOTAL) %>%
  select(Periodo,SOLVENCIA) %>% 
  kbl() %>%
  kable_styling(bootstrap_options = "striped",font_size = 9,full_width = F,position = "center")
Periodo SOLVENCIA
Año 2012 3.240489
Año 2013 3.682204
Año 2014 3.906687
Año 2015 4.825414
Año 2016 5.072435
Año 2017 4.755076
Año 2018 5.326693
Año 2019 4.130426
Año 2020 4.206600

Tabla Creación de Indicadores Final

Tindicadores <- Estados %>%
  select(-11) %>% 
  pivot_longer(!1,names_to = "Periodo",values_to = "Importe") %>%
  pivot_wider(names_from = Apertura,values_from = Importe) %>% 
  mutate(ACTIVO_TOTAL = `ACTIVO CORRIENTE`+`ACTIVO NO CORRIENTE`,
         PASIVO_TOTAL = `PASIVO CORRIENTE`+`PASIVO NO CORRIENTE`,
         RENTABILIDAD = `Utilidad antes de impuestos`/ACTIVO_TOTAL,
         LIQUIDEZ = `ACTIVO CORRIENTE` / `PASIVO CORRIENTE`,
         CALIDAD_DEUDA = `PASIVO CORRIENTE` / PASIVO_TOTAL,
         SOLVENCIA = ACTIVO_TOTAL / PASIVO_TOTAL) %>%
  select(Periodo,RENTABILIDAD,LIQUIDEZ,CALIDAD_DEUDA,SOLVENCIA)
Periodo RENTABILIDAD LIQUIDEZ CALIDAD_DEUDA SOLVENCIA
Año 2012 0.2466866 2.713195 0.8929511 3.240489
Año 2013 0.2610222 4.082755 0.6834520 3.682204
Año 2014 0.2541648 3.378765 0.8841055 3.906687
Año 2015 0.2503021 4.386992 0.8318236 4.825414
Año 2016 0.1980196 4.724219 0.8231844 5.072435
Año 2017 0.1901932 4.295833 0.8395839 4.755076
Año 2018 0.2001755 4.906193 0.8171584 5.326693
Año 2019 0.1675848 5.310215 0.5381861 4.130426
Año 2020 0.1486071 5.473267 0.5356585 4.206600

Gráfico indicadores

Tindicadores %>% 
  pivot_longer(!1,values_to = "importe",names_to = "indicador") %>%
  ggplot(aes(x = Periodo,y = importe, group = indicador, color = indicador)) +
  geom_line() + 
  geom_point() + 
  labs(x = "",y = "",title = "Evolución indicadores") +
  theme(legend.position = 'bottom')

Por último, para llevarlo al siguiente nivel una buena idea es automatizar el script para ejecutar el proceso de manera automática con una frecuencia establecida y regular.

Autor: Marcelo G Gonzalez
LinkTree