Alumno: Rossi, Santiago

Cargo las librerias

library(tidyverse)
library(knitr)
library(kableExtra)
library(ggplot2)
library(GGally)
library(ggthemes)

1.Preparacion de los datos (I)

Cargo el dataset

properati<-read_rds(path = "ar_properati.rds")
write_rds(properati,"ar_properati.rds")

El dataset de Properati cuenta información de avisos inmobiliarios para cuatro países (Argentina, Brasil, Uruguay y EEUU). Entre las principales variables del dataset se destacan: fecha de al aviso, longitud y latitud de la propiedad, localidad, barrio, tipo de propiedad, cantidad de habitaciones, metros cuadrados cubiertos y totales y precio.

glimpse(properati)
Observations: 388,891
Variables: 24
$ id              <fct> S0we3z3V2JpHUJreqQ2t/w==, kMxcmAS8NvrynGBVbMOEaQ==, Ce3ojF+ZTOkB8d+LI9dpxg==, AUGpj3raGmOCiulSM...
$ ad_type         <fct> Propiedad, Propiedad, Propiedad, Propiedad, Propiedad, Propiedad, Propiedad, Propiedad, Propied...
$ start_date      <fct> 2019-04-14, 2019-04-14, 2019-04-14, 2019-04-14, 2019-04-14, 2019-04-14, 2019-04-14, 2019-04-14,...
$ end_date        <fct> 2019-06-14, 2019-04-16, 9999-12-31, 9999-12-31, 2019-07-09, 2019-08-08, 2019-07-10, 2019-06-14,...
$ created_on      <fct> 2019-04-14, 2019-04-14, 2019-04-14, 2019-04-14, 2019-04-14, 2019-04-14, 2019-04-14, 2019-04-14,...
$ lat             <dbl> -34.94331, -34.63181, NA, -34.65471, -34.65495, -32.93547, -34.65183, -34.91213, -34.60338, NA,...
$ lon             <dbl> -54.92966, -58.42060, NA, -58.79089, -58.78712, -60.68398, -58.65912, -54.84749, -58.43450, NA,...
$ l1              <fct> Uruguay, Argentina, Argentina, Argentina, Argentina, Argentina, Argentina, Uruguay, Argentina, ...
$ l2              <fct> Maldonado, Capital Federal, Bs.As. G.B.A. Zona Norte, Bs.As. G.B.A. Zona Oeste, Bs.As. G.B.A. Z...
$ l3              <fct> Punta del Este, Boedo, NA, Moreno, Moreno, Rosario, Ituzaingó, José Ignacio, Almagro, Miramar, ...
$ l4              <fct> NA, NA, NA, Moreno, Moreno, NA, Ituzaingó, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ...
$ l5              <fct> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
$ l6              <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
$ rooms           <int> 2, NA, 2, 2, 2, 4, NA, 6, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 1, 1, 1, 1, 1, 1, ...
$ bedrooms        <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
$ bathrooms       <int> 1, NA, 1, 2, 3, 1, 3, 3, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, 1, 1, 1, 1, 1, 1, 1, 1,...
$ surface_total   <int> 45, NA, 200, 460, 660, NA, 70, NA, 1300, 405, 352, 373, 360, 1325, 250, 80142, 101, NA, 54, 180...
$ surface_covered <int> 40, NA, NA, 100, 148, 89, 122, NA, NA, NA, NA, NA, NA, 2, NA, NA, NA, NA, 54, 180, 33, 33, 34, ...
$ price           <int> 13000, 0, NA, NA, NA, NA, NA, NA, 0, NA, 0, NA, NA, NA, NA, NA, 0, 0, 0, NA, 0, 0, 0, 0, 0, 0, ...
$ currency        <fct> UYU, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
$ price_period    <fct> Mensual, Mensual, NA, Mensual, Mensual, Mensual, Mensual, Mensual, Mensual, Mensual, Mensual, M...
$ title           <fct> Departamento - Roosevelt, PH - Boedo, Ituzaingo  1100 - $ 1 - Casa Alquiler, Dr. Vera   300 - C...
$ property_type   <fct> Departamento, PH, Casa, Casa, Casa, Casa, Casa, Casa, Lote, Lote, Lote, Lote, Lote, Lote, Lote,...
$ operation_type  <fct> Alquiler, Venta, Alquiler, Venta, Venta, Venta, Venta, Alquiler, Venta, Venta, Venta, Venta, Ve...
summary(properati)
                        id              ad_type            start_date           end_date           created_on    
 ///dr7MC645N/4gZ6eXuUg==:     1   Propiedad:388891   2019-05-31: 10567   9999-12-31:117295   2019-05-31: 10567  
 //+CYRxKFmd756CnDA/cqA==:     1                      2019-04-29:  6121   2019-06-23: 34915   2019-04-29:  6121  
 //+tP3jysTzlcccJ3QSc0w==:     1                      2019-01-16:  6102   2019-06-08: 15091   2019-01-16:  6102  
 //0A/RLg2X1acCjxTk7lXQ==:     1                      2019-06-01:  4749   2019-07-10: 13981   2019-06-01:  4749  
 //17Mk/t87M5tdc6l/hwVw==:     1                      2019-06-10:  4712   2019-07-19:  8640   2019-06-10:  4712  
 //2nJwFGlRu5WFZQ3szAMQ==:     1                      2019-05-03:  4592   2019-06-14:  7381   2019-05-03:  4592  
 (Other)                 :388885                      (Other)   :352048   (Other)   :191588   (Other)   :352048  
      lat              lon                       l1                                    l2                     l3        
 Min.   :-54.98   Min.   :-105.27   Argentina     :374977   Capital Federal             :124327   Rosario      : 29634  
 1st Qu.:-34.67   1st Qu.: -58.80   Brasil        :    34   Bs.As. G.B.A. Zona Norte    : 72088   Tigre        : 23421  
 Median :-34.60   Median : -58.48   Estados Unidos:   305   Santa Fe                    : 36199   Mar del Plata: 23075  
 Mean   :-34.48   Mean   : -59.37   Uruguay       : 13575   Buenos Aires Costa Atlántica: 30649   Palermo      : 18907  
 3rd Qu.:-34.43   3rd Qu.: -58.40                           Bs.As. G.B.A. Zona Oeste    : 28576   Córdoba      : 14006  
 Max.   : 44.67   Max.   : -41.90                           Bs.As. G.B.A. Zona Sur      : 28080   (Other)      :267077  
 NA's   :50597    NA's   :50597                             (Other)                     : 68972   NA's         : 12771  
           l4                         l5            l6              rooms           bedrooms        bathrooms    
 Nordelta   : 10696   Barrio El Golf   :   400   Mode:logical   Min.   : 1.0     Min.   : -2.00   Min.   : 1.00  
 La Plata   :  4225   BarrioPortezuelo :   400   NA's:388891    1st Qu.: 2.0     1st Qu.:  1.00   1st Qu.: 1.00  
 Ramos Mejía:  3753   Barrio Los Alisos:   230                  Median : 3.0     Median :  2.00   Median : 1.00  
 Olivos     :  2597   Barrio Los Lagos :   173                  Mean   : 2.9     Mean   :  2.16   Mean   : 1.67  
 San Isidro :  2474   Islas del Canal  :   138                  3rd Qu.: 4.0     3rd Qu.:  3.00   3rd Qu.: 2.00  
 (Other)    : 91766   (Other)          :  1065                  Max.   :40.0     Max.   :390.00   Max.   :20.00  
 NA's       :273380   NA's             :386485                  NA's   :144668   NA's   :230747   NA's   :94136  
 surface_total      surface_covered       price           currency       price_period   
 Min.   :    -3.0   Min.   :   -139   Min.   :0.000e+00   ARS :116131   Diario :    49  
 1st Qu.:    50.0   1st Qu.:     43   1st Qu.:2.000e+04   PEN :   123   Mensual:227625  
 Median :    91.0   Median :     70   Median :9.400e+04   USD :242465   Semanal:    28  
 Mean   :   458.3   Mean   :    235   Mean   :2.690e+05   UYU :  1178   NA's   :161189  
 3rd Qu.:   266.0   3rd Qu.:    142   3rd Qu.:2.250e+05   NA's: 28994                   
 Max.   :200000.0   Max.   :4000000   Max.   :2.147e+09                                 
 NA's   :74063      NA's   :97854     NA's   :21222                                     
                                 title                property_type              operation_type  
 DEPARTAMENTO EN VENTA              : 11559   Departamento   :188588   Alquiler         :104263  
 DEPARTAMENTO EN ALQUILER           :  7115   Casa           : 84117   Alquiler temporal: 15815  
 CASA EN VENTA                      :  5298   Lote           : 45724   Venta            :268813  
 Departamento en Alquiler Temporario:  2364   PH             : 19340                             
 LOTE EN VENTA                      :  2340   Local comercial: 19225                             
 PH EN VENTA                        :  2214   Oficina        : 13516                             
 (Other)                            :358001   (Other)        : 18381                             

