En este tutorial vemos cómo tratar las características geográficas de tu dataset en Python para hacerlas lo más informativas posible.
En muchas ocasiones nos encontraremos conjuntos de datos con características que se refieren a la localización geográfica de la observación.
Estas características espaciales, como la latitud y la longitud, se utilizan para especificar una ubicación en cualquier lugar del planeta y además encierran información valiosa que, si se maneja adecuadamente, puede enriquecer mucho nuestros análisis y modelos de Machine Learning.
Las coordenadas geográficas suelen estar representadas en un dataset como características numéricas de latitud y longitud.
Hemos visto en otros tutorials como tratar las variables numéricas:
Sin embargo, si las tratamos utilizando estas mismas técnicas no estaremos aprovechando su potencial informativo.
Tratar latitud y longitud como valores numéricos ignora las relaciones espaciales complejas.
Una vivienda no tiene un precio mayor cuánto mayor es su latitud o su longitud.
Las ubicaciones cercanas pueden compartir características importantes (como accesibilidad a servicios o condiciones ambientales) que no se capturan adecuadamente al tratarlas como simples valores numéricos.
Para ver cómo transformar las características geográficas y sacarles el máximo partido vamos a usar dataset del precio de la vivienda en California.
Para descargarlo puedes seguir este tutorial en el que descargábamos el dataset desde Kaggle a Google Colab.
Aparte de eso sólo vamos a necesitar un Notebook de Google Colab.
import pandas as pd import matplotlib.pyplot as plt import numpy as np housing_data = pd.read_csv('housing.csv')
Hemos visto como en la mayoría de casos el valor numérico preciso de las coordenadas al determinar una ubicación no tiene gran valor predictivo por sí mismo.
Discretizar las coordenadas en intervalos puede capturar mejor las variaciones locales.
Puedes averiguar más sobre distintas técnicas para discretizar variables numéricas en este tutorial.
Ya hemos ganado mucho al discretizar nuestras variables geográficas en bins 😊
Sin embargo, hemos tratado la latitud y la longitud como características independientes.
La ubicación de un punto en la Tierra está determinada conjuntamente por su latitud y longitud, y al ignorar la interacción entre estas dos dimensiones, estamos perdiendo información que podría mejorar el rendimiento de nuestros modelos de machine learning.
Además, si tenemos información geográfica de otros puntos o áreas de interés que pudieran interactuar con la ubicación de nuestras observaciones podríamos crear nuevas características informativas a partir del cálculo de distancias.
En esta parte del tutorial vamos a crear una característica combinada a partir de la latitud y longitud que hemos discretizado antes.
Para ello seguiremos los siguientes pasos:
Si además tenemos información geográfica de otros puntos de interés nos puede ser de utilidad crear nuevas características que representen la distancia.
Para ello utilizaremos una medida de distancia que sea apropiada para nuestro caso de uso (la distancia Euclidea suele ser una buena opción aunque utilizar una librería como geopandas puede ser más fácil y preciso) y calcularemos las distancias entre las ubicaciones de nuestras observaciones y estos puntos de interés.
Por ejemplo, si estamos analizando precios de viviendas, podríamos querer saber la distancia de cada vivienda a centros urbanos, estaciones de tren, parques, escuelas, o centros comerciales.
En el caso de California podemos utilizar la ubicación de sus ciudades más importantes:
Ciudad | Latitud | Longitud |
---|---|---|
Los Ángeles | 34.0522 | -118.2437 |
San Francisco | 37.7749 | -122.4194 |
Sacramento | 38.5816 | -121.4944 |
Estas distancias pueden proporcionar información muy interesante sobre factores que influyen en el precio de las viviendas.
A veces, podemos tener regiones geográficas definidas por las coordenadas de un polígono que delimitan un área específica de interés, como un parque nacional.
Podríamos crear nuevas características que indicaran si nuestras observaciones están dentro del área de interés o no.
Además de la transformación de las características geográficas para aprovechar al máximo su potencial informativo, una parte muy interesante de este tipo de datos es su visualización y exploración.
A través de gráficos podemos analizar de manera muy rápida y eficiente los patrones geográficos de nuestras observaciones.
Para esta parte de representación volvemos a utilizar los valores numéricos precisos originales de nuestras características de latitud y longitud.
housing_data.plot(kind="scatter", x="longitude", y="latitude", c="median_house_value", cmap="jet", colorbar=True, legend=True, sharex=False, grid=True, figsize=(10, 7)) plt.show()
kind
: Especifica el tipo de gráfico a generar. En este caso kind="scatter"
indica que se debe crear un gráfico de dispersión.x
: Define la columna del DataFrame que se usará para los valores en el eje x (longitude
).y
: Define la columna del DataFrame que se usará para los valores en el eje y (latitude
).c
: Define la columna del DataFrame cuyos valores se utilizarán para colorear los puntos en el gráfico. En este caso el valor de las viviendas.cmap
: Especifica el mapa de colores que se usará para los puntos en el gráfico.colorbar
: Determina si se debe mostrar una barra de color en el gráfico.grid
: Especifica si se deben mostrar líneas de cuadrícula en el gráfico.figsize
: Define el tamaño de la figura del gráfico en pulgadas.Los mapas base pueden darnos un contexto espacial y geográfico que nos ayude a interpretar y comunicar los datos de manera más efectiva.
Además, gracias a la utilización de mapas base podemos mejorar la interpretación visual de nuestros datos ya que tendremos puntos de referencia conocidos, como ríos, montañas, barrios o carreteras.
Y queda mucho más bonito 😊