Datos de las casas rurales ubicadas en la provincia de Castellón

TURISMO
CASAS RURALES
CASTELLÓN
CSV
Autor/a
Afiliación

Miquel Moliner Bellés

Universitat de València

Fecha de publicación

10 de mayo de 2024

Input

Se ha decidido enfocarse en las casas rurales de la provincia de Castellón. Esta motivación surge a raíz de una práctica anterior en la que se tuvieron bastantes problemas a la hora de obtener y trabajar con los datos que proporciona la Diputació de Castelló en su portal de datos abiertos. En aquella práctica se realizaron las modificaciones justas y necesarias para el objetivo que se tenía, pero ahora se va realizar un análisis más extenso de la organización y la presentación de estos datos para agilizar y facilitar el trabajo con ellos.

En el conjunto de datos que se ha descargado se han obtenido 440 observaciones con 11 variables, que tienen información relativa al municipio en el que se encuentran (CP, nombre, código…), la dirección, el teléfono, el correo electrónico y la ubicación exacta.

Como se ha dicho, los datos se han obtenido del portal de datos abiertos de la Diputació de Castelló, desde el siguiente link. Se han descargado en formato csv.

Descripción y Tratamiento

En primer lugar se van a cargar las librerías que se utilizarán a lo largo del proceso de mejora del conjunto de datos.

Ahora sí, cargamos los datos de las casas rurales para realizar un primer análisis de ellos y visualizamos las primeras observaciones de estos.

casas <- readr::read_delim(file = "data/casas-rurales.csv", delim = ";")

Se puede ver que el nombre de las variables tiene distinto formato para algunas variables en lo que se refiere al uso de mayúscula, minúscula, espacios, acentos… Para resolver esto se modificarán los títulos para que todos estén en minúscula, sin acentos y sin espacios, con el objetivo de facilitar el trabajo en la selección de variables.

Para ello, simplemente utilizaremos la función rename para cambiar los nombres de cada una de las variables. Se ha utilizado el siguiente código:

casas <- casas %>% rename(id = "Id")
casas <- casas %>% rename(municipio = "Municipio")
casas <- casas %>% rename(cod_municipio = "CÓDIGO MUNICIPIO")
casas <- casas %>% rename(nombre = "Nombre")
casas <- casas %>% rename(telefono = "Teléfono")
casas <- casas %>% rename(cod_categoria = "Cod. Categoria")
casas <- casas %>% rename(direccion = "Dirección")
casas <- casas %>% rename(cod_postal = "COD Postal")
casas <- casas %>% rename(email = "Email")
casas <- casas %>% rename(web = "Web")

También es necesario trabajar con los datos que faltan (NAs) en las variables que puedan ser importantes. Por ejemplo, hay muchas casas rurales que tienen NAs en las variables “web” y “email”, pero no es tan relevante porque todas tienen un medio de contacto, que es el número de teléfono.

Sin embargo, en el código postal sí que hay algunas observaciones que no tienen datos y esto sí que puede ser importante. Así pues, vamos a utilizar el siguiente código para determinar cuántas son las observaciones con NAs en el CP:

sum(is.na(casas$cod_postal))
[1] 11

Se puede ver que hay 11 observaciones con NA. Explorando un poco el conjunto de datos descubrimos que todas pertenecen al mismo municipio: Villafranca del Cid. Como todos pertenecen al mismo municipio, vamos a sustituir los NAs por el código postal del municipio indicado, es decir, el 12150.

casas$cod_postal[is.na(casas$cod_postal)] <- 12150

Por otro lado, si representamos gráficamente las ubicaciones de las casas se puede observar que algunas están fuera de los límites.

# Eliminamos los NAs para esta primera representación:
casas_sinNA <- subset(casas, !is.na(ubicacion))

# Creamos dos nuevas columnas separando la latitud y la longitud:
casas_sinNA <- separate(casas_sinNA, ubicacion, c("lat", "long"), sep = ", ", remove = FALSE)

# Convertimos a un objeto "sf":
casas_sinNA_sf <- sf::st_as_sf(casas_sinNA, coords = c("long", "lat"), crs = 25830)

# Representamos gráficamente:
casas_sinNA_sf %>%
  leaflet::leaflet() %>%
  leaflet::addTiles() %>%
  leaflet::addCircleMarkers(popup = ~municipio, radius = 2, color = "blue")

Se ha identificado que ambas casas rurales mal ubicadas pertenecen al municipio de Xert, pero sus coordenadas son erróneas así que también vamos a tener que cambiarlas.

Para obtener las coordenadas reales de las casas rurales que se han ubicado erróneamente lo vamos a hacer desde Nominatim (link). Después de obtener las coordenadas, simplemente guardamos la dirección obtenida con la función reverse_geo_lite() del paquete nominatimlite en un objeto y también guardamos las coordenadas obtenidas desde Nominatim. Con esto, identificamos la fila donde tenemos que insertar los datos y los insertamos. Se ha realizado para las dos casas rurales con el código que se muestra abajo:

# CASA RURAL IVAN

# Obtenemos la dirección de la primera casa rural que estaba mal ubicada mediante las coordenadas extraídas de Nominatim:
ubi_cr_ivan <- nominatimlite::reverse_geo_lite(lat = 40.5207143, long = 0.15852)

# La guardamos en un objeto:
dir_cr_ivan <- "LA RAVAL DE SANTA LLÚCIA, 55-A"

# También guardamos las coordenadas:
crds_cr_ivan <- "40.5207143, 0.15852"

# Buscamos el índice de la fila donde nombre es "CASA RURAL IVAN"
indice_fila_ivan <- which(casas$nombre == "CASA RURAL IVAN")

