Análisis Exploratorio

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.0      ✔ purrr   0.3.5 
## ✔ tibble  3.1.8      ✔ dplyr   1.0.10
## ✔ tidyr   1.2.1      ✔ stringr 1.4.1 
## ✔ readr   2.1.3      ✔ forcats 0.5.2 
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(ggplot2)

# carga de archivo
archivo <- "GESTION_PRINCIPAL_BETA2.csv"

datos <- read.csv(archivo)

#campos <- c("NOMBRE_PROYECTO", "PRECIO_BASE", "PRECIO_LISTA", "ORIENTACION", "TIPOLOGIA", "TIPO_PRODUCTO", "MET_CUADRADO","SUPERFICIE_INTERIOR", "SUPERFICIE_TERRAZA")

# columnas seleccionadas
unidades <- datos 
head(unidades)
##   CODIGO_PROYECTO CODIGO_ETAPA   ETAPA TORRE DCTO_DINAMICO COLUMNA PRODUCTO
## 1               1            1 ETAPA 1     1             0       3     1003
## 2               1            1 ETAPA 1     1             0       3     1103
## 3               1            1 ETAPA 1     1             0       3     1203
## 4               1            1 ETAPA 1     1             0       3     1303
## 5               1            1 ETAPA 1     1             0       3     1403
## 6               1            1 ETAPA 1     1             0       3     1503
##   PISO MET_CUADRADO PRECIO_BASE PRECIO_LISTA ORIENTACION TIPOLOGIA
## 1   10         74.2     4867.26         5446         SUR     2D/2B
## 2   11         74.2     4906.51         5490         SUR     2D/2B
## 3   12         74.2     4946.08         5534         SUR     2D/2B
## 4   13         74.2     4906.51         5490         SUR     2D/2B
## 5   14         74.2     4867.26         5446         SUR     2D/2B
## 6   15         74.2     4828.32         5403         SUR     2D/2B
##   DISPONIBILIDAD VIGENCIA FACTOR_IVA           ID PRECIO_PROYECTADO
## 1              N     NULL          0 000111D01003           4902.00
## 2              N     NULL          0 000111D01103           4941.00
## 3              N     NULL          0 000111D01203           4981.00
## 4              N     NULL          0 000111D01303           4941.00
## 5              N     NULL          0 000111D01403           4902.00
## 6              N     NULL          0 000111D01503           4862.00
##   TIPO_PRODUCTO SUPERFICIE_INTERIOR SUPERFICIE_TERRAZA SUPERFICIE_JARDIN
## 1  DEPARTAMENTO               63380              10820              .000
## 2  DEPARTAMENTO               63380              10820              .000
## 3  DEPARTAMENTO               63380              10820              .000
## 4  DEPARTAMENTO               63380              10820              .000
## 5  DEPARTAMENTO               63380              10820              .000
## 6  DEPARTAMENTO               63380              10820              .000
##   SUPERFICIE_INTERIOR_MUNICIPAL SUPERFICIE_TERRAZA_MUNICIPAL
## 1                          .000                         .000
## 2                          .000                         .000
## 3                          .000                         .000
## 4                          .000                         .000
## 5                          .000                         .000
## 6                          .000                         .000
##   SUPERFICIE_TOTAL_MUNICIPAL
## 1                       .000
## 2                       .000
## 3                       .000
## 4                       .000
## 5                       .000
## 6                       .000

Correlación

colSums(is.na(unidades))
##               CODIGO_PROYECTO                  CODIGO_ETAPA 
##                             0                             0 
##                         ETAPA                         TORRE 
##                             0                             0 
##                 DCTO_DINAMICO                       COLUMNA 
##                             0                             0 
##                      PRODUCTO                          PISO 
##                             0                             0 
##                  MET_CUADRADO                   PRECIO_BASE 
##                             0                             0 
##                  PRECIO_LISTA                   ORIENTACION 
##                             0                             0 
##                     TIPOLOGIA                DISPONIBILIDAD 
##                             0                             0 
##                      VIGENCIA                    FACTOR_IVA 
##                             0                             0 
##                            ID             PRECIO_PROYECTADO 
##                             0                             0 
##                 TIPO_PRODUCTO           SUPERFICIE_INTERIOR 
##                             0                             0 
##            SUPERFICIE_TERRAZA             SUPERFICIE_JARDIN 
##                             0                             0 
## SUPERFICIE_INTERIOR_MUNICIPAL  SUPERFICIE_TERRAZA_MUNICIPAL 
##                             0                             0 
##    SUPERFICIE_TOTAL_MUNICIPAL 
##                             0
# no hay valores nulos o blancos