Filtro variables seleccionadas: país = Argentina, ciudad= CABA, tipo de operación = venta, tipo de propiedad y moneda de la operación = dólares.

properati<-properati %>% 
  filter(l1=="Argentina" & l2=="Capital Federal" &
                                  currency=="USD" & (property_type=="PH" | property_type=="Departamento" |
                                                     property_type=="Casa") & operation_type=="Venta") %>%
  select(id,l3,rooms,bedrooms,bathrooms,surface_total,surface_covered,price,property_type)
properati %>% 
  head() %>% 
  kable() %>% 
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
id l3 rooms bedrooms bathrooms surface_total surface_covered price property_type
oyj+f764ALCYodIqBvWAww== Barracas NA NA NA 300 180 320000 PH
HdjpKrqdwYfH9YU1DKjltg== Boedo 6 NA 2 178 240 500000 Casa
YwWE3rTb2+gmsBwjUHmAPQ== Palermo NA NA 2 240 157 350000 Casa
6AxnSWOhbIU8TUCqb+paBg== Belgrano 3 NA 4 157 NA 470000 Casa
U4fk+co3Rd8JDMot0pQI6Q== Versalles NA NA 1 140 110 155000 Casa
AfdcsqUSelai1ofCAq2B0Q== Velez Sarsfield 3 NA 2 95 69 199900 Casa

