Habilite los datos comerciales con BigQuery para el análisis geoespacial y la visualización de mapas

Hay varias dimensiones de la información cuando se trata de la toma de decisiones comerciales. Los datos espaciales ofrecen una poderosa dimensión adicional de información para la toma de decisiones. Para visualizar los datos espaciales en un mapa, usamos un conjunto de datos que contiene los datos espaciales, generalmente una columna geográfica (información de punto, línea / polilínea o polígono) en un formato geoespacial estándar como GeoJSON, WKT, etc. Muchos datos de atributos comerciales no lo hacen. Tengo una columna de geografía. Sin embargo, es fácil unir atributos comerciales con otro conjunto de datos para relacionar la información geoespacial y obtener la capacidad de desglosar datos con análisis espacial. Por ejemplo, estado, condado, código postal, red de carreteras, punto de interés, etc.

Google BigQuery ofrece un conjunto de datos que contiene información geoespacial. En este artículo, usamos el límite del código postal en los datos del censo de EE. UU. Como datos espaciales, y los datos de ventas de licor del estado de Iowa como un ejemplo de datos de atributos comerciales, para mostrar cómo unir datos de atributos con información espacial y visualizarlos en un mapa.

Conjunto de datos de BigQuery usado:

  1. Conjunto de datos públicos: límites de la Oficina del Censo de EE. UU.

Este conjunto de datos incluye límites de polígono de áreas geográficas y estadísticas, algunas características lineales, incluidas carreteras e hidrografía, y también características de puntos. Puede encontrar más información sobre este conjunto de datos aquí .

En este conjunto de datos, la columna geoespacial se llama zip_code_geom. Es una lista de pares de latitud y longitud separados por comas que definen los límites del polígono.