str(unidades)
## 'data.frame':    7442 obs. of  25 variables:
##  $ CODIGO_PROYECTO              : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ CODIGO_ETAPA                 : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ ETAPA                        : chr  "ETAPA 1" "ETAPA 1" "ETAPA 1" "ETAPA 1" ...
##  $ TORRE                        : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ DCTO_DINAMICO                : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ COLUMNA                      : int  3 3 3 3 3 3 3 3 3 3 ...
##  $ PRODUCTO                     : chr  "1003" "1103" "1203" "1303" ...
##  $ PISO                         : int  10 11 12 13 14 15 16 17 18 3 ...
##  $ MET_CUADRADO                 : num  74.2 74.2 74.2 74.2 74.2 ...
##  $ PRECIO_BASE                  : num  4867 4907 4946 4907 4867 ...
##  $ PRECIO_LISTA                 : num  5446 5490 5534 5490 5446 ...
##  $ ORIENTACION                  : chr  "SUR" "SUR" "SUR" "SUR" ...
##  $ TIPOLOGIA                    : chr  "2D/2B" "2D/2B" "2D/2B" "2D/2B" ...
##  $ DISPONIBILIDAD               : chr  "N" "N" "N" "N" ...
##  $ VIGENCIA                     : chr  "NULL" "NULL" "NULL" "NULL" ...
##  $ FACTOR_IVA                   : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ ID                           : chr  "000111D01003" "000111D01103" "000111D01203" "000111D01303" ...
##  $ PRECIO_PROYECTADO            : chr  "4902.00" "4941.00" "4981.00" "4941.00" ...
##  $ TIPO_PRODUCTO                : chr  "DEPARTAMENTO" "DEPARTAMENTO" "DEPARTAMENTO" "DEPARTAMENTO" ...
##  $ SUPERFICIE_INTERIOR          : chr  "63380" "63380" "63380" "63380" ...
##  $ SUPERFICIE_TERRAZA           : chr  "10820" "10820" "10820" "10820" ...
##  $ SUPERFICIE_JARDIN            : chr  ".000" ".000" ".000" ".000" ...
##  $ SUPERFICIE_INTERIOR_MUNICIPAL: chr  ".000" ".000" ".000" ".000" ...
##  $ SUPERFICIE_TERRAZA_MUNICIPAL : chr  ".000" ".000" ".000" ".000" ...
##  $ SUPERFICIE_TOTAL_MUNICIPAL   : chr  ".000" ".000" ".000" ".000" ...
# transformar a valores discretos

unidades <- unidades %>%
    mutate(CODIGO_PROYECTO = as.factor(CODIGO_PROYECTO),
           ORIENTACION = as.factor(ORIENTACION),
           TIPOLOGIA = as.factor(TIPOLOGIA),
           TIPO_PRODUCTO = as.factor(TIPO_PRODUCTO),
           SUPERFICIE_INTERIOR = as.double(SUPERFICIE_INTERIOR),
           SUPERFICIE_TERRAZA = as.double(SUPERFICIE_TERRAZA),
           SUPERFICIE_JARDIN = as.double(SUPERFICIE_JARDIN),
           SUPERFICIE_INTERIOR_MUNICIPAL = as.double(SUPERFICIE_INTERIOR_MUNICIPAL),
           SUPERFICIE_TERRAZA_MUNICIPAL  = as.double(SUPERFICIE_TERRAZA_MUNICIPAL),
           SUPERFICIE_TOTAL_MUNICIPAL     = as.double(SUPERFICIE_TOTAL_MUNICIPAL)
           )
## Warning in mask$eval_all_mutate(quo): NAs introducidos por coerción

## Warning in mask$eval_all_mutate(quo): NAs introducidos por coerción

## Warning in mask$eval_all_mutate(quo): NAs introducidos por coerción

## Warning in mask$eval_all_mutate(quo): NAs introducidos por coerción

## Warning in mask$eval_all_mutate(quo): NAs introducidos por coerción

