Panorama de la Vivienda en Melbourne

VIVIENDA
AUSTRALIA
MELBOURNE
CSV
Autor/a
Afiliación

Miriam Calatayud Escrivá

Universitat de València

Fecha de publicación

10 de mayo de 2024

Input

Se ha obtenido un conjunto de datos de Kaggle. El conjunto de datos está disponible en este enlace: Panorama de la vivienda en Melbourne | Kaggle

Actualmente, el sector inmobiliario de Melbourne está en auge por lo que el conjunto de datos que utilizamos para esta tarea guarda relación con el panorama de la vivienda en esta misma ciudad, conteniendo información sobre el precio de la vivienda, dirección, habitaciones y tipo de vivienda…


Descripción

Se detecta que…

El conjunto de datos incluye 10 parámetros. La lista completa de variables independientes incluidas en el conjunto de datos es la siguiente:

  • Barrio Residencial (Suburb): Nombre del barrio residencial.
  • Dirección (Address): Dirección de la vivienda (calle y número).
  • Habitaciones (Rooms): Número de habitaciones de la vivienda (variable numérica)
  • Tipo de vivienda (Type): br - bedroom(s); h - house,cottage,villa, semi,terrace; u - unit, duplex; t - townhouse; dev site - development site; o res - other residential.
  • Precio (Price): En dolares (es un float).
  • Método de Venta (Method): S - property sold; SP - property sold prior; PI - property passed in; PN - sold prior not disclosed; SN - sold not disclosed; NB - no bid; VB - vendor bid; W - withdrawn prior to auction; SA - sold after auction; SS - sold after auction price not disclosed. N/A - price or highest bid not available.
  • Vendedor: Agente Inmobiliario
  • Fecha de venta
  • Distancia: Distancia de la vivienda al CBD (Central Business District)
  • Código postal.


Tratamiento

Antes de comenzar a limpiar el dataset, echemos un vistazo a nuestro conjunto de datos:

# Importamos nuestros datos
melb_data <- read_csv("data/melb_data.csv")
# Vemos las 6 primeras filas del dataset
head(melb_data)
# A tibble: 6 × 21
  Suburb     Address   Rooms Type   Price Method SellerG Date  Distance Postcode
  <chr>      <chr>     <dbl> <chr>  <dbl> <chr>  <chr>   <chr>    <dbl>    <dbl>
1 Abbotsford 85 Turne…     2 h     1.48e6 S      Biggin  3/12…      2.5     3067
2 Abbotsford 25 Bloom…     2 h     1.03e6 S      Biggin  4/02…      2.5     3067
3 Abbotsford 5 Charle…     3 h     1.46e6 SP     Biggin  4/03…      2.5     3067
4 Abbotsford 40 Feder…     3 h     8.5 e5 PI     Biggin  4/03…      2.5     3067
5 Abbotsford 55a Park…     4 h     1.6 e6 VB     Nelson  4/06…      2.5     3067
6 Abbotsford 129 Char…     2 h     9.41e5 S      Jellis  7/05…      2.5     3067
# ℹ 11 more variables: Bedroom2 <dbl>, Bathroom <dbl>, Car <dbl>,
#   Landsize <dbl>, BuildingArea <dbl>, YearBuilt <dbl>, CouncilArea <chr>,
#   Lattitude <dbl>, Longtitude <dbl>, Regionname <chr>, Propertycount <dbl>

Para mejorar este conjunto de datos, haremos las siguientes transformaciones:

Para empezar, se puede observar que varias de las variables en algunas columnas no tienen el nombre completo, sino que están representadas por una única letra que actúa como identificador. Un ejemplo de esto son las columnas de tipo de vivienda o método de venta. Nuestro siguiente paso será reemplazar estos valores, que inicialmente proporcionan poca información sobre las variables, con sus descripciones completas.

Cambiamos primero los valores de Tipo de Vivienda y a continuación, los de Método de Venta.

