El presente análisis buscar determinar las características en el sistema financiero de las empresas seleccionadas por el Instituto Tecnológico de la Producción (ITP).
A continuación se detallan las librerías a utilizar para el análisis.
#install.packages(readxl)
library(readxl)
#install.packages(tidyverse)
library(tidyverse)
#install.packages(knitr)
library(knitr)
La siguiente base de datos de las empresas seleccionadas fue provista por el ITP para su análisis.
itp <- read_excel("5. Pedidos/ITP/Base de datos de Empresas SOSTENIBILIDAD.xlsx")
head(itp, n = 20L)
## # A tibble: 20 x 3
## ID `RUC / DNI` NOMBRE
## <dbl> <chr> <chr>
## 1 100001 10024294906 MAMANI ZELA VIRGINIA
## 2 100002 10180674409 CALUA ARROYO JENNY MARITZA
## 3 100004 10198398603 LAZO DE DELZO MARIA TERESA
## 4 100005 10447740023 ARMAS ZAVALETA JOSE MANUEL
## 5 100007 10448339764 TITI BENAVENTE PEDRO ALONSO
## 6 100008 10453955961 AGUILAR MENDOZA GUIDO SEBASTIAN
## 7 100009 10458598971 CORTAVITARTE RODRIGUEZ JAIRO ALONSO
## 8 100011 10480814415 FLORES CIPRIANO JUAN
## 9 100012 10486529658 HUAMAN MENDOZA KENNEDY
## 10 100013 10713919140 AGUIRRE SANTIAGO BRAYAN DEIVIS
## 11 100014 10728776841 MEJIA PASCUAL NADYA IRAIDA
## 12 100015 10730542327 VILCHEZ MORENO BETSY ALEXANDRA
## 13 100016 10739772724 SALAZAR LEIVA VICTOR EDUARDO
## 14 100017 10762942378 TITO GUTIERREZ LAURA SALLY
## 15 100018 10773323360 BLAS GARCIA JALINEE ROSARIO
## 16 100019 20119488398 PRODUCTOS PESQUEROS DEL SUR S.A.
## 17 100020 20132712086 CORPORACION REFRIGERADOS INY S.A.C.
## 18 100023 20137921601 FONDO NACIONAL DE DESARROLLO PESQUERO
## 19 100024 20147897406 UNIVERSIDAD NACIONAL AGRARIA LA MOLINA
## 20 100025 20154598244 UNIVERSIDAD NACIONAL DE UCAYALI
A continuación observaremos las dimensiones de la base de datos.
dim(itp)
## [1] 820 3
RUC / DNI corresponde a documentos de identidad de personas naturales o personas jurídicas.A continuación se revisará si la base tiene documentos RUC / DNI repetidos o mal tipeados.
# Se crea una columna con el número de veces que el RUC o DNI se repite
itp$ID = as.character(itp$ID)
revision <- itp %>%
group_by(`RUC / DNI`) %>%
tally()
colnames(revision)[2]<-"n_duplicados"
# Se añade una columna del número de caracteres que tiene el RUC o DNI
n_caracteres <- nchar(revision$`RUC / DNI`)
revision <- cbind(revision,n_caracteres)
head(revision, n = 20L)
## RUC / DNI n_duplicados n_caracteres
## 1 10000944853 1 11
## 2 10024294906 1 11
## 3 10026452274 1 11
## 4 10027823942 1 11
## 5 10043209995 1 11
## 6 10043419850 1 11
## 7 10048235650 1 11
## 8 10052149865 1 11
## 9 10052165313 1 11
## 10 10052770853 1 11
## 11 10053945657 1 11
## 12 10057852912 1 11
## 13 10059129 1 8
## 14 10070377425 1 11
## 15 10072908053 1 11
## 16 10087947152 1 11
## 17 10093821535 1 11
## 18 10093837318 1 11
## 19 10094333330 1 11
## 20 10100570373 1 11
Se procede con la revisión de la base de datos.
revision %>%
group_by(n_caracteres) %>%
count(n_caracteres, sort = TRUE)
## # A tibble: 5 x 2
## # Groups: n_caracteres [5]
## n_caracteres n
## <int> <int>
## 1 11 738
## 2 8 25
## 3 12 2
## 4 7 1
## 5 10 1
RUC / DNI con un número de dígitos disinto a lo usual.revision %>%
group_by(n_duplicados) %>%
count(n_duplicados, sort = TRUE)
## # A tibble: 3 x 2
## # Groups: n_duplicados [3]
## n_duplicados n
## <int> <int>
## 1 1 718
## 2 2 45
## 3 3 4
Dado los problemas encontrados, se procede limpieza de la base de datos. Primero se procede con la eliminación de los documentos repetidos.
n_duplicados <- itp %>%
group_by(`RUC / DNI`) %>%
tally()
colnames(n_duplicados)[2]<-"n_duplicados"
n_caracteres <- nchar(itp$`RUC / DNI`)
itp <- cbind(itp,n_caracteres)
empresas <- merge(x = itp, y = n_duplicados, by = c("RUC / DNI"))
empresas <- empresas[c("ID","RUC / DNI","NOMBRE","n_caracteres","n_duplicados")]
empresas <- empresas %>%
group_by(`RUC / DNI`) %>%
slice(1)
length(empresas$`RUC / DNI`)
## [1] 767
Luego, se procede a identificar los documentos mal tipeados.
empresas %>%
filter(n_caracteres == 7 | n_caracteres == 10 | n_caracteres == 12)
## # A tibble: 4 x 5
## # Groups: RUC / DNI [4]
## ID `RUC / DNI` NOMBRE n_caracteres n_duplicados
## <chr> <chr> <chr> <int> <int>
## 1 100578 1074909693 Ulléíchyu 10 1
## 2 100536 206000544440 Puriy del Peru SAC 12 1
## 3 100572 2060041 TINGO EXOTIC 7 1
## 4 100515 206043891891 Nubes 12 1
Finalmente, se procede a corregir los documentos mal tipeados.
empresas$`RUC / DNI`[empresas$`RUC / DNI` == "206000544440"] <- "20600054440" # Puriy del Peru SAC
empresas$`RUC / DNI`[empresas$`RUC / DNI` == "2060041"] <- "20600419367" # TINGO EXOTIC
empresas$`RUC / DNI`[empresas$`RUC / DNI` == "206043891891"] <- "20604391891" # Nubes
empresas <- empresas %>%
filter(n_caracteres != 10) # Ulléíchyu
empresas$n_caracteres <- nchar(empresas$`RUC / DNI`)
empresas %>%
group_by(n_caracteres) %>%
count(n_caracteres, sort = TRUE)
## # A tibble: 2 x 2
## # Groups: n_caracteres [2]
## n_caracteres n
## <int> <int>
## 1 11 741
## 2 8 25
length(empresas$`RUC / DNI`)
## [1] 766
Se extrajo la información de las 766 empresas seleccionadas para el periodo del segundo trimestre (abril, mayo y junio).
rcc202106 <- read_excel("4. Resultados/202106/rcc.xlsx")
rcc202105 <- read_excel("4. Resultados/202105/rcc.xlsx")
rcc202104 <- read_excel("4. Resultados/202104/rcc.xlsx")
rcc <- rbind(rcc202104, rcc202105, rcc202106)
head(rcc, n = 20L)
## # A tibble: 20 x 37
## registro1 cod_cliente fecha año mes tipo_ruc ruc tipo_documento
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 1 0000105422 20210430 2021 04 RUC 11 dígitos 20146824499 <NA>
## 2 1 0000105422 20210430 2021 04 RUC 11 dígitos 20146824499 <NA>
## 3 1 0000105422 20210430 2021 04 RUC 11 dígitos 20146824499 <NA>
## 4 1 0000105422 20210430 2021 04 RUC 11 dígitos 20146824499 <NA>
## 5 1 0000105422 20210430 2021 04 RUC 11 dígitos 20146824499 <NA>
## 6 1 0000161403 20210430 2021 04 RUC 11 dígitos 20100199743 <NA>
## 7 1 0000161403 20210430 2021 04 RUC 11 dígitos 20100199743 <NA>
## 8 1 0000161403 20210430 2021 04 RUC 11 dígitos 20100199743 <NA>
## 9 1 0000161403 20210430 2021 04 RUC 11 dígitos 20100199743 <NA>
## 10 1 0000161403 20210430 2021 04 RUC 11 dígitos 20100199743 <NA>
## 11 1 0000161403 20210430 2021 04 RUC 11 dígitos 20100199743 <NA>
## 12 1 0000161403 20210430 2021 04 RUC 11 dígitos 20100199743 <NA>
## 13 1 0000161403 20210430 2021 04 RUC 11 dígitos 20100199743 <NA>
## 14 1 0000161403 20210430 2021 04 RUC 11 dígitos 20100199743 <NA>
## 15 1 0000161403 20210430 2021 04 RUC 11 dígitos 20100199743 <NA>
## 16 1 0000161403 20210430 2021 04 RUC 11 dígitos 20100199743 <NA>
## 17 1 0000161403 20210430 2021 04 RUC 11 dígitos 20100199743 <NA>
## 18 1 0000161403 20210430 2021 04 RUC 11 dígitos 20100199743 <NA>
## 19 1 0000161403 20210430 2021 04 RUC 11 dígitos 20100199743 <NA>
## 20 1 0000161403 20210430 2021 04 RUC 11 dígitos 20100199743 <NA>
## # ... with 29 more variables: nro_documento <chr>, tipo_persona <chr>,
## # tipo_empresa <chr>, cantidad_empresas <dbl>, deuda_normal <dbl>,
## # deuda_cpp <dbl>, deuda_deficiente <dbl>, deuda_dudoso <dbl>,
## # deuda_perdida <dbl>, apellido_razonsoc <chr>, apellido_materno <chr>,
## # apellido_casada <lgl>, nombre1 <chr>, nombre2 <chr>, registro2 <chr>,
## # cod_empresa <chr>, empresa <chr>, tipo_credito <chr>, condicion <dbl>,
## # saldo <dbl>, moneda <chr>, clasificacion <chr>, cod_cuenta <chr>, ...
Las variables que podemos encontrar en el RCC son las siguientes.
diccionario <- read_excel("5. Pedidos/ITP/Diccionario.xlsx")
knitr::kable(diccionario, caption = "Diccionario de datos del RCC")
| posición | columna | descripción |
|---|---|---|
| 1 | registro1 | Tipo de registro (1 = Datos del cliente) |
| 2 | cod_cliente | Código SBS del cliente |
| 3 | fecha | Fecha del reporte |
| 4 | año | Año |
| 5 | mes | Mes |
| 6 | tipo_ruc | Tipo de RUC |
| 7 | ruc | RUC |
| 8 | tipo_documento | Tipo de documento de identidad |
| 9 | nro_documento | Código de documento de identidad |
| 10 | tipo_persona | Tipo de persona |
| 11 | tipo_empresa | Tipo de empresa |
| 12 | cantidad_empresas | Número de empresas en que ha sido reportado el cliente |
| 13 | deuda_normal | Saldo de deuda en calificación Normal |
| 14 | deuda_cpp | Saldo de deuda en calificación CPP |
| 15 | deuda_deficiente | Saldo de deuda en calificación Deficiente |
| 16 | deuda_dudoso | Saldo de deuda en calificación Dudoso |
| 17 | deuda_perdida | Saldo de deuda en calificación Pérdida |
| 18 | apellido_razonsoc | Razón social o apellido paterno o nombre de mancómuno |
| 19 | apellido_materno | Apellido materno |
| 20 | apellido_casada | Apellido de casada |
| 21 | nombre1 | Primer nombre |
| 22 | nombre2 | Segundo nombre |
| 23 | registro2 | Tipo de registro (2 = Saldos) |
| 24 | cod_empresa | Código de la empresa en la que registra deuda |
| 25 | empresa | Nombre de la empresa en la que se registra deuda |
| 26 | tipo_credito | Tipo de crédito |
| 27 | condicion | Condición en días |
| 28 | saldo | Saldo |
| 29 | moneda | Operaciones por moneda |
| 30 | clasificacion | Clasificación del cliente en la empresa |
| 31 | cod_cuenta | Código de la cuenta contable del RCC |
| 32 | cod_cuenta_contable | Código de la cuenta contable del manual |
| 33 | cod_cuenta_1d | Cuenta: Clase |
| 34 | cod_cuenta_2d | Cuenta: Rubro |
| 35 | cod_cuenta_4d | Cuenta: Cuenta |
| 36 | cod_cuenta_6d | Cuenta: Subcuenta |
| 37 | cod_cuenta_8d | Cuenta: Cuenta analitica |
Además, no se encuentra información para las 766 empresas. Como máximo hay información para 388 empresas para todo el periodo del segundo trimestre.
#length(unique(rcc202104$cod_cliente))
#length(unique(rcc202105$cod_cliente))
#length(unique(rcc202106$cod_cliente))
length(unique(rcc$cod_cliente))
## [1] 388
Empezamos analizando el periodo de junio de 2021.
empresas <- empresas[c(1:3)]
datos_cliente <- rcc202106[c(2:22)]
datos_cliente$tipo_ruc[is.na(datos_cliente$tipo_ruc)] <- ""
datos_cliente$ruc[is.na(datos_cliente$ruc)] <- ""
n = dim(datos_cliente)[1]
for(i in 1:n){
if(i>0){
if(datos_cliente$tipo_ruc[i]==""){
datos_cliente$tipo_ruc[i]=datos_cliente$tipo_documento[i]
}
}
}
for(i in 1:n){
if(i>0){
if(datos_cliente$ruc[i]==""){
datos_cliente$ruc[i]=datos_cliente$nro_documento[i]
}
}
}
datos_cliente <- datos_cliente %>%
rename(tipo_doc = tipo_ruc,
nro_doc = ruc)
datos_cliente <- datos_cliente[c(1,3:6,9:21)]
datos_cliente <- datos_cliente %>%
distinct()
# ONELIFE PERU S.A.C tiene el mismo RUC que PLAZA QUERO SAC
datos_cliente <- datos_cliente %>%
filter(apellido_razonsoc != "ONELIFE PERU S.A.C")
empresas_202106 <- merge(x = empresas, y = datos_cliente, by.x = "RUC / DNI", by.y = "nro_doc", all = TRUE)
colnames(empresas_202106)[1]<-"nro_doc"
colnames(empresas_202106)[2]<-"id"
colnames(empresas_202106)[3]<-"nombre"
empresas_202106 <- empresas_202106[, c(2,3,7,1,4,5,6,8,9,10,17,18,19,20,11,12,13,14,15)]
empresas_202106 <-empresas_202106 %>%
drop_na(tipo_doc)
empresas_202106 <- empresas_202106[,c(1:4,15:19)]
knitr::kable(empresas_202106[1:5,], caption = "Empresas con información del RCC")
| id | nombre | tipo_doc | nro_doc | deuda_normal | deuda_cpp | deuda_deficiente | deuda_dudoso | deuda_perdida |
|---|---|---|---|---|---|---|---|---|
| 100499 | Majnu | RUC 11 dígitos | 10053945657 | 100 | 0 | 0 | 0 | 0 |
| 100677 | CALLE MADRID ALFREDO RAUL | DNI | 10059129 | 100 | 0 | 0 | 0 | 0 |
| 100408 | Capullo de Alelí Hecho a Mano | RUC 11 dígitos | 10402520715 | 100 | 0 | 0 | 0 | 0 |
| 100699 | AGUILAR QUIROZ CROSWEL EDUARDO | DNI | 18188218 | 0 | 0 | 0 | 0 | 0 |
| 100694 | FILTROS LYS S.A. | RUC 11 dígitos | 20100121043 | 0 | 0 | 0 | 0 | 100 |
Se procede con el análisis de la clasificación de deuda de las empresas
n = dim(empresas_202106)[1]
for(i in 1:n){
if(i>0){
if(empresas_202106$deuda_normal[i]>=60){
empresas_202106$clasificacion[i]="Empresa con buen historial"
}else if(empresas_202106$deuda_normal[i]<60 & (empresas_202106$deuda_cpp[i]!=0 | empresas_202106$deuda_deficiente[i]!=0 | empresas_202106$deuda_dudoso[i]!=0 | empresas_202106$deuda_perdida[i]!=0)){
empresas_202106$clasificacion[i]="Empresa con mal historial"
}else if(empresas_202106$deuda_normal[i]==0 & empresas_202106$deuda_cpp[i]==0 & empresas_202106$deuda_deficiente[i]==0 & empresas_202106$deuda_dudoso[i]==0 & empresas_202106$deuda_perdida[i]==0){
empresas_202106$clasificacion[i]="Empresa sin clasificación"
}
}
}
knitr::kable(empresas_202106[1:5,], caption = "Clasificación de empresas")
| id | nombre | tipo_doc | nro_doc | deuda_normal | deuda_cpp | deuda_deficiente | deuda_dudoso | deuda_perdida | clasificacion |
|---|---|---|---|---|---|---|---|---|---|
| 100499 | Majnu | RUC 11 dígitos | 10053945657 | 100 | 0 | 0 | 0 | 0 | Empresa con buen historial |
| 100677 | CALLE MADRID ALFREDO RAUL | DNI | 10059129 | 100 | 0 | 0 | 0 | 0 | Empresa con buen historial |
| 100408 | Capullo de Alelí Hecho a Mano | RUC 11 dígitos | 10402520715 | 100 | 0 | 0 | 0 | 0 | Empresa con buen historial |
| 100699 | AGUILAR QUIROZ CROSWEL EDUARDO | DNI | 18188218 | 0 | 0 | 0 | 0 | 0 | Empresa sin clasificación |
| 100694 | FILTROS LYS S.A. | RUC 11 dígitos | 20100121043 | 0 | 0 | 0 | 0 | 100 | Empresa con mal historial |
x = table(empresas_202106$clasificacion)
pie(x, labels = x, main = "Clasificación de empresas \n n = 366", col = heat.colors(length(x)))
legend("topright", c("Empresas con buen historial","Empresa con mal historial","Empresa sin clasificación"), cex = 0.8, fill = heat.colors(length(x)))