# leo el archivo ar_properties
library(readr) # libreria con la funcion read_csv
datos1a <- read_csv("ar_properties.csv") # Acá completen con su propio PATH al archivo
## Rows: 388891 Columns: 24
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (12): id, ad_type, l1, l2, l3, l4, l5, currency, price_period, title, p...
## dbl (8): lat, lon, rooms, bedrooms, bathrooms, surface_total, surface_cove...
## lgl (1): l6
## date (3): start_date, end_date, created_on
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
datos1a # veo la base
Se seleccionan aquellos registros que pertenecen a Argentina y Capital Federal, cuyo precio esta en dolares (USD), el tipo de propiedad corresponde a Departamento y el tipo de operacion sea Venta.
library(tidyverse) # carga varios paquetes: dplyr, ggplot2, purr, rtingr, etc.
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.5 ✓ dplyr 1.0.7
## ✓ tibble 3.1.4 ✓ stringr 1.4.0
## ✓ tidyr 1.1.3 ✓ forcats 0.5.1
## ✓ purrr 0.3.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
datos1b <- datos1a %>%
# Me quedo con los que pertenecen a Argentina y Capital Federal
filter(l1 == "Argentina",
l2 == "Capital Federal",
# cuyo precio este en dolares
currency == "USD",
# propiedad tipo Departamento
property_type %in% c("Departamento"),
# operaciones de venta
operation_type == "Venta") %>% select(l3,surface_covered,price,lat,lon) %>% na.omit() %>% mutate(precio=price,barrio=l3,sup=surface_covered,pm2=precio/sup )
# chequeo si el filtro se refleja correctamente en mi nuevo dataset datos1b
datos1b
attach(datos1b) # pongo las variables en memoria
Dada una cantidad de vecinos \(N\), para cada depto (lon,lat) tomo los \(N\) deptos más cercanos y calculo el precio mediano por \(m^2\).
library(nabor) # Libreria para calcular vecinos mas cercanos
radio.vecinos<-5000 # cant de vecinos
N<-nrow(datos1b) # cant de deptos
coordenadas<-cbind(lon,lat) # matriz de coordenadas
vecinos<-knn(coordenadas,coordenadas,k=radio.vecinos)$nn.idx # busca vecinos
dimen<-dim(vecinos) # N X radio.vecinos
pm2.vec<-matrix(pm2[vecinos],dimen[1],dimen[2]) # re-agrupo los pm2 de los KNN
pm2.med<-apply(pm2.vec,1,median) # pm2 mediano e los knn de cada depto
# Las 3 zonas de interes
mas.caro<-which.max(pm2.med) # indice del depto de la zona mas cara
mas.barato<-which.min(pm2.med) # indice del depto de la zona mas barata
promedio<-order(pm2.med)[(N+1)/2] # indice del depto de la zona prototipica
head(coordenadas)
## lon lat
## [1,] -58.46259 -34.54307
## [2,] -58.42435 -34.60152
## [3,] -58.42435 -34.60152
## [4,] -58.42435 -34.60152
## [5,] -58.42435 -34.60152
## [6,] -58.42435 -34.60152
pm2.vec[1:10,1:5]
## [,1] [,2] [,3] [,4] [,5]
## [1,] 4509.804 4098.361 4016.393 3657.895 3868.421
## [2,] 2675.676 2148.649 2621.189 2324.324 2477.273
## [3,] 2675.676 2148.649 2621.189 2324.324 2477.273
## [4,] 2675.676 2148.649 2621.189 2324.324 2477.273
## [5,] 2675.676 2148.649 2621.189 2324.324 2477.273
## [6,] 2675.676 2148.649 2621.189 2324.324 2477.273
## [7,] 2675.676 2148.649 2621.189 2324.324 2477.273
## [8,] 2675.676 2148.649 2621.189 2324.324 2477.273
## [9,] 3000.000 3000.000 3000.000 3000.000 3000.000
## [10,] 2675.676 2148.649 2621.189 2324.324 2477.273
dim(pm2.vec)
## [1] 47517 5000
length(pm2.med)
## [1] 47517
Rapido sin labels
library("leaflet") # Libreria en JavaScript interctiva para hacer mapas
## Leaflet map with raster
leaflet() %>% addTiles() %>%
addCircleMarkers(lng=lon[vecinos[mas.caro,]], lat=lat[vecinos[mas.caro,]],fillOpacity=0.5,
,radius=3/2,color="green",stroke = FALSE) %>% addCircleMarkers(lng=lon[vecinos[promedio,]], lat=lat[vecinos[promedio,]],fillOpacity=0.5,
,radius=3/2,color="blue",stroke = FALSE) %>% addCircleMarkers(lng=lon[vecinos[mas.barato,]], lat=lat[vecinos[mas.barato,]],fillOpacity=0.5,
,radius=3/2,color="red",stroke = FALSE)
Lento con labels (puede ser pesado !), solo zona CARA
library("leaflet")
## Leaflet map with raster
leaflet() %>% addTiles() %>% addCircleMarkers(lng=lon[vecinos[mas.caro,]], lat=lat[vecinos[mas.caro,]],fillOpacity=0.5,
,radius=3/2,color="green",stroke = FALSE,label=as.character(round(pm2)))