Departamento en venta en la Ciudad Autónoma de Buenos Aires, 2010-2020

Presentación

En el presente trabajo voy a realizar un analisis descriptivo de algunas caracteristicas de los departamentos publicados para la venta en la Ciudad Autónoma de Buenos Aires.

A lo largo del desarrollo voy a guiarme por las siguientes preguntas exploratorias con el objetivo de establecer algunas caracterizaciones sobre el mercado inmobiliario en CABA y tratar de establecer algunas comparaciones temporales para comprender su evolución.

Preguntas

  • ¿Cómo varia el precio de los departamentos y de los M2 del 2010 al 2020?
  • ¿Existen diferencias sustanciales entre los precios de los departamentos y del M2 según barrio?
  • ¿Se observan cambios en el ranking de barrios más caros entre el 2010 y el 2020?
  • ¿Cuáles son las características de los departamentos publicados?¿Cambia del 2010 al 2020?

Variables a utiilizar

A partir de una primera aproximación a los datasets disponibles para realizar el análisis tome la decisión de hacer uso de las siguientes variables para contestar las preguntas planteadas.

  • Precio de los departamentos en USD
  • Precio del metro cuadrado (M2)
  • Barrio
  • Comuna
  • Ambientes
  • M2
  • Antiguedad
  • Latitud

Librerías

Para el trabajo se usaron las siguientes librerías

library(knitr)
library(kableExtra)
library(sf)
library(ggmap)
library(viridis)
library(tidyverse)
library(ggplot2)
library(lubridate)
library(hrbrthemes)
library(plotly)
library(rmarkdown)

Desarrollo

Trabajo con la base

Lo primero que hice fue la importación de las bases desde el 2010 al 2020 y una primera limpieza para trabajar con las mismas variables. por lo cual fue necesario en algunos casos renombrarlas. Se dieron casos en donde tuve que crear variable que no estaban en el dataset como por ejemplo el precio del m2, que resultaba del cociente entre el precio total del departamento y los M2. Por otro lado, en algunos casos algunas variables no existían, como Latitud y Longitud y se dejaron las columnas vacías.

Luego se integraron las bases de cada año para trabajar en una misma base y se guardó el documento para luego levantarlo y poder limpiar el enviorment.

base2010_2020 <- read.csv("base2010_2020.csv") %>% 
  select(-1)

Limpieza de la base

Una vez que se levantó la base. Fue necesario pasar a numérico las variables con las que se iban a realizar operaciones y para eso se cambio las comas por puntos

base2010_2020$U_S_M2 <-gsub(",",".",base2010_2020$U_S_M2)
base2010_2020$DOLARES <-gsub(",",".",base2010_2020$DOLARES)

base2010_2020$DOLARES <- as.numeric(base2010_2020$DOLARES) #Se convierte  DOLARES a numérico
base2010_2020$U_S_M2 <- as.numeric(base2010_2020$U_S_M2)  #Se convierte  ValorM2USD a numérico

#Modifca formato valores para gráficos
options(scipen = 99) 

Se homologaron los nombres de los barrios y de las comunas ya que no aparecían de la misma manera en todos los datasets

base2010_2020$BARRIO[base2010_2020$BARRIO %in% c("NUÑEZ","NUNEZ", "NUÔö£├ªEZ", "NUÑEZ", #SE MODIFICA BARRIO NUÑEZ
                                                             "NU├ö├Â┬úÔö£├│Ôö£├ÂÔö£├ºÔö£ÔöÉEZ", 
                                                             "NU├ö├Â┬úÔö£┬¬EZ", "NU├âÔÇÿEZ","NU?æEZ")] <- "NUNEZ"

#Se homologan los barrios subdivididos
base2010_2020$BARRIO[base2010_2020$BARRIO %in% c("BARRACAS ESTE", "BARRACAS OESTE")] <- "BARRACAS"
base2010_2020$BARRIO[base2010_2020$BARRIO %in% c("FLORES NORTE", "FLORES SUR")] <- "FLORES"
base2010_2020$BARRIO[base2010_2020$BARRIO %in% c("VILLA DEVOTO NORTE", "VILLA DEVOTO SUR")] <- "VILLA DEVOTO"
base2010_2020$BARRIO[base2010_2020$BARRIO %in% c("MONSERRAT")] <- "MONTSERRAT"



#Homologar comunas