## Warning in mask$eval_all_mutate(quo): NAs introducidos por coerción
str(unidades)
## 'data.frame':    7442 obs. of  25 variables:
##  $ CODIGO_PROYECTO              : Factor w/ 51 levels "1","3","5","6",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ CODIGO_ETAPA                 : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ ETAPA                        : chr  "ETAPA 1" "ETAPA 1" "ETAPA 1" "ETAPA 1" ...
##  $ TORRE                        : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ DCTO_DINAMICO                : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ COLUMNA                      : int  3 3 3 3 3 3 3 3 3 3 ...
##  $ PRODUCTO                     : chr  "1003" "1103" "1203" "1303" ...
##  $ PISO                         : int  10 11 12 13 14 15 16 17 18 3 ...
##  $ MET_CUADRADO                 : num  74.2 74.2 74.2 74.2 74.2 ...
##  $ PRECIO_BASE                  : num  4867 4907 4946 4907 4867 ...
##  $ PRECIO_LISTA                 : num  5446 5490 5534 5490 5446 ...
##  $ ORIENTACION                  : Factor w/ 14 levels "NOR ORIENTE",..: 12 12 12 12 12 12 12 12 12 12 ...
##  $ TIPOLOGIA                    : Factor w/ 36 levels "1.5D/1B","1.5D/1B K",..: 10 10 10 10 10 10 10 10 10 10 ...
##  $ DISPONIBILIDAD               : chr  "N" "N" "N" "N" ...
##  $ VIGENCIA                     : chr  "NULL" "NULL" "NULL" "NULL" ...
##  $ FACTOR_IVA                   : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ ID                           : chr  "000111D01003" "000111D01103" "000111D01203" "000111D01303" ...
##  $ PRECIO_PROYECTADO            : chr  "4902.00" "4941.00" "4981.00" "4941.00" ...
##  $ TIPO_PRODUCTO                : Factor w/ 2 levels "DEPARTAMENTO",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ SUPERFICIE_INTERIOR          : num  63380 63380 63380 63380 63380 ...
##  $ SUPERFICIE_TERRAZA           : num  10820 10820 10820 10820 10820 ...
##  $ SUPERFICIE_JARDIN            : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ SUPERFICIE_INTERIOR_MUNICIPAL: num  0 0 0 0 0 0 0 0 0 0 ...
##  $ SUPERFICIE_TERRAZA_MUNICIPAL : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ SUPERFICIE_TOTAL_MUNICIPAL   : num  0 0 0 0 0 0 0 0 0 0 ...

Corregir valores nulos

Cambiar los valores de las columnas qur tengan “0” o “NULL” a valores NA

str(unidades)
## 'data.frame':    7442 obs. of  25 variables:
##  $ CODIGO_PROYECTO              : Factor w/ 51 levels "1","3","5","6",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ CODIGO_ETAPA                 : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ ETAPA                        : chr  "ETAPA 1" "ETAPA 1" "ETAPA 1" "ETAPA 1" ...
##  $ TORRE                        : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ DCTO_DINAMICO                : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ COLUMNA                      : int  3 3 3 3 3 3 3 3 3 3 ...
##  $ PRODUCTO                     : chr  "1003" "1103" "1203" "1303" ...
##  $ PISO                         : int  10 11 12 13 14 15 16 17 18 3 ...
##  $ MET_CUADRADO                 : num  74.2 74.2 74.2 74.2 74.2 ...
##  $ PRECIO_BASE                  : num  4867 4907 4946 4907 4867 ...
##  $ PRECIO_LISTA                 : num  5446 5490 5534 5490 5446 ...
##  $ ORIENTACION                  : Factor w/ 14 levels "NOR ORIENTE",..: 12 12 12 12 12 12 12 12 12 12 ...
##  $ TIPOLOGIA                    : Factor w/ 36 levels "1.5D/1B","1.5D/1B K",..: 10 10 10 10 10 10 10 10 10 10 ...
##  $ DISPONIBILIDAD               : chr  "N" "N" "N" "N" ...
##  $ VIGENCIA                     : chr  "NULL" "NULL" "NULL" "NULL" ...
##  $ FACTOR_IVA                   : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ ID                           : chr  "000111D01003" "000111D01103" "000111D01203" "000111D01303" ...
##  $ PRECIO_PROYECTADO            : chr  "4902.00" "4941.00" "4981.00" "4941.00" ...
##  $ TIPO_PRODUCTO                : Factor w/ 2 levels "DEPARTAMENTO",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ SUPERFICIE_INTERIOR          : num  63380 63380 63380 63380 63380 ...
##  $ SUPERFICIE_TERRAZA           : num  10820 10820 10820 10820 10820 ...
##  $ SUPERFICIE_JARDIN            : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ SUPERFICIE_INTERIOR_MUNICIPAL: num  0 0 0 0 0 0 0 0 0 0 ...
##  $ SUPERFICIE_TERRAZA_MUNICIPAL : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ SUPERFICIE_TOTAL_MUNICIPAL   : num  0 0 0 0 0 0 0 0 0 0 ...

Nulos O perdidos

library(visdat) # visualización de datos
library(naniar)

vis_dat(unidades)

vis_miss(unidades ,sort_miss = TRUE) 