El valor de muestra se ve así:

 POLÍGONO ((- 93.648086 41.619944, -93.64766 41.6186, -93.647425 41.61818, -93.647408 41.618149,….) 

2. Conjunto de datos públicos: ventas minoristas de licores del estado de Iowa

Este conjunto de datos ofrece una vista completa de las ventas minoristas de licores en todo el estado de Iowa. El conjunto de datos contiene pedidos de licor para supermercados, licorerías, tiendas de conveniencia, etc., con detalles sobre la tienda y la ubicación, la marca y el tamaño exactos del licor y la cantidad de botellas ordenadas.

El objetivo de la consulta es identificar ventas superiores a $ 100K por código postal para el año de 2019.

Consulta utilizada:

 SELECCIONE 
boundary.zip_code AS zip_code,
ventas totales,
zip_code_geom
DE
(SELECCIONE código postal, condado, código postal_geom
DE `bigquery-public-data.geo_us_bo limits.zip_codes`
WHERE STATE_CODE = 'IA') COMO límite
ÚNETE A LA IZQUIERDA
(SELECCIONE zip_code, sum (sale_dollars) AS total_sales
DE `bigquery-public-data.iowa_liquor_sales.sales`
DONDE EXTRACTO (AÑO DESDE fecha) = 2019
GROUP BY zip_code) AS ventas
ON sales.zip_code = boundary.zip_code
DONDE ventas_total> 100000

Puede ejecutar la consulta anterior directamente o puede guardar la consulta en una vista y luego consultar la vista. Es fácil visualizar los resultados en BigQuery Geo Viz. La siguiente imagen muestra las ventas totales en un mapa basado en rangos de montos en dólares. Cuanto más oscuro era el color, más ventas tenía.

Geo Viz es bueno para la visualización rápida de datos geoespaciales, pero no es fácil integrar el mapa en Geo Viz con sus aplicaciones existentes. La API de Google Maps es más flexible al presentar datos espaciales. Puede enviar la consulta a BigQuery dentro del código JavaScript y agregar resultados al mapa sobre la marcha. Dado que la API de Google Maps también proporciona funciones como codificación geográfica (traducir dirección a latitud y longitud), codificación geográfica inversa (traducir latitud y longitud a dirección), cálculo de rutas, puede mostrar rápidamente sus datos en su aplicación con funciones geoespaciales.

Para enviar una consulta a BigQuery, podemos usar la biblioteca Javascript de BigQuery. Para obtener una guía paso a paso para configurarlo, incluida la autorización OAuth de 2 pasos, consulte este tutorial .

Fragmento de código para configurar la autenticación y la autorización.

 // Comprueba si el usuario está autorizado. 
función autorizar (evento) {
gapi.auth.authorize ({client_id: clientId, alcance: alcances, inmediato: falso}, handleAuthResult);
falso retorno;
}
 // Si está autorizado, carga la API de BigQuery 
function handleAuthResult (authResult) {
if (authResult &&! authResult.error) {
loadApi ();
regreso;
}
console.error ('No autorizado')
}

Para dibujar una columna geográfica en el mapa, convertimos los datos en la columna de geografía a GeoJSON usando la función ST_ASGEOJSON () en la consulta.

 SELECCIONE 
boundary.zip_code AS zip_code,
ventas totales,
zip_code_geom
DE (
SELECCIONAR código postal, condado,
ST_ASGEOJSON (zip_code_geom) AS zip_code_geom
DE `bigquery-public-data.geo_us_bo limits.zip_codes`
WHERE STATE_CODE = 'IA') COMO límite
ÚNETE A LA IZQUIERDA
(SELECCIONE zip_code, sum (sale_dollars) AS total_sales
DE `bigquery-public-data.iowa_liquor_sales.sales`
DONDE EXTRACTO (AÑO DESDE fecha) = 2019
GROUP BY zip_code) AS ventas
ON sales.zip_code = boundary.zip_code
DONDE ventas_total> 100000

Luego agregamos el resultado a Google Map usando Datalayer que se usa para mostrar datos de GeoJSON en un mapa de Google.

 function doMap (filas) { 
geojson = {
"type": "FeatureCollection",
"crs": {
"escribe un nombre",
"propiedades": {
"nombre": "urn: ogc: def: crs: OGC: 1.3: CRS84"
}
},
"caracteristicas":[]
};
 para (sea i = 0; i <filas.longitud; i ++) { 
geojson.features.push (
{"type": "Característica",
"propiedades": {"ventas_total": filas [i] .f [1] .v,
"zip_code": filas [i] .f [0] .v},
"geometría": JSON.parse (filas [i] .f [2] .v)
})};
 map.data.addGeoJson (geojson); 
 map.data.setStyle (función (característica) { 
var total_sales =
parseFloat (feature.getProperty ("total_sales"));
var zip_code = feature.getProperty ("zip_code");
var color;
si (total_ventas> 15000000)
color = '# 033b23'
de lo contrario, si (total_ventas> 5000000 && total_sales <= 15000000)
color = '# 006d2c'
de lo contrario, si (total_ventas> 1000000 && total_sales <= 5000000)
color = '# zca25f'
de lo contrario, si (total_ventas> 500000 && total_sales <= 1000000)
color = '# 66c2a4'
de lo contrario, si (total_sales> = 100000 && total_sales <= 500000)
color = '# 99d8c9'
más
color = 'blanco'
regreso {
fillColor: color,
trazoPeso: 0
};
});
}

El mapa resultante tiene el siguiente aspecto. Puede agregar más controles a la función del mapa, como hacer clic para obtener información del código postal o datos del censo, etc.

Próximo paso

El ejemplo anterior usa polígonos de límites (código postal). La misma teoría se puede aplicar para datos geoespaciales puntuales, por ejemplo, puntos de interés.

Ahora puede habilitar los datos de atributos de su negocio con otra dimensión de inteligencia: la dimensión de ubicación geográfica. La canalización de datos podría tener el siguiente aspecto.

Si tiene datos de transmisión o su aplicación tiene requisitos de baja latencia, puede considerar mover el procesamiento de datos espaciales a Dataflow.


Habilitar datos comerciales con BigQuery para el análisis geoespacial y la visualización de mapas se publicó originalmente en Google Cloud - Community on Medium, donde las personas continúan la conversación destacando y respondiendo a esta historia.