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.
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.
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)
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)
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
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
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
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
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