base2010_2020 <- base2010_2020 %>% 
mutate(COMUNA = case_when( COMUNA %in% c("COMUNA 01",1)   ~ "COMUNA 01",
                           COMUNA %in% c("COMUNA 02",2)   ~ "COMUNA 02",
                           COMUNA %in% c("COMUNA 03",3)   ~ "COMUNA 03",
                           COMUNA %in% c("COMUNA 04",4)   ~ "COMUNA 04",
                           COMUNA %in% c("COMUNA 05",5)   ~ "COMUNA 05",
                           COMUNA %in% c("COMUNA 06",6)   ~ "COMUNA 06",
                           COMUNA %in% c("COMUNA 07",7)   ~ "COMUNA 07",
                           COMUNA %in% c("COMUNA 08",8)   ~ "COMUNA 08",
                           COMUNA %in% c("COMUNA 09",9)   ~ "COMUNA 09",
                           COMUNA %in% c("COMUNA 10",10)  ~ "COMUNA 10",
                           COMUNA %in% c("COMUNA 11",11)  ~ "COMUNA 11",
                           COMUNA %in% c("COMUNA 12",12)  ~ "COMUNA 12",
                           COMUNA %in% c("COMUNA 13",13)  ~ "COMUNA 13",
                           COMUNA %in% c("COMUNA 14",14)  ~ "COMUNA 14",
                           COMUNA %in% c("COMUNA 15",15)  ~ "COMUNA 15" ))

Una vez que la base tenía variables con las mismas categorías, trabajé con gráficos de boxsplot para filtrar los valores outliers de las distintas variables

#ej: precioM2
ggplot(base2010_2020
         , aes(x= COMUNA, y=U_S_M2)) +   
  geom_boxplot( )  +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))

Al analizar todas las variables, filtré aquellos valores outliers

 base2010_2020   <- base2010_2020 %>% #Se eliminan las comunas sin valor
                        filter(COMUNA != "",
                               DOLARES   < 6000000,
                               DOLARES   > 25000,
                               U_S_M2    < 15000, #Se eliminan USDMT2 mayores de 15k por outliers
                               AMBIENTES < 100,  #se elimina un departamento con 321 ambientes por error de carga
                               M2        <  1000,
                               M2        > 10)    #se eliminan propiedades con mas de 1000m2 : 31obs

Análisis

Una vez que la base se encontraba en condiciones, hice los primeros cálculos. Para esto generé una tabla con las principales características de los departamentos publicados

 datos_anio <- base2010_2020 %>% 
                    group_by(Anio) %>% 
                    summarise( Total_publicaciones      = n(),
                               Valor_promedio_M2USD        = round(mean(U_S_M2),0),
                               Valor_promedio_deptoUSD     = round(mean(DOLARES),0),
                               cant_ambientes_prom      =mean(AMBIENTES),
                               M2_prom                  =mean(M2)) 

Tabla1 <- datos_anio %>%
kbl() %>%
  kable_material(c("striped", "hover")) 

Tabla1
Anio Total_publicaciones Valor_promedio_M2USD Valor_promedio_deptoUSD cant_ambientes_prom M2_prom
2010 18456 1783 141824 2.651116 79.06475
2011 17313 2168 188043 2.290302 83.10565
2012 8813 2392 216007 2.226938 87.78858
2013 17558 2204 186056 2.475339 83.81894
2014 12720 2321 210206 2.149293 86.08451
2015 11412 2234 206706 2.537504 88.99939
2016 6179 2768 175809 2.458974 68.43518
2017 71876 2818 254335 2.679643 84.98941
2018 83948 3250 255221 2.595762 80.63490
2019 86566 3272 256188 2.643463 81.16160
2020 156207 2912 213473 2.536308 71.31052

En este primer análisis se observa como incrementa a través de los años la cantidad de publicaciones, siendo 8 veces mas las del 2020 comparado al 2010. Por otro lado existe un aumento tanto en el valor del M2 como en el valor de las propiedades, principalmente a partir del 2017 que aumentan un 25% aproximadamente. En el 2020 producto de la pandemia se observa un descenso.
En el promedio de M2 se observa una disminución entre 2010 y 2020, pasando de un promedio de 80m2 a 70 m2

Gráficos de evolucion de los precios

Para facilitar la observación de la evolución de los precios de las propiedad y del M2 durante la ultima década, graficamos la información anterior en un gráfico de área que permite observar la evolución de un fenómeno en el tiempo

evol_valor_propiedades_2010_2020 <- 
ggplot(datos_anio, aes(x=Anio, y=Valor_promedio_deptoUSD)) +
  geom_area( fill="#69b3a2", alpha=0.4) +
  geom_line(color="#69b3a2", size=1) +
  geom_point(size=2, color="#69b3a2") +
  scale_x_continuous(breaks = 2010:2020)+
 scale_y_continuous (breaks = c(50000,100000,150000,200000,250000,300000)) +
  theme_minimal() +
  labs(title = ("Grafico 1a :Evolución precio  promedio propiedades de 2010 al 2020. CABA"),
         subtitle = "Ciudad Autónoma de Buenos Aires",
        caption = "Buenos Aires Data",
        x = "Año", y = "Precio propiedades en USD")