2.Analisis exploratorio (I)

2.a. Cantidad de valores unicos y de valores faltantes (NAs)

Calculo la cantidad de valores unicos por variable.

#Funciones para el cálculo de faltantes y valores únicos
sumo_na<-function(x){  sum(is.na(x))}
cant_unicos<-function(x){  length(unique(x))}
#Cantidad de valores únicos 
properati %>% summarise_all(list( cant_unicos= cant_unicos)) %>% gather()

Calculo la cantidad de valores faltantes por variable. La variable bedrooms tiene una elevada presentcia de datos faltantes.

#Cantidad de faltantes 
properati %>% summarise_all(list(cant_na = sumo_na, cant_unicos= cant_unicos)) %>% gather()
#Grafico Faltantes
properati %>% summarise_all(list(cant_na = sumo_na)) %>% gather() %>% ggplot(.,aes(x=reorder(key,-value), y= value))+ geom_bar(stat = "identity")+  labs(title = "Cantidad de faltates por variable") +
labs(x = "Nº faltantes", y = "Variables") + theme( axis.text.x = element_text(colour = "black", size = 10, angle = 90),
axis.text.y = element_text(colour = "black", size = 10))

Matriz de correlacion para las variables numericas.

Se encuentra que las varaibles bedrooms y rooms registran una elevada correlación lineal (0.92).

properati %>%
  select(-id,-l3,-property_type) %>% 
  cor(., use="complete.obs", method="pearson")
                     rooms   bedrooms  bathrooms surface_total surface_covered      price
rooms           1.00000000 0.92138719 0.61335026    0.06828238      0.07468335 0.48748747
bedrooms        0.92138719 1.00000000 0.61578024    0.06746895      0.07206826 0.43221753
bathrooms       0.61335026 0.61578024 1.00000000    0.06234262      0.06777010 0.59904254
surface_total   0.06828238 0.06746895 0.06234262    1.00000000      0.69656225 0.05095265
surface_covered 0.07468335 0.07206826 0.06777010    0.69656225      1.00000000 0.06257960
price           0.48748747 0.43221753 0.59904254    0.05095265      0.06257960 1.00000000

3. Preparacion de los datos (II)

Elimino variable bedrooms por tener una proporción grande de faltantes y tener una elevada correlación con rooms. Asimismo, me quedo con aquellos registros completos.

