library(readr)
library(dplyr)
library(tidyverse)
library(sf)
library(sp)
library(spdep)
library(rgdal)
library(rgeos)
library(tmap)
library(tmaptools)
library(spgwr)
library(grid)
library(gridExtra)
library(raster)
library(viridis)
library(spatstat)
library(leaflet)
library(readxl)
#scrap
library(rvest)
library(httr)
library(XML)
library(data.table)
library(devtools)
options(warn = -1,
scipen=999, # evitar notacion cientifica
stringsAsFactors = FALSE)
crs_latlon <- "+proj=longlat +datum=WGS84 +no_defs"
crs_utm <- "+proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"
Bases, incluyendo scrapping
setwd('C:/Users/ext_frjorque/Desktop/Analitica espacial/Taller 3')
Base_Scrapping <- read_excel("Base_Scrapping_GEO.xlsx")
Base_Venta_propiedades <- readRDS("Propiedades_RM (1).rds")
Base_zonas <- readRDS("zc_censo2017 (2).rds")
Base_Censo <- readRDS("personas_2017.rds") #personas 17
Filtramos por Estacion central las otras bases a trabajar
Base_Scrapping <- rename(Base_Scrapping, longitud = Longitude)
Base_Scrapping <- rename(Base_Scrapping, latitud = Latitude)
Base_Venta_propiedades <- rename(Base_Venta_propiedades, COMUNA = codigo_comuna)
Base_Venta_propiedades <- (filter(Base_Venta_propiedades,COMUNA == 13106))
Base_Censo <- (filter(Base_Censo,COMUNA == 13106))
Base_zonas <- (filter(Base_zonas,COMUNA == 13106))
Espcializamos las bases de datos
Base_Scrapping <- st_as_sf(Base_Scrapping, coords = c('longitud','latitud'), crs = 4326, agr = 'identity')
Base_Venta_propiedades <- st_as_sf(Base_Venta_propiedades, coords = c('longitud','latitud'), crs = 4326, agr = 'identity')
Creacion de la medida de variacion UF(M2)
Base_Scrapping$precio <- Base_Scrapping$precio/33000 # transformamos pesos a UF (aproximado)
# Indicador para la base scapping
Base_Scrapping$precio <- as.numeric(Base_Scrapping$precio)
Base_Scrapping$UF_M2 <- Base_Scrapping$precio/Base_Scrapping$area_total
# Indicador para la BBDD original
Base_Venta_propiedades$UF_M2 <- Base_Venta_propiedades$uf/Base_Venta_propiedades$m2_const
ae <- Base_zonas %>% # Ya filtrado para Estacion Central
dplyr::filter(AREA == 1)
grafo_base <-
ae %>%
ggplot() +
geom_sf(fill = NA) +
theme_bw()
Base_Scrapping <- st_make_valid(Base_Scrapping) %>% #corrige vĆ©rtices duplicados o geometrĆas "invalidas"
st_join( # cruce de datos por operacion geografica
transmute( # seleccion de variables a asignar
ae, # poligonos area de estudio
COD_INE_15 # seleccionamos codigo de zona
),
join = st_intersects, # asignaremos por interseccion
left = FALSE # filtra valores donde no hubo interseccion
)
#2. Unir y hacer un ESDA en la base de datos original a través de estudiar la localización a estaciones de metro, Ôreas verdes, educación y cualquier otro elemento que puedan considerar relevante en su comuna de estudia.
Generamos area de estudio (ae)
ae <- Base_zonas %>% # Ya filtrado para Estacion Central
dplyr::filter(AREA == 1)
grafo_base <-
ae %>%
ggplot() +
geom_sf(fill = NA) +
theme_bw()
Complementos BBDD
Ciclovias <- st_read("Ciclovias.shp")
## Reading layer `Ciclovias' from data source
## `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Ciclovias.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 878 features and 8 fields
## Geometry type: MULTILINESTRING
## Dimension: XY
## Bounding box: xmin: -73.25704 ymin: -53.18382 xmax: -68.90344 ymax: -18.42773
## Geodetic CRS: WGS 84
Ciclovias <- (filter(Ciclovias, CUT_SIEDU == 13106))
Colegios <- st_read("Colegios.shp")
## Reading layer `Colegios' from data source
## `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Colegios.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 4660 features and 13 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -78.82864 ymin: -54.9348 xmax: -67.60534 ymax: -18.19582
## Geodetic CRS: WGS 84
Colegios <- (filter(Colegios, COD_COM_RB == 13106))
Concesion_Sanitaria <- st_read("Concesion_Sanitaria.shp")
## Reading layer `Concesion_Sanitaria' from data source
## `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Concesion_Sanitaria.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 367 features and 12 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -73.83751 ymin: -53.30726 xmax: -68.89493 ymax: -18.39995
## Geodetic CRS: WGS 84
Ed_inicial <- st_read("Ed_Inicial.shp")
## Reading layer `Ed_Inicial' from data source
## `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Ed_Inicial.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 2311 features and 44 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -73.79403 ymin: -53.18278 xmax: -68.92593 ymax: -18.42897
## Geodetic CRS: WGS 84
Ed_inicial <- (filter(Ed_inicial, COD_COMUN == 13106))
Metro <- st_read("Metro.shp")
## Reading layer `Metro' from data source
## `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Metro.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 117 features and 10 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -70.75738 ymin: -33.60937 xmax: -70.54485 ymax: -33.36651
## Geodetic CRS: WGS 84
Metro <- (filter(Metro, nombre == "ESTACION CENTRAL" | nombre == "UNIVERSIDAD DE SANTIAGO" | nombre == "SAN ALBERTO HURTADO" | nombre == "ECUADOR" | nombre == "LAS REJAS" | nombre == "PAJARITOS" ))
Paraderos <- st_read("Paraderos.shp")
## Reading layer `Paraderos' from data source
## `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Paraderos.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 27076 features and 6 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -73.79084 ymin: -53.18406 xmax: -68.90461 ymax: -18.42763
## Geodetic CRS: WGS 84
Parques <- st_read("Parques.shp")
## Reading layer `Parques' from data source
## `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Parques.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 1856 features and 16 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: -73.80183 ymin: -53.18216 xmax: -68.91595 ymax: -18.4272
## Geodetic CRS: WGS 84
Parques <- (filter(Parques,CUT == 13106))
Plazas <- st_read("Plazas.shp")
## Reading layer `Plazas' from data source
## `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Plazas.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 22235 features and 16 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: -73.79706 ymin: -53.18867 xmax: -68.89847 ymax: -18.42497
## Geodetic CRS: WGS 84
Plazas <- (filter(Plazas,CUT == 13106))
Salud <- st_read("Salud.shp")
## Reading layer `Salud' from data source
## `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Salud.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 848 features and 31 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -73.79259 ymin: -53.18052 xmax: -68.92335 ymax: -18.42689
## Geodetic CRS: WGS 84
Salud <- (filter(Salud,CUT_ == 13106))
Intersecatamos las que no tenia codigo
Paraderos <- st_make_valid(Paraderos) %>% #corrige vĆ©rtices duplicados o geometrĆas "invalidas"
st_join( # cruce de datos por operacion geografica
transmute( # seleccion de variables a asignar
ae, # poligonos area de estudio
COMUNA # seleccionamos codigo de zona
),
join = st_intersects, # asignaremos por interseccion
left = FALSE # filtra valores donde no hubo interseccion
)
Concesion_Sanitaria <- st_make_valid(Concesion_Sanitaria) %>% #corrige vĆ©rtices duplicados o geometrĆas "invalidas"
st_join( # cruce de datos por operacion geografica
transmute( # seleccion de variables a asignar
ae, # poligonos area de estudio
COMUNA # seleccionamos codigo de zona
),
join = st_intersects, # asignaremos por interseccion
left = FALSE # filtra valores donde no hubo interseccion
)
Generamos distancias pata todas las propiedades dadas los distintos recursos (Metro, ciclovĆas, colegios)
# Distancia a Metro
M1 <- st_distance(Base_Venta_propiedades, Metro)
Base_Venta_propiedades$DIST_METRO <- apply(M1, 1, min)
# inluir dummy desde los 500 y tratar con otra desde los 700
# Distancia a CiclovĆa
M2 <- st_distance(Base_Venta_propiedades, Ciclovias)
Base_Venta_propiedades$DIST_CICLOVIA<- apply(M2, 1, min)
# Distancia a Colegios
M3 <- st_distance(Base_Venta_propiedades, Colegios)
Base_Venta_propiedades$DIST_COLEGIO <- apply(M3, 1, min)
# Distancia a Paraderos
M4 <- st_distance(Base_Venta_propiedades, Paraderos)
Base_Venta_propiedades$DIST_PARADEROS <- apply(M4, 1, min)
# Distancia a un Parque
M5 <- st_distance(Base_Venta_propiedades, Parques)
Base_Venta_propiedades$DIST_PARQUES <- apply(M5, 1, min)
# dividir en 1000, para tenerlo en kilometros.
#Base_Venta_propiedades <- Base_Venta_propiedades %>%
# mutate(
# ln_uf = log(uf),
# ufm2 = uf/m2_const,
# d_casa = factor(d_casa),
# d_proyecto = factor(d_proyecto),
# codigo_zona = factor(codigo_zona),
# codigo_comuna = factor(COMUNA),
# m2_const_2 = m2_const*m2_const
# )
ggplot(data=Base_Venta_propiedades,aes(x=m2_const,y=uf, colour = COMUNA)) +
geom_point()+
geom_smooth(method='lm', se = TRUE)+
labs(x = 'Construcción [m²]',
y = 'UF/m²',
title = 'Valor en función de la distancia al borde costero',
subtitle = 'Fuente: Elaboración propia')
Promedio de distancias a los distintos elementos
summary(Base_Venta_propiedades)
## ID uf m2_const sup_terreno
## Min. : 277 Min. : 590 Min. : 20.00 Min. : 20.00
## 1st Qu.:12012 1st Qu.: 1809 1st Qu.: 31.60 1st Qu.: 31.60
## Median :12350 Median : 2170 Median : 40.00 Median : 40.00
## Mean :11370 Mean : 2495 Mean : 47.43 Mean : 54.67
## 3rd Qu.:12690 3rd Qu.: 2600 3rd Qu.: 50.00 3rd Qu.: 50.00
## Max. :24666 Max. :29000 Max. :450.00 Max. :1000.00
## dormitorios baƱos estacionamientos bodegas
## Min. : 1.000 Min. :1.000 Min. :0.0000 Min. :0.0000
## 1st Qu.: 1.000 1st Qu.:1.000 1st Qu.:0.0000 1st Qu.:0.0000
## Median : 2.000 Median :1.000 Median :0.0000 Median :0.0000
## Mean : 1.737 Mean :1.251 Mean :0.3331 Mean :0.0903
## 3rd Qu.: 2.000 3rd Qu.:1.000 3rd Qu.:1.0000 3rd Qu.:0.0000
## Max. :10.000 Max. :6.000 Max. :6.0000 Max. :3.0000
## d_casa d_proyecto codigo_zona COMUNA
## Min. :0.00000 Min. :0.00000 Min. :13106011001 Min. :13106
## 1st Qu.:0.00000 1st Qu.:0.00000 1st Qu.:13106101002 1st Qu.:13106
## Median :0.00000 Median :0.00000 Median :13106101004 Median :13106
## Mean :0.08734 Mean :0.01258 Mean :13106104866 Mean :13106
## 3rd Qu.:0.00000 3rd Qu.:0.00000 3rd Qu.:13106111003 3rd Qu.:13106
## Max. :1.00000 Max. :1.00000 Max. :13106141002 Max. :13106
## codigo_region geometry UF_M2 DIST_METRO
## Min. :13 POINT :1351 Min. : 11.08 Min. : 8.425
## 1st Qu.:13 epsg:4326 : 0 1st Qu.: 48.43 1st Qu.: 334.584
## Median :13 +proj=long...: 0 Median : 54.86 Median : 446.683
## Mean :13 Mean : 56.27 Mean : 515.453
## 3rd Qu.:13 3rd Qu.: 61.07 3rd Qu.: 660.561
## Max. :13 Max. :583.93 Max. :2475.813
## DIST_CICLOVIA DIST_COLEGIO DIST_PARADEROS DIST_PARQUES
## Min. : 1.569 Min. : 7.762 Min. : 0.1947 Min. : 0.0
## 1st Qu.: 142.722 1st Qu.: 188.125 1st Qu.: 58.3346 1st Qu.: 839.3
## Median : 243.943 Median : 260.446 Median : 95.1068 Median :1048.8
## Mean : 281.691 Mean : 268.517 Mean :106.2049 Mean :1018.0
## 3rd Qu.: 382.578 3rd Qu.: 354.339 3rd Qu.:141.0035 3rd Qu.:1199.9
## Max. :1155.921 Max. :1129.343 Max. :525.3725 Max. :2505.5
Para ver como se comportan los elementos dentro de la comuna
grafo_base +
geom_sf(data = Base_Venta_propiedades, color = alpha("Purple", 0.9)) +
geom_sf(data = Metro, color = alpha("red", 3), size = 2) +
ggtitle('Distribución de departamento y su distancia a Estaciones de Metro')
#Distancia promedio al metro 515.453 metros.
Dispersion de la distancia al metro
ggplot(Base_Venta_propiedades, aes(x=DIST_METRO)) + geom_histogram(binwidth=100, fill='purple', col='black') + theme_light()
Distribucion espacial del precio de las viviendas, con su distancia a lineas de metro, y paraderos.
Precio_zona <-
Base_Venta_propiedades %>%
group_by(codigo_zona) %>%
summarise(Precio_promedio = mean(uf))
Precio_zona$geometry <- NULL
Precio_zona <-
Precio_zona %>%
left_join(Base_zonas, by = c("codigo_zona"="COD_INE_15"))
Precio_zona <- st_as_sf(Precio_zona)
Precio_zona %>%
ggplot() + # inicia grafico
geom_sf(aes(fill = Precio_promedio), colour = NA) +
geom_sf(data=Base_Venta_propiedades, color= 'orange') +
scale_fill_viridis() +
labs( title= "Distribución viviendas en zonas con sus precios promedios", subtitle = 'Fuente: Censo 2017')
Cada código de zona deberia incorporar la informacion de la distancia al metro, parque, etc. Cuando hay heterogeneidad entre zonas censales hay efectos que no se rescatan en los efectos fijos. Los que son propios de la zona, hacinamiento, parques, escolaridad, estÔn en el efecto fijo.
ggplot(data=Base_Venta_propiedades,aes(x=DIST_METRO, y=uf)) +
geom_point()+
geom_smooth(method='lm', se = TRUE)+
labs(x = 'DIST_METRO',
y = 'uf',
title = 'Valor en función de la DIST_METRO',
subtitle = 'Fuente: Elaboración propia')
ggplot(data=Base_Venta_propiedades,aes(x=DIST_CICLOVIA, y=uf)) +
geom_point()+
geom_smooth(method='lm', se = TRUE)+
labs(x = 'DIST_CICLOVIA',
y = 'uf',
title = 'Valor en función de la DIST_CICLOVIA',
subtitle = 'Fuente: Elaboración propia')
ggplot(data=Base_Venta_propiedades,aes(x=DIST_COLEGIO, y=uf)) +
geom_point()+
geom_smooth(method='lm', se = TRUE)+
labs(x = 'DIST_COLEGIO',
y = 'uf',
title = 'Valor en función de la DIST_COLEGIO',
subtitle = 'Fuente: Elaboración propia')
Promedio distancia al metro
Promedio de areas verdes/m2
Promedio distnacia a una ciclovia
Distancia promedio a colegios
Cantidad de Jardines / habitantes