evol_valor_propiedades_2010_2020

evol_valor_m2_2010_2020 <- 
ggplot(datos_anio, aes(x=Anio, y=Valor_promedio_M2USD)) +
  geom_area( fill="#feb24c", alpha=0.4) +
  geom_line(color="#f03b20", size=1) +
  geom_point(size=2, color="#f03b20") +
  scale_x_continuous(breaks = 2010:2020)+
 scale_y_continuous (breaks = c(1000,2000,3000,4000,5000,6000,7000)) +
  theme_minimal() +
  labs(title = ("Grafico 1b Evolución valor M2 promedio propiedades de 2010 al 2020. CABA"),
         subtitle = "Ciudad Autónoma de Buenos Aires",
        caption = "Buenos Aires Data",
        x = "Año", y = "Precio M2 en USD")

plotlyevol_valor_m2_2010_2020 <- ggplotly(evol_valor_m2_2010_2020)


plotlyevol_valor_m2_2010_2020

Luego de analizar los precios a nivel CABA, pasamos a analizar el comportamiento de los precios en función de la distribución del territorio urbano

datos_barrio <- base2010_2020 %>% 
                                  group_by(Anio, BARRIO) %>% 
                                  summarise(  Valor_promedio_M2USD        = round(mean(U_S_M2),0),
                                              Valor_promedio_deptoUSD     = round(mean(DOLARES),0),
                                              M2_prom                  = round(mean(M2),0))  
  datos_barrio <- datos_barrio %>% 
    arrange(desc( ... = Valor_promedio_M2USD))

Tabla2 <- datos_barrio %>%
paged_table()


Tabla2

Con la tabla creada se conforma un ranking () de los barrios de acuerdo al valor en USD del M2 del 2010 al 2020. Los primeros lugares están ocupados en forma repetida por los barrios ubicadas en el norte de la Ciudad de Buenos Aires. Lo mismo ocurre de forma inversa con aquellos barrios ubicados en el sur.

promedio_precios_comuna <- base2010_2020 %>% 
                           group_by(Anio, COMUNA) %>% 
                           summarise( Valor_promedio_M2  = mean(U_S_M2),
                                      Valor_promedio_depto     = mean(DOLARES) )
                  
evol_precio_m2_comunas <- ggplot(promedio_precios_comuna, aes(x = Anio, y = Valor_promedio_M2, color = COMUNA)) +
                          geom_line()+
                             scale_x_discrete(breaks = 2010:2020)+
                           theme_minimal() +
                          facet_wrap(~COMUNA)+
                          labs (title = "Grafico 2: Evolución valor M2 2010-2020 por comunas",
                                x = "Año",
                                y= "Precio promedio MT2 en USD",
                                size = "población en millones",
                                caption = "fuente : DatosAbiertos.CABA")
evol_precio_m2_comunas

Al observar como se comportan los precios en el tiempo en función de las comunas, vemos que en su gran mayoría respetan las variaciones que presentan los totales a nivel Ciudad, lo que marca un aumento de precios parejo. El caso de las comunas 4 y 8(ambas en el sur de CABA) serían la excepción ya que el precio del M2 disminuye del 2010 al 2020

Visualización

Mapas

Una vez realizdo el primer análisis, decidí georeferenciar los datos obtenidos para así visualizar la distribución de los precios en el mapa de CABA.
Para esto tomé una base con el mapa de la Ciudad de Buenos Aires en un formato para poder graficarlo junto con la división en barrios y comunas. Lo agrupé y modifiqué los nombres de los barrios para matchearlo con la base con la que estaba trabajando

radios <- read_sf("https://bitsandbricks.github.io/data/CABA_rc.geojson")

barrios_geo <- radios %>% 
    group_by(BARRIO) %>% 
    summarise(POBLACION = sum(POBLACION),
              VIVIENDAS = sum(VIVIENDAS),
              HOGARES = sum(HOGARES),
              HOGARES_NBI = sum(HOGARES_NBI),
              AREA_KM2 = sum(AREA_KM2))

#Se modifican barrios para matchear con base deptos
barrios_geo$BARRIO[barrios_geo$BARRIO %in% c("MONSERRAT")] <- "MONTSERRAT"
barrios_geo$BARRIO[barrios_geo$BARRIO %in% c("NUÑEZ")] <- "NUNEZ"