melb_data$Type <- recode(melb_data$Type,
  "br" = "bedroom(s)",
  "h" = "house,cottage,villa,semi,terrace",
  "u" = "unit,duplex",
  "t" = "townhouse",
  "dev site" = "development site",
  "o res" = "other residential"
)

melb_data$Method <- recode(melb_data$Method,
  "S" = "property sold",
  "SP" = "property sold prior",
  "PI" = "property passed in",
  "PN" = "sold prior not disclosed",
  "SN" = "sold not disclosed",
  "NB" = "no bid",
  "VB" = "vendor bid",
  "W" = "withdrawn prior to auction",
  "SA" = "sold after auction",
  "SS" = "sold after auction price not disclosed",
  "N/A" = "price or highest bid not available"
)

Vemos las primeras filas del dataset para ver que nuestros cambios se han ejecutado correctamente:

head(melb_data, 2)
# A tibble: 2 × 21
  Suburb     Address   Rooms Type   Price Method SellerG Date  Distance Postcode
  <chr>      <chr>     <dbl> <chr>  <dbl> <chr>  <chr>   <chr>    <dbl>    <dbl>
1 Abbotsford 85 Turne…     2 hous… 1.48e6 prope… Biggin  3/12…      2.5     3067
2 Abbotsford 25 Bloom…     2 hous… 1.03e6 prope… Biggin  4/02…      2.5     3067
# ℹ 11 more variables: Bedroom2 <dbl>, Bathroom <dbl>, Car <dbl>,
#   Landsize <dbl>, BuildingArea <dbl>, YearBuilt <dbl>, CouncilArea <chr>,
#   Lattitude <dbl>, Longtitude <dbl>, Regionname <chr>, Propertycount <dbl>

Una vez hecho esto, a la columna Precio, le añadiremos el símbolo de la moneda (en este caso el dollar). Esto se debe a que facilita la comprensión rápida del tipo de moneda utilizada, mejora la legibilidad y claridad del conjunto de datos, y ayuda en la limpieza de datos al estandarizar el formato de la columna de precios, lo que facilita su procesamiento y análisis posterior.

melb_data$Price <- paste0( "$", melb_data$Price)
head(melb_data, 2)
# A tibble: 2 × 21
  Suburb     Address    Rooms Type  Price Method SellerG Date  Distance Postcode
  <chr>      <chr>      <dbl> <chr> <chr> <chr>  <chr>   <chr>    <dbl>    <dbl>
1 Abbotsford 85 Turner…     2 hous… $148… prope… Biggin  3/12…      2.5     3067
2 Abbotsford 25 Bloomb…     2 hous… $103… prope… Biggin  4/02…      2.5     3067
# ℹ 11 more variables: Bedroom2 <dbl>, Bathroom <dbl>, Car <dbl>,
#   Landsize <dbl>, BuildingArea <dbl>, YearBuilt <dbl>, CouncilArea <chr>,
#   Lattitude <dbl>, Longtitude <dbl>, Regionname <chr>, Propertycount <dbl>

Seguimos realizando transformaciones, esta vez en la columna Dirección. Dividiremos la columna en número de calle y nombre de calle. Esto es conveniente porque proporciona una estructura más organizada y accesible a los datos.

Esta separación facilita la búsqueda y el análisis de patrones específicos relacionados con las direcciones. Además, al tener datos más estructurados, se mejora la calidad y la precisión de los análisis posteriores.

direccion_split <- strsplit(melb_data$Address, " ", fixed = TRUE)

melb_data$Address_Number <- sapply(direccion_split, `[`, 1)  
melb_data$Address_Name <- sapply(direccion_split, `[`, 2) 

head(melb_data,2)
# A tibble: 2 × 23
  Suburb     Address    Rooms Type  Price Method SellerG Date  Distance Postcode
  <chr>      <chr>      <dbl> <chr> <chr> <chr>  <chr>   <chr>    <dbl>    <dbl>
