Filtrar solo apartamentos, en un barrio de preferencia y tener en cuenta las variaciones que este puede presentar por ser un campo abierto.
En este punto se emplean los comandos sort y table para identificar cuáles son los barrios con mayor número de viviendas disponibles, y se decide tomar el sexto de ellos: “El caney”, con 208 observaciones previas a filtros y transformaciones. Luego, con Jarowinkler, que es una función que calcula la distancia de Jaro-Winkler entre dos cadenas de texto para hallar registros similares, se calibra el umbral óptimo que reconozca las diferentes variaciones del nombre del barrio, encontrando que este es 0.74, sin embargo, también considera como similar al barrio “chapinero”, por lo cual se filtran los registros que contienen este barrio (Así como aquellos que son del tipo apartamento) y finalmente se reemplazan por “caney” para tener la base normalizada para este barrio en específico.
library(readxl)
datos = read_excel("C:/Users/andre/Desktop/Datos_Vivienda.xlsx")
ID=1:dim(datos)[1]
datos=data.frame(ID,datos)
head(datos)
| 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 |
#sort(table(datos$Barrio),decreasing=TRUE)
pos=which(datos$Barrio=="caney")
datos_sub=datos[pos,]
require(RecordLinkage)
pos=which(jarowinkler("caney",datos$Barrio)>0.74&datos$Barrio!="chapinero"&datos$Tipo=="Apartamento")
datos_sub=datos[pos,]
table(datos_sub$Barrio)
##
## caney caney especial el caney El Caney
## 58 1 124 1
convertido=datos
convertido$Barrio[pos]="caney"
filtrado=datos[pos,]
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).
Empleando el comando “length”, se encuentra que hay 184 registros en subconjunto de datos que cumplen con la condición de ser apartamentos en el barrio “caney”. De allí se logra analizar que el precio promedio de los inmuebles es de COP 189’527.173, con una desviación estándar de COP 62’783.501, y un coeficiente de variación de 33%, ante lo cual se concluye que el precio es muy heterogéneo y por tanto el promedio no es muy representativo para el conjunto de datos, además de la existencia de valores extremos, como se puede apreciar en un histograma que presenta la frecuencia de apartamentos por precio de venta donde se observan registros entre 350 y 400 millones; siendo así, se calcula la mediana, donde esta es igual a 160’000.000, indicando que al menos el 50% de las viviendas tienen este valor. Finalmente, el precio promedio del metro cuadrado es de COP 2’713.100 por cada m2.
| Parámetro | Valor |
|---|---|
| Cantidad de ofertas | 184 |
| Precio promedio | $189.572.173 |
| Área promedio | 69.85 m2 |
| Desviación estándar | $62.783.501 |
| Coeficiente de variación | 33% |
| Mediana | $160.000.000 |
| Precio promedio m2 | $2.713.100 |
Se presenta además un gráfico de barras donde se muestra la representación de número de viviendas por cada estrato, marcando una tendencia el estrato 4.
##Indicadores Relevantes
numero_de_registros=length(filtrado$precio_millon)
promedio_precio=(mean(filtrado$precio_millon,na.rm=TRUE)*1000000)
promedio_area=mean(filtrado$Area_contruida,na.rm=TRUE) #m^2
promedio_precio_por_metrocuadrado=(promedio_precio)/(promedio_area)
desviacion=sd(filtrado$precio_millon*1000000)
coeficiente_variacion = sd(filtrado$precio_millon) / mean(filtrado$precio_millon) * 100
mediana_precio = median(filtrado$precio_millon)*1000000
estratos=table(filtrado$Estrato)
require(grDevices)
barplot(estratos,col = hcl.colors(4),legend.text=FALSE,main="DISTRIBUCIÓN DE APARTAMENTOS POR ESTRATO",xlab="Estratos",ylab="Número de Apartamentos")
hist(filtrado$precio_millon,col = hcl.colors(6),xlab="Precio (En millones)",ylab="Frecuencia",main="DISTRIBUCIÓN DE APARTAMENTOS POR PRECIO")
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.
Se presenta un mapa con la ubicación de los 184 registros, donde se logra observar que algunos de estos no hacen parte de la zona del barrio Caney.
require(leaflet)
leaflet()%>%addCircleMarkers(lng=filtrado$cordenada_longitud,lat=filtrado$Cordenada_latitud,radius=0.3, color="black",label=filtrado$ID)%>%
addTiles()
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.
Al graficar un diagrama de dispersión para analizar el comportamiento de la variable precio de la vivienda con respecto al área, se observa que existe una relación directamente proporcional, sin embargo, existe un dato atípico en el cual hay una vivienda de 160m2 con un precio de 160 millones, por lo cual se elimina este dato atípico y se grafica nuevamente la dispersión, con su respectiva línea de tendencia interactiva.
require(ggplot2)
require(plotly)
grafico_1=ggplot(data=filtrado,aes(y=precio_millon,x=Area_contruida,)) + geom_point() + geom_smooth() + labs(x="Área (m^2)",y="Precio (En millones)")+ ggtitle("DIAGRAMA DE DISPERSIÓN DEL ÁREA VS PRECIO") +geom_curve(aes(x = 140, y = 100,
xend = 160, yend = 160),
curvature=-0.5,
color = 2,
arrow = arrow(length = unit(0.5,"cm")))
grafico_1
pos3=which(filtrado$Area_contruida<150)
filtrado2=filtrado[pos3,]
grafico_2=ggplot(data=filtrado2,aes(y=precio_millon,x=Area_contruida)) + labs(x="Área (m<sup>2</sup>)",y="Precio (En millones)") +ggtitle("DIAGRAMA DE DISPERSIÓN DEL ÁREA VS PRECIO AJUSTADO")+ geom_point() + geom_smooth()
ggplotly(grafico_2)