Tomando como referencia las latitudes y longitudes, realicé un mapa de calor con las publicaciones del año 2018 para visualizar la distribución en el territorio porteño de los departamentos en venta, diferenciando aquellas zonas con mayores precios del M2. Para esto realicé un filtro para eliminar los outliers de la zona de Puerto Madero que dificultaban la diferenciación a partir de la escala de valores

mapa_calor_CABA2018_ValorM2USD <- ggplot() + 
                    geom_sf(data = barrios_geo)+
                    geom_point(data = filter(base2010_2020, Anio == 2018 & U_S_M2 < 5000), 
                                   aes(x = LON, y = LAT, color = U_S_M2),
                                   size = 1, alpha = 0.2)+
                      scale_color_viridis_c()  +
                      theme_void()+
                      labs(title = "Mapa 1: Precio promedio del m2 en USD. 2019",
                            subtitle ="Barrios de la Ciudad Autónoma de Buenos Aires",
                             fill = "Precio promedio del M2 en USD",
                            caption = "Buenos Aires Data" ) 
mapa_calor_CABA2018_ValorM2USD

Luego de visualizar la distribución de publicaciones, creé otros dos mapa para analizar las características de los barrios de CABA de acuerdo al valor de los departamentos publicados. Para esto primero fue necesario crear una tabla con los cálculos de los promedios de los valores, luego hacer un join con el dataset con las geometrias de los barrios y excluir Puerto Madero ya que dificultaba la visualización por los outliers

precios_barrio <- base2010_2020 %>% 
                 group_by( BARRIO) %>% 
                 summarise( Valor_promedio_M2  = mean(U_S_M2),
                            Valor_promedio_depto     = mean(DOLARES))  

precios_barrio <- precios_barrio %>%
                  left_join(barrios_geo)


precios_barrio_sM <- precios_barrio %>% 
  filter((BARRIO != "PUERTO MADERO"))

barrios_geo_sin_madero <- barrios_geo %>% 
  filter((BARRIO != "PUERTO MADERO"))

mapa_valor_propiedades <- ggplot(barrios_geo_sin_madero) +
                            geom_sf(aes(fill = precios_barrio_sM$Valor_promedio_depto)) +
                            scale_fill_viridis_c()+
                            theme_void() +
                            labs(title = "Mapa 2: Precio promedio de la propiedad en USD. 2010-2020",
                              subtitle = "Barrios de la Ciudad Autónoma de Buenos Aires",
                              fill = "Promedio Precio USD Propiedad",
                              caption = "Buenos Aires Data") 
                                                
                      
mapa_valor_propiedades

En este mapa se confirma lo que venimos observando, las propiedad de mayores precios se concentran durante el periodo en el norte de la Ciudad de Buenos Aires, principalmente en los barios de Palermo, Nunez, Colegiales, Belgrano, Recoleta y Retiro

Otras caracteristicas

Ambientes

Otra de las características que se destaca en el análisis temporal es la evolución en relación a la cantidad de ambientes de los departamentos ofertados.

ambientes_anio <- base2010_2020 %>% 
                 filter(AMBIENTES < 6,
                        AMBIENTES> 0) %>% 
                 group_by( Anio, AMBIENTES) %>% 
                 summarise( publicaciones_tot = n()) %>% 
                     mutate   (porc_ambientes    = round(publicaciones_tot/sum(publicaciones_tot)*100, 2))

evolucion_ambientes <- ggplot(ambientes_anio, aes(x = Anio, y= porc_ambientes, fill = as.factor(AMBIENTES))) + 
                      geom_bar(stat = "identity", color = "black") +
                      scale_x_continuous(breaks = 2010:2020)+
                      scale_fill_ordinal()+
                      guides(fill = guide_legend(title = "Cantidad de ambientes"))+
                      theme_minimal() +
                      labs(title = ("Grafico 3: Cantidad de ambientes por departamento publicado. 2010-2020"),
                             subtitle = "Ciudad Autónoma de Buenos Aires",
                            caption = "Buenos Aires Data
                           Nota: En 2016 no figuran departamentos de 1 ambiente",
                            x = "Año", y = "Ambientes")
evolucion_ambientes

En el gráfico se observa un aumento en el tiempo del peso relativo de departamentos de 1 y 2 ambientes, lo cual puede responder a las tendencias demográficas en relación al descenso del número de integrantes en la familias, y en lo referido a lo urbano,a un mayor aprovechamiento de los espacios y a una reducción de la cantidad de metros cuadrados por departamento