1 Abbotsford 85 Turner…     2 hous… $148… prope… Biggin  3/12…      2.5     3067
2 Abbotsford 25 Bloomb…     2 hous… $103… prope… Biggin  4/02…      2.5     3067
# ℹ 13 more variables: Bedroom2 <dbl>, Bathroom <dbl>, Car <dbl>,
#   Landsize <dbl>, BuildingArea <dbl>, YearBuilt <dbl>, CouncilArea <chr>,
#   Lattitude <dbl>, Longtitude <dbl>, Regionname <chr>, Propertycount <dbl>,
#   Address_Number <chr>, Address_Name <chr>

Finalmente, aunque eliminar los NA’s nos permitiría trabajar con datos completos y precisos, ello reduce significativamente el tamaño de nuestra muestra, pasando de 13580 a 6196 observaciones. Por tanto, en lugar de modificar el conjunto de datos original, optaremos por crear un nuevo dataframe con esta transformación. De esta forma, quienes deseen eliminar los NA’s para sus análisis pueden aplicar el siguiente código al dataframe original, mientras que aquellos que prefieran trabajar con un conjunto de datos más amplio pueden continuar con el script sin modificaciones.

# CONJUNTO DE DATOS SIN NA's
df <- na.omit(melb_data)

Por último, en el caso de que queramos utilizar esta base de datos para trabajar con datos espaciales, es posible ya que tenemos las variables de latitud y longitud. Primero hay que convertir las coordenadas de latitud y longitud en valores numéricos y crear un objeto sf.

De esta forma, estamos preparando nuestra base de datos para análisis espaciales. Al crear un objeto sf con estas coordenadas y asignarles un sistema de referencia de coordenadas (CRS), estamos proporcionando un marco espacial a nuestros datos.

Esto nos permite realizar una variedad de análisis espaciales. Al llevar a cabo estos pasos, estamos capacitando a nuestra base de datos para explorar y comprender patrones espaciales y relaciones geográficas que pueden estar presentes en nuestros datos.

melb_data$Lattitude <- as.numeric(melb_data$Lattitude)
melb_data$Longtitude <- as.numeric(melb_data$Longtitude)
melb_data_sf <- st_as_sf(melb_data,
                          coords = c("Longtitude", "Lattitude"),
                          crs = 25830)

head(melb_data_sf, 2)
Simple feature collection with 2 features and 21 fields
Geometry type: POINT
Dimension:     XY
Bounding box:  xmin: 144.9934 ymin: -37.8079 xmax: 144.9984 ymax: -37.7996
Projected CRS: ETRS89 / UTM zone 30N
# A tibble: 2 × 22
  Suburb     Address    Rooms Type  Price Method SellerG Date  Distance Postcode
  <chr>      <chr>      <dbl> <chr> <chr> <chr>  <chr>   <chr>    <dbl>    <dbl>
1 Abbotsford 85 Turner…     2 hous… $148… prope… Biggin  3/12…      2.5     3067
2 Abbotsford 25 Bloomb…     2 hous… $103… prope… Biggin  4/02…      2.5     3067
# ℹ 12 more variables: Bedroom2 <dbl>, Bathroom <dbl>, Car <dbl>,
#   Landsize <dbl>, BuildingArea <dbl>, YearBuilt <dbl>, CouncilArea <chr>,
#   Regionname <chr>, Propertycount <dbl>, Address_Number <chr>,
#   Address_Name <chr>, geometry <POINT [m]>

Al ejecutar este código, tendremos un df preparado con la información geoespacial del dataframe melb_data.

Output

El resultado de la práctica es un conjunto de datos mejorado y más estructurado, listo para análisis y exploración adicionales. El tipo de archivo generado es un dataframe de R (objeto sf) con información geoespacial, que incluye coordenadas de longitud y latitud, y un Sistema de Referencia de Coordenadas (CRS) establecido como 25830. Además algunas de las transformaciones realizadas para mejorar el dataset serían por ejemplo, la descodificación de variables, eliminación de NA’s o añadir claridad en los datos.



Proyecto de Innovación Educativa Emergente (PIEE-2737007)