Proyectos

# cuenta de proyecto
proyectos <- unidades %>%
  group_by(CODIGO_PROYECTO) %>%
  summarise(TOTAL = sum(PRECIO_BASE))

proyectos
## # A tibble: 51 × 2
##    CODIGO_PROYECTO    TOTAL
##    <fct>              <dbl>
##  1 1                556992.
##  2 3                571255.
##  3 5                737629.
##  4 6               1129215.
##  5 7                570655 
##  6 8                585538 
##  7 9                670053.
##  8 10               709171 
##  9 11               695265 
## 10 12               592542 
## # … with 41 more rows
# cuenta de ocurrencias
# por orientación
orientaciones <- aggregate(unidades$PRECIO_LISTA, by=list(unidades$ORIENTACION), FUN=length)
orientaciones
##             Group.1    x
## 1       NOR ORIENTE  463
## 2   NOR ORIENTE SUR   12
## 3      NOR PONIENTE  486
## 4  NOR PONIENTE SUR    1
## 5             NORTE 1552
## 6         NORTE SUR    8
## 7                OP   15
## 8               OPN   28
## 9               OPS    5
## 10          ORIENTE 1170
## 11         PONIENTE 1277
## 12              SUR 1559
## 13      SUR ORIENTE  504
## 14     SUR PONIENTE  362
# utilizando dplyr es algo mas sencillo
orientaciones <- unidades %>% group_by(ORIENTACION) %>%
  summarise(sum(PRECIO_LISTA),
            cuenta = n()) %>%
  subset(cuenta > 30 )
orientaciones
## # A tibble: 8 × 3
##   ORIENTACION  `sum(PRECIO_LISTA)` cuenta
##   <fct>                      <dbl>  <int>
## 1 NOR ORIENTE             4204400.    463
## 2 NOR PONIENTE            3761839.    486
## 3 NORTE                   8172355.   1552
## 4 ORIENTE                 6816611.   1170
## 5 PONIENTE                6632602.   1277
## 6 SUR                     7541545.   1559
## 7 SUR ORIENTE             3540939.    504
## 8 SUR PONIENTE            2741837     362
ggplot(unidades, aes(x = ORIENTACION)) + geom_bar() +
  theme(axis.text.x = element_text(angle = 90))

Dispersion

ggplot(unidades, aes(x=ORIENTACION, y=PRECIO_LISTA, colour=ORIENTACION)) + geom_point()+ggtitle("Titulo") +
    theme(plot.title = element_text(hjust=0.5,face="bold", color = "red"),
          axis.text.x = element_text(angle = 90))

# grafico 1
graf1 <- unidades %>%
  ggplot(aes(x=ORIENTACION, y=PRECIO_LISTA, fill=ORIENTACION)) + 
    geom_boxplot() +
    theme(
      legend.position="none",
      plot.title = element_text(size=11, # tamaño
                                hjust = 0.5, # centrado
                                face="bold", # estilo
                                color = "black"),
      axis.text.x = element_text(angle = 90)
  ) +
  xlab("Orientación") +
  ylab("Precio lista") +
  ggtitle("Unidades")

graf1

# grafico 1
graf2 <- unidades %>%
  ggplot(aes(x=TIPOLOGIA, y=PRECIO_LISTA, fill=TIPOLOGIA)) + 
    geom_boxplot() +
    theme(
      legend.position="none",
      plot.title = element_text(size=11, # tamaño
                                hjust = 0.5, # centrado
                                face="bold", # estilo
                                color = "black"),
      axis.text.x = element_text(angle = 90)
  ) +
  xlab("Tipología") +
  ylab("Precio lista") +
  ggtitle("Unidades")

graf2

Valores de unidades

ggplot(unidades, aes(ORIENTACION, TIPOLOGIA, fill=PRECIO_LISTA)) +
         geom_tile()+
  theme(axis.text.x = element_text(angle = 90))

# TIPOLOGIA
tipologias <- unidades %>% group_by(TIPOLOGIA) %>%
  summarise(cuenta = n())
tipologias
## # A tibble: 36 × 2
##    TIPOLOGIA   cuenta
##    <fct>        <int>
##  1 1.5D/1B        792
##  2 1.5D/1B K       12
##  3 1.5D/2B         20
##  4 1D/1B         1836
##  5 1D/1B CA        48
##  6 1D/1B/K        309
##  7 2D/1B           66
##  8 2D/1B C          1
##  9 2D/1B/K(MD)     90
## 10 2D/2B         1000
## # … with 26 more rows

Referencia:

https://es.r4ds.hadley.nz/