properati<-properati %>% select(-bedrooms) %>% filter(complete.cases(.))

4. Analisis exploratorios (II)

4.a.Estadísticas descriptivas para la variable precio

summary(properati$price)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   6000  119000  170000  251577  270000 6000000 

Los precios presentan una distribución log-normal

ggplot(properati, aes(x = price)) + geom_histogram(bins = 40, col="#4d4d4d", fill="#d8b365")+theme_tufte(base_size = 15)+ggtitle("Distribución de precios de inmuebles")+xlab("Precio (USD)")+ylab("Frecuencia")

ggplot(properati, aes(y = price,fill=property_type)) + geom_boxplot()+theme_tufte(base_size = 15) + labs(title = "Precios de inmuebles por tipo de vivienda", subtitle = "en dólares")+xlab("")+ylab("Precios (USD)")+labs(fill = "Tipo de propiedad")+
theme(plot.title = element_text(size = 14, family = "Tahoma", face = "bold"),
      panel.border = element_rect(colour = "black", fill = NA, size = .5),
      legend.position = "bottom")

  
#geom_boxplot(outlier.shape = NA)
properati %>%
  select(-id,-l3,property_type) %>% 
ggpairs(., 
        title = "Matriz de correlaciones",
        mapping = aes(colour= property_type))

5. Outliers

Se tomo como criterio para definir como outlier a aquellos valores que superaban en 2.5 el rango intercuartil. De esta forma se considerarán como outliers al 5% de los datos

#Funciones para identificar valores atípicos
lim_sup_precio <- function(data, tipo_vivienda){data %>% filter(property_type==tipo_vivienda) %>% summarise( l_sup =  quantile(price,probs = 0.75, names = F) +2.5*IQR(price)) }
lim_inf_precio <- function(data, tipo_vivienda){data %>% filter(property_type==tipo_vivienda) %>% summarise( l_sup =  quantile(price,probs = 0.25,names = F) -2.5*IQR(price))}
#Genero variable 'oulier' que toma valor 1 si es considerado valor extremo
properati <- properati %>%
  mutate(outlier = ifelse( (property_type=="Casa" & price > lim_sup_precio(.,"Casa")[[1]]) |
                           (property_type=="Casa" & price < lim_inf_precio(.,"Casa")[[1]]) |
                           (property_type=="PH" & price > lim_sup_precio(.,"PH")[[1]]) |
                           (property_type=="PH" & price < lim_inf_precio(.,"PH")[[1]]) | 
                           (property_type=="Departamento" & price > lim_sup_precio(.,"Departamento")[[1]]) |
                           (property_type=="Departamento" & price < lim_inf_precio(.,"Departamento")[[1]]),1,0 ))
#Genero data frame 'properati 1' que no contiene calores extremos
properati_1<-properati %>% filter(outlier==0)
glue::glue("Proporción de outliers = ", sum(properati$outlier)/nrow(properati))
Proporción de outliers = 0.0518648701425503

6.Analisis exploratorios (III)

ggplot(properati_1, aes(x = price)) + geom_histogram(bins = 40, col="#4d4d4d", fill="#d8b365")+theme_tufte(base_size = 15)+ggtitle("Distribución de precios de inmuebles")+xlab("Precio (USD)")+ylab("Frecuencia")

A continuación se presenta el box-plot de los precios por tipo de propiedad. De observar el gráfico se desprende que: - las casas tienen una mayor dispersión de precios que los otros tipos de vivienda. - las casas son en promedio más caras que los PH y los departamentos. - Los PHs son en promedio más caros que os departamentos.

ggplot(properati_1, aes(y = price,fill=property_type)) + geom_boxplot()+theme_tufte(base_size = 15) + labs(title = "Precios de inmuebles por tipo de vivienda", subtitle = "en dólares")+xlab("")+ylab("Precios (USD)")+ylim(0,9.5e+05)+labs(fill = "Tipo de propiedad")+
theme(plot.title = element_text(size = 14, family = "Tahoma", face = "bold"),
      panel.border = element_rect(colour = "black", fill = NA, size = .5),
      legend.position = "bottom")

properati_1 %>%
  select(-id,-l3,property_type) %>% 
ggpairs(., 
        title = "Matriz de correlaciones",
        mapping = aes(colour= property_type))