Análisis del tiempo de viaje con el movimiento de Uber (QGIS3)

Advertencia

Los datos de Uber Movement han sido descontinuados [ver anuncio]. Aún puede seguir el tutorial utilizando los datos de archivo proporcionados en el tutorial y aprender la técnica de análisis de tiempo de viaje utilizando QGIS.

Uber Movement comparte datos anónimos y agregados de tiempos de viaje de muchas ciudades del mundo. El producto Travel Times de Uber Movement es un conjunto de datos público que mide los desplazamientos de zona a zona en una ciudad. Estos tiempos se basan en viajes reales de Uber y son una representación precisa de la congestión y los patrones de tráfico en la ciudad. Se trata de un gran conjunto de datos de libre acceso que se ha agregado a partir de millones de viajes reales en taxi. Este tutorial muestra las técnicas para trabajar con tales conjuntos de datos de tráfico agregados para hacer el análisis del tiempo de viaje en QGIS.

Vista general de la tarea

Utilizaremos un conjunto de datos de tráfico agregados para la ciudad de Bangalore, India, para encontrar los tiempos de viaje a un lugar elegido de la ciudad. También crearemos un Mapa isócrono para un umbral de tiempo de viaje de 30 minutos.

Otras habilidades que aprenderá

  • Cargar un archivo GeoJSON en QGIS

Obtener los datos

Vamos a descargar el conjunto de datos de Tiempos de Viaje para la ciudad de Bangalore, India.

  1. Vaya a la página web de Uber Movement y haga clic en la Cities.

../../_images/data013.png
  1. Busque Bangalore.

../../_images/data023.png
  1. Haga clic en Download data.

../../_images/data032.png
  1. En la ventana emergente Download data, cambie a GEO BOUNDARIES. Contendrá el archivo GeoJSON de los distritos de Bangalore. Acepte la información de la licencia y haga clic en BANGALORE_WARDS.JSON para descargarlo.

../../_images/data042.png
  1. A continuación, cambie a ALL DATA. Estos datos están disponibles desde 2016 hasta 2020, y cada año se divide en 4 trimestres. Vamos a descargar los datos del Trimestre 3 de 2019. Selecciónelo y haga clic en Viajes por hora del día (sólo días laborables). Este archivo contendrá toda la información anónima sobre los viajes en Uber entre semana en Bangalore de julio a septiembre de 2019.

../../_images/data051.png

Para su comodidad, puede descargar los datos en los siguientes enlaces.

bangalore_wards.json

bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate.csv

Fuente de Datos: [UBER]

Procedimiento

  1. Localiza el archivo bangalore_wards.json en el panel Navegador y arrástralo al lienzo. A continuación, cargaremos una capa de mapa base de OpenStreetMap. Utilizaremos el plugin QuickMapServices para acceder al mapa base. Una vez instalado, ve a Web ‣ QuickMapServices ‣ OSM ‣ OSM Standard. Se añadirá al proyecto una capa de mosaico del mapa base de OpenStreetMap. A continuación, haga clic en el botón Abrir gesto de Fuentes de datos.

../../_images/019.png
  1. Cambie a la pestaña Texto delimitado. Busque el archivo bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate.csv y selecciónelo. Dado que este archivo CSV es sólo datos tabulares, seleccione la opción Sin geometría (tabla de atributos solamente) y haga clic en Añadir.

../../_images/029.png
  1. La capa bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate se añadirá al panel Capas`. Esta capa contiene datos anónimos y agregados de localización de viajes entre diferentes zonas de la ciudad. Cada fila de la tabla contiene columnas para la zona de origen (sourceid), la zona de destino (dstid), la hora del día (hod) y el tiempo medio de viaje agregado de todos los viajes entre estas zonas a esa hora (mean_travel_time). Puede obtener más información sobre este conjunto de datos en el documento Movement: Metodología de cálculo de los tiempos de viaje (pdf). Antes de seguir adelante, vamos a comprobar cuántos registros de datos están presentes en la capa. Haga clic con el botón derecho en la capa bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate y seleccione Show Feature Count`. El total de filas de la tabla se mostrará junto a ella. Se trata de una tabla bastante grande, pero no necesitamos todas las filas de datos para nuestro análisis. Ahora identificaremos nuestra ubicación de destino y filtraremos esta tabla para obtener los registros de datos correspondientes.

