Actividad 1

Paso 1. Filtrar solo apartamentos en un barrio en específico.

EJEMPLO CLASE: 1.1 lo hacemos con Barrio multicentro que es un nombre único

1.2 lo hacemos con otro barrio que está escrito de varias formas. Para esto necesitamos instalar (tools>>Install Packages>>RecordLinkage) la cual nos permite comparar textos. Después de instalado la llamamos en consola con requiere(complemento instaldo) La métrica jarowinkler del paquete RecordLinkage compara los textos y arroja un valor de 0 a 1 (0 a 100%) de coincidencia de las letras del texto.

Esto nos permite por ejemplo comparar la palabra “ingenio” vs todos los barrios del dataset, y seleccionar sólo los que tengan más de x% de similitud, en este caso usamos 80%. 1.3 agregamos el condicional de Tipo de vivienda: Apartamento y gurdamos la variable.

Ejemplo ACTIVIDAD: con barrio Valle de lili

  1. Comparo el barrio valle de lili con todos los demás barrios y selecciono lo de similitud mayor a 80% y agrego condicion de apartamentos en tipo de vivienda
library(readxl)
Datos_Vivienda <- read_excel("D:/MAESTRIA EN CIENCIA DE DATOS/1 SEMESTRE/Metodos y Simulacion Estadistica/MODULO 1/Datos_Vivienda.xlsx")

ID=1:dim(Datos_Vivienda)[1]
Datos_Vivienda=data.frame(ID,Datos_Vivienda)
head(Datos_Vivienda)
ID Zona piso Estrato precio_millon Area_contruida parqueaderos Banos Habitaciones Tipo Barrio cordenada_longitud Cordenada_latitud
1 Zona Sur 2 6 880 237 2 5 4 Casa pance -76.46300 3.43000
2 Zona Oeste 2 4 1200 800 3 6 7 Casa miraflores -76.46400 3.42800
3 Zona Sur 3 5 250 86 NA 2 3 Apartamento multicentro -76.46400 3.42900
4 Zona Sur NA 6 1280 346 4 6 5 Apartamento ciudad jardv<U+2260>n -76.46400 3.43300
5 Zona Sur 2 6 1300 600 4 7 5 Casa pance -76.46438 3.43463
6 Zona Sur 3 6 513 160 2 4 4 Casa pance -76.46438 3.43463
pos = which(Datos_Vivienda$Barrio=="multicentro")

Datos_Vivienda_sub = Datos_Vivienda[pos,]

require(RecordLinkage)
barrio=c("ingenio","el ingenio", "valle del lili", "INGENIO","pance","ciudad jardin")
pos2=which(jarowinkler("ingenio", Datos_Vivienda$Barrio)>0.8 & Datos_Vivienda$Tipo=="Apartamento")


pos8=which(jarowinkler("valle de lili", Datos_Vivienda$Barrio)>0.8 & Datos_Vivienda$Tipo=="Apartamento")
Datos_Vivienda_valle=Datos_Vivienda[pos8,]
head(Datos_Vivienda_valle)
ID Zona piso Estrato precio_millon Area_contruida parqueaderos Banos Habitaciones Tipo Barrio cordenada_longitud Cordenada_latitud
8 8 Zona Sur 5 5 310 82.5 1 2 3 Apartamento valle del lili -76.46438 3.43463
9 9 Zona Sur 9 4 240 80.0 1 2 3 Apartamento valle del lili -76.46438 3.43463
12 12 Zona Sur NA 5 230 70.0 1 2 2 Apartamento valle del lili -76.46500 3.43600
13 13 Zona Sur NA 5 160 63.0 NA 2 2 Apartamento valle del lili -76.46500 3.43600
14 14 Zona Sur 6 5 200 71.0 1 2 3 Apartamento valle del lili -76.46500 3.43600
15 15 Zona Sur NA 5 270 76.0 NA 2 3 Apartamento valle del lili -76.46500 3.43600

##PASO 2: Presentar una exploración inicial de los datos, ejemplo: conteo de cuantos registros quedaron, precio promedio , area promedio entre otros (aprox unos 5 datos clave). Estos datos claves son a partir de ##los valores que quedaron del barrio Valle de lili. Colocamos na.rm=TRUE, porque si hay datos nulos, el cómputo no podría realizarse.

