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