../../_images/039.png
  1. Queremos calcular todas las áreas que son accesibles en 30 minutos desde una ubicación específica. Utilizando el mapa base OSM Standard, puede encontrar la ubicación de interés. A continuación, seleccione la capa bangalore_wards, utilice la herramienta Identificar` y haga clic en ella. Los resultados mostrarán los atributos de la zona que contiene la ubicación. Para el propósito de este tutorial, vamos a suponer que nuestra ubicación de destino se encuentra dentro de la zona JP Nagar con el ID_MOVIMIENTO 193.

../../_images/049.png
  1. Podemos filtrar los registros de tiempos de viaje para que sólo aparezcan los que tienen esta zona como destino. También podemos restringir nuestro análisis a la hora punta de la mañana de 9 a 10. Haga clic con el botón derecho en la capa bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate y seleccione Filtro.

../../_images/059.png
  1. Introduzca la siguiente expresión de filtro y haga clic en Aceptar.

"dstid" = 193 AND "hod" = 9
../../_images/069.png
  1. De vuelta a la ventana principal de QGIS, verá que el número de registros en la tabla filtrada se reduce ahora a sólo 197. Dado que hay un total de 198 zonas en la ciudad, tenemos registros de tiempos de viaje entre 1 barrio de destino y 197 zonas de origen. Abra la tabla de atributos de ambas capas utilizando el botón Abrir tabla de atributos de la barra de herramientas Atributos.

../../_images/079.png
  1. Ahora tenemos las formas del barrio en la capa bangalore_wards y la información tabular en la capa bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate. Podemos unir la información de atributos a las formas utilizando un atributo común. En este caso, la columna MOVEMENT_ID de la capa bangalore_wards y la columna sourceid de la capa bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate son identificadores de distrito únicos que pueden unirse. Esta operación se denomina Unión de Tablas.

../../_images/088.png
  1. Antes de poder unir estas dos capas, debemos asegurarnos de que los valores de ambas columnas coinciden exactamente. Aunque parezcan iguales, son de distinto tipo. Como el formato GeoJSON no tiene forma de especificar los tipos de propiedades, se asume que todos los valores son del tipo String - es decir, Texto. Pero cuando importamos un CSV a QGIS, por defecto, QGIS intenta determinar los tipos de las columnas basándose en los valores y asignando el tipo de campo apropiado. Para el archivo CSV, el tipo de datos de la columna sourceid fue asignado como Integer. Así que tenemos que convertir la columna del GeoJSON a un tipo Integer también. Vaya a Procesos ‣ Caja de herramientas ‣ Tabla de vectores ‣ Algoritmo de cálculo de campos. Haga doble clic para lanzarlo.

../../_images/098.png
  1. Elija bangalore_wards como la Capa de entrada. Nombra el campo como joinfield y selecciona el Tipo de campo resultado como Integer. Introduzca MOVEMENT_ID como expresión. Haga clic en el botón junto a Calculado y seleccione Guardar en archivo… e introduzca el nombre del archivo de salida como bangalore_wards_fixed.gpkg. Haga clic en Ejecutar. Cierre la calculadora de campos.

../../_images/1037.png
  1. Se añadirá una nueva capa bangalore_wards_fixed al panel Layers`. Ahora estamos listos para realizar la unión. Vaya a Procesos ‣ Caja de herramientas ‣ Vector General ‣ Unir atributos por valor de campo. Haga doble clic para lanzarlo.

../../_images/1149.png
  1. Seleccione bangalore_wards_fixed como Capa de entrada y joinfield como Campo tabla`. Seleccione bangalore-wards-2019-3-OnlyWeekdays-HourlyAggregate como Capa entrada 2 y sourceid como Campo tabla 2. Nombre la capa Capa unida como uber_travel_times.gpkg y haga clic en Ejecutar.

../../_images/1240.png
  1. Se añadirá una nueva capa uber_travel_times al panel Capas`. Vamos a estilizarla para visualizar el resultado de la unión. Haga clic en Abrir el panel de estilo de capas. Selecciona el renderizador Graduado y mean_travel_time como Valor`. Seleccione una rampa de color y haga clic en Clasificar. Verá que el mapa muestra tiempos de viaje crecientes a medida que se aleja del destino.

../../_images/1338.png
  1. Pero lo que queremos es analizar y extraer las zonas que están a menos de 30 minutos de viaje, así que tenemos que hacer algo más de procesamiento. Vuelva a cambiar el estilo al renderizador Símbolo único. Haga clic con el botón derecho en la capa uber_travel_times y seleccione Filtro`.

../../_images/1434.png
  1. Introduzca la siguiente expresión para seleccionar todas las zonas que estén a menos de 1800 segundos (30 minutos) del tiempo medio de viaje. También tenemos que incluir nuestra zona de destino que tendrá 0 tiempo de viaje.

"mean_travel_time" <= 1800 OR "MOVEMENT_ID" = 193
../../_images/1531.png
  1. La capa mostrará ahora el conjunto de polígonos que constituyen el área de interés. Ahora fusionaremos todos ellos en un único polígono. Vaya a Procesos ‣ Caja de herramientas ‣ Geometría vectorial ‣ Disolver. Haga doble clic para lanzarlo.

../../_images/1629.png
  1. Seleccione uber_travel_times como la capa Entrada. Nombre la capa Dissolved como 30min_isochrone.gpkg. Haga clic en Ejecutar.

../../_images/1730.png
  1. Se añadirá una nueva capa 30min_isochrone al panel Capas` que muestra el resultado de nuestro análisis.

../../_images/1826.png

If you want to give feedback or share your experience with this tutorial, please comment below. (requires GitHub account)