##Finalmente a partir de la selección ya realizada se hizo un análisis de ofertas con la condición de apartamentos menores a 200 millones, que tengan entre 3 y 4 habitaciones y ubicados en el estrato 5

promedio_precio=mean(Datos_Vivienda_valle$precio_millon,na.rm=TRUE)
mediana_precio=mean(Datos_Vivienda_valle$precio_millon,na.rm=TRUE)
promedio_area=mean(Datos_Vivienda_valle$Area_contruida,na.rm=TRUE)
estrato_min=min(Datos_Vivienda_valle$Estrato)
estrato_max=max(Datos_Vivienda_valle$Estrato)
cantidad_ofertas = length(Datos_Vivienda_valle)
Apart_seleccion=which(Datos_Vivienda_valle$precio_millon<200 &Datos_Vivienda_valle$Habitaciones<=4 &Datos_Vivienda_valle$Habitaciones>=3 & Datos_Vivienda_valle$Estrato==5)

Final_selection=Datos_Vivienda_valle[Apart_seleccion,]
head(Final_selection)
ID Zona piso Estrato precio_millon Area_contruida parqueaderos Banos Habitaciones Tipo Barrio cordenada_longitud Cordenada_latitud
1000 1000 Zona Sur 8 5 165 60 1 2 3 Apartamento valle del lili -76.50738 3.42262
1184 1184 Zona Sur 5 5 190 65 1 2 3 Apartamento valle del lili -76.51294 3.39950
1315 1315 Zona Sur 2 5 185 62 1 2 3 Apartamento valle del lili -76.51500 3.36900
1316 1316 Zona Sur 2 5 180 61 1 2 3 Apartamento valle del lili -76.51500 3.36900
1364 1364 Zona Sur NA 5 185 65 1 2 3 Apartamento valle del lili -76.51559 3.37135
1386 1386 Zona Sur 1 5 190 74 1 2 3 Apartamento valle del lili -76.51581 3.36943
resultado = data.frame(promedio_precio,mediana_precio,promedio_area, estrato_max,estrato_min)
resultado
promedio_precio mediana_precio promedio_area estrato_max estrato_min
224.5718 224.5718 74.97807 6 3

##PASO 3: Presentar en un mapa interactivo los resultados de las viviendas y discutir un poco sobre posibles errores en la geocodificación dado que el campo es abierto: 1. Instalamos la librería leaflet (tools >>Install Packages>>leaflt) que nos permite hacer uso de cartografía y luego la llamamos con require. A leaflet le adicionamos (%>%) un marcador con círculos (addCircleMarkers) y colocamos las coordenas. Luego agregamos un mapa base con addTiles(), radio de los círculos, color de los circulos, y para saber a qué punto corresponde cada coordenada agregamos un ID (lo agregamos desde la parte inicial porque esta base de datos no lo tenía)

En la visualización miramos una concentración de puntos que hace referencia al Barrio Valle lili, pero hay ciertos puntos lejanos que no pertenecerían a este barrio, se denotan ciertas falencias en el proceso de filtrado.

require(leaflet)
leaflet() %>% addCircleMarkers(lng = Datos_Vivienda_valle$cordenada_longitud, lat = Datos_Vivienda_valle$Cordenada_latitud, radius = 0.2, color = "black", label = Datos_Vivienda_valle$ID )  %>% addTiles()

##PASO 4 Realizar una exploración bivariada entre el precio de la vivienda y el area por un grafico de puntos con una linea de tendencia interactiva usando ggplot2 y plotly

Instalamos las dos libreías y las llamamos aes es un argumento por defecto, dentro de el ponemos el orden de las variables y, x Se hace la gráfica y se agrega la línea de tendencia, hay un dato anómalo con Area mayor a 900 m2 entonces lo quitamos

require(ggplot2)
require(plotly)

g1=ggplot(data = Datos_Vivienda_valle, aes(y=precio_millon,x=Area_contruida))+ geom_point()+geom_smooth()
ggplotly(g1)
pos3=which(Datos_Vivienda_valle$Area_contruida<900)
Datos_Vivienda_valle_sub=Datos_Vivienda_valle[pos3,]
g2=ggplot(data = Datos_Vivienda_valle_sub, aes(y=precio_millon,x=Area_contruida))+ geom_point()+geom_smooth()
ggplotly(g2)