# Instalamos las librerÃas
library(forecast)
library(reshape2)
library(stats)
library(ggplot2)
library(ggthemes)
library(ggrepel)
library(dplyr)
library(tidyr)
library(readxl)
library(reticulate)
library(plotly)
# CArga de datos
library(readxl)
dF<- read_excel("d:/mis documentos/METODOS ESTADISTICOS/Unidad1/Datos_Vivienda.xlsx")
#agregación de ID
ID=1:dim(dF)[1]
dF=data.frame(ID,dF)
head(dF)
## ID Zona piso Estrato precio_millon Area_contruida parqueaderos Banos
## 1 1 Zona Sur 2 6 880 237 2 5
## 2 2 Zona Oeste 2 4 1200 800 3 6
## 3 3 Zona Sur 3 5 250 86 NA 2
## 4 4 Zona Sur NA 6 1280 346 4 6
## 5 5 Zona Sur 2 6 1300 600 4 7
## 6 6 Zona Sur 3 6 513 160 2 4
## Habitaciones Tipo Barrio cordenada_longitud
## 1 4 Casa pance -76.46300
## 2 7 Casa miraflores -76.46400
## 3 3 Apartamento multicentro -76.46400
## 4 5 Apartamento ciudad jardv<U+2260>n -76.46400
## 5 5 Casa pance -76.46438
## 6 4 Casa pance -76.46438
## Cordenada_latitud
## 1 3.43000
## 2 3.42800
## 3 3.42900
## 4 3.43300
## 5 3.43463
## 6 3.43463
#Paso 1. Filtrar un barrio de interes y solo apartamentos:
#Selección de una parte del dataset filtrando por un barrio
#entrega la posición de las filas que tienen como barrio el ingenio
pos=which(dF$Barrio=="el ingenio")
#se crea un nuevo dataframe con el filtro
dF_sub=dF[pos,]
head(dF_sub)
## ID Zona piso Estrato precio_millon Area_contruida parqueaderos Banos
## 37 37 Zona Sur 4 5 1450 1200 2 6
## 123 123 Zona Sur 3 5 290 100 1 3
## 221 221 Zona Sur 4 5 360 99 1 3
## 582 582 Zona Sur NA 4 550 197 2 4
## 2397 2397 Zona Sur 2 5 410 136 2 4
## 2446 2446 Zona Sur 4 5 390 198 1 4
## Habitaciones Tipo Barrio cordenada_longitud Cordenada_latitud
## 37 6 Casa el ingenio -76.46862 3.43624
## 123 3 Apartamento el ingenio -76.48498 3.41789
## 221 2 Apartamento el ingenio -76.48953 3.49684
## 582 3 Apartamento el ingenio -76.49900 3.47100
## 2397 4 Apartamento el ingenio -76.52000 3.37900
## 2446 3 Apartamento el ingenio -76.52030 3.38197
#Instalar paquete
require(RecordLinkage)
#Extracción de datos filtrando los barrios que coincidan en un 80 % con el texto ingenio
pos2=which(jarowinkler("ingenio",dF$Barrio)>0.8 & dF$Tipo=="Apartamento")
datos_sub2=dF[pos2,]
head(datos_sub2)
## ID Zona piso Estrato precio_millon Area_contruida parqueaderos Banos
## 123 123 Zona Sur 3 5 290 100 1 3
## 221 221 Zona Sur 4 5 360 99 1 3
## 582 582 Zona Sur NA 4 550 197 2 4
## 2397 2397 Zona Sur 2 5 410 136 2 4
## 2446 2446 Zona Sur 4 5 390 198 1 4
## 2792 2792 Zona Sur NA 5 300 147 2 3
## Habitaciones Tipo Barrio cordenada_longitud Cordenada_latitud
## 123 3 Apartamento el ingenio -76.48498 3.41789
## 221 2 Apartamento el ingenio -76.48953 3.49684
## 582 3 Apartamento el ingenio -76.49900 3.47100
## 2397 4 Apartamento el ingenio -76.52000 3.37900
## 2446 3 Apartamento el ingenio -76.52030 3.38197
## 2792 3 Apartamento el ingenio -76.52200 3.38100
#Paso 2. Exploración Inicial
summary(datos_sub2)
## ID Zona piso Estrato
## Min. : 123 Length:130 Length:130 Min. :4.000
## 1st Qu.:4026 Class :character Class :character 1st Qu.:5.000
## Median :4278 Mode :character Mode :character Median :5.000
## Mean :4396 Mean :5.085
## 3rd Qu.:5118 3rd Qu.:5.000
## Max. :7464 Max. :6.000
## precio_millon Area_contruida parqueaderos Banos
## Min. :175.0 Min. : 56.0 Length:130 Min. :1.000
## 1st Qu.:265.5 1st Qu.: 88.5 Class :character 1st Qu.:2.000
## Median :300.0 Median :102.5 Mode :character Median :3.000
## Mean :316.7 Mean :117.7 Mean :2.823
## 3rd Qu.:350.0 3rd Qu.:126.9 3rd Qu.:3.000
## Max. :700.0 Max. :600.0 Max. :5.000
## Habitaciones Tipo Barrio cordenada_longitud
## Min. :1.000 Length:130 Length:130 Min. :-76.55
## 1st Qu.:3.000 Class :character Class :character 1st Qu.:-76.53
## Median :3.000 Mode :character Mode :character Median :-76.53
## Mean :3.162 Mean :-76.53
## 3rd Qu.:4.000 3rd Qu.:-76.53
## Max. :5.000 Max. :-76.48
## Cordenada_latitud
## Min. :3.346
## 1st Qu.:3.381
## Median :3.383
## Mean :3.388
## 3rd Qu.:3.384
## Max. :3.497
#Paso 2 Exploración Inicial
#Calcula los estimadores basicos eliminando los valores nulos
promedio_precio=mean(datos_sub2$precio_millon,na.rm=TRUE)
mediana_precio=median(datos_sub2$precio_millon,na.rm=TRUE)
promedio_area=mean(datos_sub2$Area_contruida,na.rm=TRUE)
cantidad_ofertas=length(datos_sub2$Zona)
resultado=data.frame(promedio_precio,mediana_precio,promedio_area,cantidad_ofertas)
resultado
## promedio_precio mediana_precio promedio_area cantidad_ofertas
## 1 316.6846 300 117.7467 130
## Paso 3
require(leaflet)
leaflet() %>% addCircleMarkers(lng = datos_sub2$cordenada_longitud,lat = datos_sub2$Cordenada_latitud,radius = 0.3,color = "black",label = datos_sub2$ID) %>% addTiles()
###
##Paso 4. Exploración Bivariada entre Precio vs Area Construida
hist(datos_sub2$Area_contruida, main = "OLX: histograma del area de viviendas",
xlab = "area", ylab = "frecuencia",
col = "steelblue")

plot(datos_sub2$Area_contruida, datos_sub2$precio_millon)

boxplot(datos_sub2$precio_millon ~ datos_sub2$Zona, col = "gray",
main = "Precios\nsegún la Zona")

p <- ggplot(datos_sub2)
p <- ggplot(datos_sub2, aes(x = Area_contruida, y = precio_millon, colour = Estrato))
p <- p + geom_point()
p

g1=ggplot(data = datos_sub2,aes(y=precio_millon,x=Area_contruida)) + geom_point() + geom_smooth()
ggplotly(g1)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## filtrando en la grafica las areas menores a 400m2
pos3=which(datos_sub2$Area_contruida<400)
datos_sub3=datos_sub2[pos3,]
g2=ggplot(data = datos_sub3,aes(y=precio_millon,x=Area_contruida)) + geom_point() + geom_smooth()
ggplotly(g2)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'