# Modificamos la dirección en la casa rural:
casas$direccion[indice_fila_ivan] <- dir_cr_ivan

# Modificamos la ubicación en la casa rural:
casas$ubicacion[indice_fila_ivan] <- crds_cr_ivan

# CASA RURAL EL TURMELL

# Obtenemos la dirección de la segunda casa rural que estaba mal ubicada mediante las coordenadas extraídas de Nominatim:
cr_turmell <- nominatimlite::reverse_geo_lite(lat = 40.5207143, long = 0.15852)

# La guardamos en un objeto:
dir_cr_turmell <- "LA RAVAL DE SANTA LLÚCIA, 55-B"

# También guardamos las coordenadas:
crds_cr_turmell <- "40.5207143, 0.15852"

# Buscamos el índice de la fila donde nombre es "CASA RURAL EL TURMELL"
indice_fila_turmell <- which(casas$nombre == "CASA RURAL EL TURMELL")

# Modificamos la dirección en la casa rural:
casas$direccion[indice_fila_turmell] <- dir_cr_turmell

# Modificamos la ubicación en la casa rural:
casas$ubicacion[indice_fila_turmell] <- crds_cr_turmell

Además, en la variable donde están las coordenadas de las casas rurales (“ubicacion”) hay algunas que no tienen datos. Por ello también se incluirán las coordenadas de las casas que faltan.

Se han intentado obtener las coordenadas a partir de las direcciones proporcionadas en el conjunto de datos mediante la función geo() de tidygeocoder y también con geocode() de ggmap pero ninguna de las dos ha dado buenos resultados. Esto puede deberse a que las direcciones que se proporcionan no son interpretadas de forma correcta por las funciones utilizadas.

Por ello, se ha buscado cada una las direcciones en Nominatim y con algunos cambios en la búsqueda y ayudándonos de otros sitios web se ha creado un vector con todas las coordenadas de las direcciones que faltan en el conjunto de datos. Después de esto, se han añadido al dataframe con todos los datos y se ha verificado que ya no hay observaciones con NA en la ubicación.

# Verificamos cuántas observaciones no tienen ubicación asignada:
sum(is.na(casas$ubicacion))
[1] 30
# Obtenemos las casas que tienen NA en la ubicación:
casas_con_NA <- casas[is.na(casas$ubicacion), ]

# Creamos un vector con las ubicaciones de las casas que no tienen coordenadas:
ubi_con_NA <- c("40.1140302, -0.0544077", "40.1147554, -0.0546393",
                "40.3572583, -0.0658629", "40.2029553, -0.4182829",
                "40.2029553, -0.4182829", "40.2029553, -0.4182829",
                "40.6757579, -0.2001738", "40.2931573, -0.2915632",
                "40.1116536, -0.0545312", "40.1140189, -0.0547377",
                "40.1113384, -0.0547226", "40.1113981, -0.0522278",
                "40.1147633, -0.0507015", "40.2306838, 0.0728757",
                "40.3570715, -0.0663759", "40.3572583, -0.0658629",
                "40.3417295, -0.0723238", "40.3417295, -0.0723238",
                "40.3576457, -0.0665089", "40.3662581, -0.0446317",
                "40.2029553, -0.4182829", "40.2179055, -0.4103275",
                "40.2331466, 0.0732296", "40.2029553, -0.4182829",
                "40.2029553, -0.4182829", "40.0590118, -0.6467616",
                "40.0601186, -0.6462509", "40.6757579, -0.2001738",
                "40.2934644, -0.2930186", "40.2937093, -0.2926313")

# Encontramos las filas en las que la columna "ubicacion" tiene NA:
filas_con_NA <- is.na(casas$ubicacion)

# Reemplazamos los NA en esas filas con los valores de "ubi_con_NA":
casas$ubicacion[filas_con_NA] <- ubi_con_NA

# Verificamos que ya no hay observaciones que no tienen ubicación asignada:
sum(is.na(casas$ubicacion))
[1] 0

De esta forma, ya podemos volver a visualizar los datos para comprobar que hay algunos puntos más de los que había en el gráfico anterior y que los puntos que se encontraban fuera del límite de la provincia de Castellón ya están situados en el lugar que les corresponde.

# Creamos dos nuevas columnas separando la latitud y la longitud:
casas <- separate(casas, ubicacion, c("lat", "long"), sep = ", ", remove = FALSE)

# Convertimos a un objeto "sf":
casas_sf <- sf::st_as_sf(casas, coords = c("long", "lat"), crs = 25830)

# Representamos gráficamente:
casas_sf %>%
  leaflet::leaflet() %>%
  leaflet::addTiles() %>%
  leaflet::addCircleMarkers(popup = ~municipio, radius = 2, color = "blue")

Para terminar, guardaremos el objeto casas_sf obtenido como archivo en formato csv.

write.csv2(casas_sf, file = "casas_rurales_modificado.csv", row.names = FALSE)

Output

Como resultado hemos obtenido un archivo csv con todos los problemas relativos a las casas rurales que se habían detectado solucionados.

Los nombres de las variables se han modificado para que sea más fácil trabajar con ellos y todos tengan el mismo formato: en minúsculas, sin espacios y sin acentos.

Además, se ha modificado la ubicación de dos casas que estaban fuera de los límites de la provincia de Castellón y se ha insertado en el conjunto de datos la dirección correcta junto a las coordenadas.

Finalmente, se han añadido las coordenadas de las casas rurales que faltaban.

Así pues, el archivo csv final obtenido tiene 440 observaciones y 12 variables, con toda la información relativa a las casas rurales de la provincia de Castellón: id, municipio, código del municipio, nombre de la casa rural, teléfono, categoría de la casa rural, dirección, código postal, email, web y coordenadas. El CRS que se ha utilizado es 25830.



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