Visualizar datos de análisis geoespaciales en un notebook de Colab te permite explorar tus datos de ubicación con herramientas conocidas de ciencia de datos de Python. En este instructivo, consultarás los siguientes conjuntos de datos públicos directamente desde tu notebook para descubrir patrones geográficos renderizando diagramas de dispersión, polígonos, mapas de coropletas y mapas de calor interactivos:
- San Francisco Ford GoBike Share
- Barrios de San Francisco
- Informes del Departamento de Policía de San Francisco (SFPD)
Para obtener información sobre cómo acceder a estos conjuntos de datos públicos, consulta Accede a conjuntos de datos públicos en la consola de Google Cloud .
Objetivos
- Configura la autenticación con Google Cloud y, de manera opcional, con Google Maps.
- Consulta datos en BigQuery y descarga los resultados en Colab.
- Usar herramientas de ciencia de datos de Python para realizar transformaciones y análisis
- Crea visualizaciones, incluidos diagramas de dispersión, polígonos, coropletas y mapas de calor.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto,
usa la calculadora de precios.
Cuando completes las tareas que se describen en este documento, podrás borrar los recursos que creaste para evitar que se te siga facturando. Para obtener más información, consulta Realiza una limpieza.
Antes de comenzar
- Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigQuery and Google Maps JavaScript APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigQuery and Google Maps JavaScript APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.- Asegúrate de tener los permisos necesarios para realizar las tareas de este documento.
Roles obligatorios
Si creas un proyecto nuevo, eres el propietario del proyecto y se te otorgan todos los permisos de IAM necesarios para completar este instructivo.
Si usas un proyecto existente, necesitas el siguiente rol a nivel de proyecto para ejecutar trabajos de consulta.
Asegúrate de tener los siguientes roles en el proyecto:
- Usuario de BigQuery (
roles/bigquery.user)
Verifica los roles
-
En la consola de Google Cloud , dirígete a la página IAM.
Ir a IAM - Selecciona el proyecto.
-
En la columna Principal, busca todas las filas que te identifiquen a ti o a un grupo en el que se te incluya. Para saber en qué grupos estás incluido, comunícate con tu administrador.
- Para todas las filas en las que se te especifique o se te incluya, verifica la columna Rol para ver si la lista de roles incluye los roles necesarios.
Otorga los roles
-
En la consola de Google Cloud , dirígete a la página IAM.
Ir a IAM - Selecciona el proyecto.
- Haz clic en Otorgar acceso.
-
En el campo Principales nuevas, ingresa tu identificador de usuario. Esta suele ser la dirección de correo electrónico de una Cuenta de Google.
- Haz clic en Selecciona un rol y, luego, busca el rol.
- Para otorgar roles adicionales, haz clic en Agregar otro rol y agrega uno más.
- Haz clic en Guardar.
Para obtener más información sobre los roles en BigQuery, consulta Roles de IAM predefinidos.
Crea un notebook de Colab
En este instructivo, se compila un notebook de Colab para visualizar datos de estadísticas geoespaciales. Puedes abrir una versión compilada previamente del notebook en Colab, Colab Enterprise o BigQuery Studio haciendo clic en los vínculos que se encuentran en la parte superior de la versión de GitHub del instructivo: Visualización geoespacial de BigQuery en Colab.
Abre Colab.
En el cuadro de diálogo Abrir notebook, haz clic en Notebook nuevo.
Haz clic en
Untitled0.ipynby cambia el nombre del notebook abigquery-geo.ipynb.Selecciona Archivo > Guardar.
Autentica con Google Cloud y Google Maps
En este instructivo, se consultan conjuntos de datos de BigQuery y se usa la API de Google Maps JavaScript. Para usar estos recursos, autentica el entorno de ejecución de Colab con Google Cloud y la API de Google Maps.
Autentica con Google Cloud
Para insertar una celda de código, haz clic en Código.
Para autenticarte con tu proyecto, ingresa el siguiente código:
# REQUIRED: Authenticate with your project. GCP_PROJECT_ID = "PROJECT_ID" #@param {type:"string"} from google.colab import auth from google.colab import userdata auth.authenticate_user(project_id=GCP_PROJECT_ID) # Set GMP_API_KEY to none GMP_API_KEY = None
Reemplaza PROJECT_ID con el ID del proyecto.
Haz clic en Ejecutar celda.
Cuando se te solicite, haz clic en Permitir para otorgar a Colab acceso a tus credenciales, si estás de acuerdo.
En la página Acceder con Google, elige tu cuenta.
En la página Acceder al código de notebook creado por terceros, haz clic en Continuar.
En Selecciona a qué puede acceder el código del notebook creado por terceros, haz clic en Seleccionar todo y, luego, en Continuar.
Después de completar el flujo de autorización, no se genera ningún resultado en tu notebook de Colab. La marca de verificación junto a la celda indica que el código se ejecutó correctamente.
Opcional: Autentica con Google Maps
Si usas Google Maps Platform como proveedor de mapas base, debes proporcionar una clave de API de Google Maps Platform. El notebook recupera la clave de tus Secrets de Colab.
Este paso solo es necesario si usas la API de Google Maps. Si no te autenticas con Google Maps Platform, pydeck usa el mapa carto en su lugar.
Para obtener tu clave de API de Google Maps, sigue las instrucciones de la página Usa claves de API en la documentación de Google Maps.
Cambia a tu notebook de Colab y, luego, haz clic en Secrets.
Haz clic en Agregar secreto nuevo.
En Nombre, ingresa
GMP_API_KEY.En Valor, ingresa el valor de la clave de API de Google Maps que generaste antes.
Cierra el panel Secrets.
Para insertar una celda de código, haz clic en Código.
Para autenticarte con la API de Google Maps, ingresa el siguiente código:
# Authenticate with the Google Maps JavaScript API. GMP_API_SECRET_KEY_NAME = "GMP_API_KEY" #@param {type:"string"} if GMP_API_SECRET_KEY_NAME: GMP_API_KEY = userdata.get(GMP_API_SECRET_KEY_NAME) if GMP_API_SECRET_KEY_NAME else None else: GMP_API_KEY = None
Cuando se te solicite, haz clic en Otorgar acceso para que el notebook acceda a tu clave, si estás de acuerdo.
Haz clic en Ejecutar celda.
Después de completar el flujo de autorización, no se genera ningún resultado en tu notebook de Colab. La marca de verificación junto a la celda indica que el código se ejecutó correctamente.
Instala paquetes de Python e importa bibliotecas de ciencia de datos
Además de los módulos de Python colabtools (google.colab),
en este instructivo, se usan varios paquetes de Python y bibliotecas de ciencia de datos.
En esta sección, instalarás los paquetes pydeck y h3. pydeck
proporciona renderización espacial a gran escala en Python, con la tecnología de deck.gl.
h3-py proporciona el sistema de indexación geoespacial jerárquico hexagonal H3 de Uber en Python.
Luego, importa las bibliotecas h3 y pydeck, y las siguientes bibliotecas geoespaciales de Python:
geopandaspara extender los tipos de datos que usapandaspara permitir operaciones espaciales en tipos geométricos.shapelypara la manipulación y el análisis de objetos geométricos planos individuales.brancapara generar mapas de colores HTML y JavaScript.geemap.deckpara la visualización conpydeckyearthengine-api.
Después de importar las bibliotecas, habilitas las tablas interactivas para los DataFrames de pandas
en Colab.
Instala los paquetes pydeck y h3
Para insertar una celda de código, haz clic en Código.
Para instalar los paquetes
pydeckyh3, ingresa el siguiente código:# Install pydeck and h3. !pip install pydeck>=0.9 h3>=4.2
Haz clic en Ejecutar celda.
Después de completar la instalación, no se genera ningún resultado en tu notebook de Colab. La marca de verificación junto a la celda indica que el código se ejecutó correctamente.
Importa las bibliotecas de Python
Para insertar una celda de código, haz clic en Código.
Para importar las bibliotecas de Python, ingresa el siguiente código:
# Import data science libraries. import branca import geemap.deck as gmdk import h3 import pydeck as pdk import geopandas as gpd import shapely
Haz clic en Ejecutar celda.
Después de ejecutar el código, no se genera ningún resultado en tu notebook de Colab. La marca de verificación junto a la celda indica que el código se ejecutó correctamente.
Habilita las tablas interactivas para los DataFrames de pandas
Para insertar una celda de código, haz clic en Código.
Para habilitar los DataFrames de
pandas, ingresa el siguiente código:# Enable displaying pandas data frames as interactive tables by default. from google.colab import data_table data_table.enable_dataframe_formatter()
Haz clic en Ejecutar celda.
Después de ejecutar el código, no se genera ningún resultado en tu notebook de Colab. La marca de verificación junto a la celda indica que el código se ejecutó correctamente.
Cómo crear una rutina compartida
En esta sección, crearás una rutina compartida que renderiza capas en un mapa base.
Para insertar una celda de código, haz clic en Código.
Para crear una rutina compartida que renderice capas en un mapa, ingresa el siguiente código:
# Set Google Maps as the base map provider. MAP_PROVIDER_GOOGLE = pdk.bindings.base_map_provider.BaseMapProvider.GOOGLE_MAPS.value # Shared routine for rendering layers on a map using geemap.deck. def display_pydeck_map(layers, view_state, **kwargs): deck_kwargs = kwargs.copy() # Use Google Maps as the base map only if the API key is provided. if GMP_API_KEY: deck_kwargs.update({ "map_provider": MAP_PROVIDER_GOOGLE, "map_style": pdk.bindings.map_styles.GOOGLE_ROAD, "api_keys": {MAP_PROVIDER_GOOGLE: GMP_API_KEY}, }) m = gmdk.Map(initial_view_state=view_state, ee_initialize=False, **deck_kwargs) for layer in layers: m.add_layer(layer) return m
Haz clic en Ejecutar celda.
Después de ejecutar el código, no se genera ningún resultado en tu notebook de Colab. La marca de verificación junto a la celda indica que el código se ejecutó correctamente.
Crea un diagrama de dispersión
En esta sección, crearás un diagrama de dispersión de todas las estaciones de bicicletas compartidas en el
conjunto de datos públicos de Ford GoBike Share de San Francisco recuperando datos de la
tabla bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info. El
diagrama de dispersión se crea con una capa
y una capa de diagrama de dispersión
del framework de deck.gl.
Los diagramas de dispersión son útiles cuando necesitas revisar un subconjunto de puntos individuales (también conocido como verificación puntual).
En el siguiente ejemplo, se muestra cómo usar una capa y una capa de diagrama de dispersión para renderizar puntos individuales como círculos.
Para insertar una celda de código, haz clic en Código.
Para consultar el conjunto de datos públicos de Ford GoBike Share de San Francisco, ingresa el siguiente código. Este código usa la función mágica
%%bigquerypara ejecutar la consulta y devolver los resultados en un DataFrame:# Query the station ID, station name, station short name, and station # geometry from the bike share dataset. # NOTE: In this tutorial, the denormalized 'lat' and 'lon' columns are # ignored. They are decomposed components of the geometry. %%bigquery gdf_sf_bikestations --project {GCP_PROJECT_ID} --use_geodataframe station_geom SELECT station_id, name, short_name, station_geom FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info`
Haz clic en Ejecutar celda.
El resultado es similar a lo siguiente:
Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%Para insertar una celda de código, haz clic en Código.
Para obtener un resumen del DataFrame, incluidas las columnas y los tipos de datos, ingresa el siguiente código:
# Get a summary of the DataFrame gdf_sf_bikestations.info()
Haz clic en Ejecutar celda.
El resultado debe verse de la siguiente manera:
<class 'geopandas.geodataframe.GeoDataFrame'> RangeIndex: 472 entries, 0 to 471 Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 station_id 472 non-null object 1 name 472 non-null object 2 short_name 472 non-null object 3 station_geom 472 non-null geometry dtypes: geometry(1), object(3) memory usage: 14.9+ KBPara insertar una celda de código, haz clic en Código.
Para obtener una vista previa de las primeras cinco filas del DataFrame, ingresa el siguiente código:
# Preview the first five rows gdf_sf_bikestations.head()
Haz clic en Ejecutar celda.
El resultado es similar a lo siguiente:
Para renderizar los puntos, debes extraer la longitud y la latitud como coordenadas x e y de la columna station_geom en el conjunto de datos de bicicletas compartidas.
Como gdf_sf_bikestations es un geopandas.GeoDataFrame, se accede a las coordenadas directamente desde su columna de geometría station_geom. Puedes recuperar
la longitud con el atributo .x de la columna y la latitud con su atributo
.y. Luego, puedes almacenarlos en columnas nuevas de longitud y latitud.
Para insertar una celda de código, haz clic en Código.
Para extraer los valores de longitud y latitud de la columna
station_geom, ingresa el siguiente código:# Extract the longitude (x) and latitude (y) from station_geom. gdf_sf_bikestations["longitude"] = gdf_sf_bikestations["station_geom"].x gdf_sf_bikestations["latitude"] = gdf_sf_bikestations["station_geom"].y
Haz clic en Ejecutar celda.
Después de ejecutar el código, no se genera ningún resultado en tu notebook de Colab. La marca de verificación junto a la celda indica que el código se ejecutó correctamente.
Para insertar una celda de código, haz clic en Código.
Para renderizar el diagrama de dispersión de las estaciones de bicicletas compartidas según los valores de longitud y latitud que extrajiste antes, ingresa el siguiente código:
# Render a scatter plot using pydeck with the extracted longitude and # latitude columns in the gdf_sf_bikestations geopandas.GeoDataFrame. scatterplot_layer = pdk.Layer( "ScatterplotLayer", id="bike_stations_scatterplot", data=gdf_sf_bikestations, get_position=['longitude', 'latitude'], get_radius=100, get_fill_color=[255, 0, 0, 140], # Adjust color as desired pickable=True, ) view_state = pdk.ViewState(latitude=37.77613, longitude=-122.42284, zoom=12) display_pydeck_map([scatterplot_layer], view_state)
Haz clic en Ejecutar celda.
El resultado es similar a lo siguiente:
Visualiza polígonos
Las estadísticas geoespaciales te permiten analizar y visualizar datos geoespaciales en
BigQuery con tipos de datos GEOGRAPHY y funciones geográficas
de GoogleSQL.
El tipo de datos GEOGRAPHY
en el análisis geoespacial es una colección de puntos, linestrings y
polígonos, que se representa como un conjunto de puntos o un subconjunto de la superficie de la
Tierra. Un tipo GEOGRAPHY puede contener objetos como los siguientes:
- Puntos
- Líneas
- Polígonos
- Multipolygons
Para obtener una lista de todos los objetos admitidos, consulta la documentación del tipo GEOGRAPHY.
Si se te proporcionan datos geoespaciales sin conocer las formas esperadas, puedes
visualizar los datos para descubrir las formas. Para visualizar las formas,
convierte los datos geográficos al formato GeoJSON. Luego,
puedes visualizar los datos de GeoJSON con una capa de GeoJSON
del framework de deck.gl.
En esta sección, consultarás datos geográficos en el conjunto de datos de vecindarios de San Francisco y, luego, visualizarás los polígonos.
Para insertar una celda de código, haz clic en Código.
Para consultar los datos geográficos de la tabla
bigquery-public-data.san_francisco_neighborhoods.boundariesen el conjunto de datos de vecindarios de San Francisco, ingresa el siguiente código. Este código usa la función mágica%%bigquerypara ejecutar la consulta y devolver los resultados en un DataFrame:# Query the neighborhood name and geometry from the San Francisco # neighborhoods dataset. %%bigquery gdf_sanfrancisco_neighborhoods --project {GCP_PROJECT_ID} --use_geodataframe geometry SELECT neighborhood, neighborhood_geom AS geometry FROM `bigquery-public-data.san_francisco_neighborhoods.boundaries`
Haz clic en Ejecutar celda.
El resultado es similar a lo siguiente:
Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%Para insertar una celda de código, haz clic en Código.
Para obtener un resumen del DataFrame, ingresa el siguiente código:
# Get a summary of the DataFrame gdf_sanfrancisco_neighborhoods.info()
Haz clic en Ejecutar celda.
Los resultados deberían verse así:
<class 'geopandas.geodataframe.GeoDataFrame'> RangeIndex: 117 entries, 0 to 116 Data columns (total 2 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 neighborhood 117 non-null object 1 geometry 117 non-null geometry dtypes: geometry(1), object(1) memory usage: 2.0+ KBPara obtener una vista previa de la primera fila del DataFrame, ingresa el siguiente código:
# Preview the first row gdf_sanfrancisco_neighborhoods.head(1)
Haz clic en Ejecutar celda.
El resultado es similar a lo siguiente:
En los resultados, observa que los datos son un polígono.
Para insertar una celda de código, haz clic en Código.
Para visualizar los polígonos, ingresa el siguiente código.
pydeckse usa para convertir cada instancia de objetoshapelyde la columna de geometría al formatoGeoJSON:# Visualize the polygons. geojson_layer = pdk.Layer( 'GeoJsonLayer', id="sf_neighborhoods", data=gdf_sanfrancisco_neighborhoods, get_line_color=[127, 0, 127, 255], get_fill_color=[60, 60, 60, 50], get_line_width=100, pickable=True, stroked=True, filled=True, ) view_state = pdk.ViewState(latitude=37.77613, longitude=-122.42284, zoom=12) display_pydeck_map([geojson_layer], view_state)
Haz clic en Ejecutar celda.
El resultado es similar a lo siguiente:
Crea un mapa de coropletas
Si exploras datos con polígonos que son difíciles de convertir al formato GeoJSON, puedes usar una capa de polígonos del framework de deck.gl. Una capa de polígonos puede procesar datos de entrada de
tipos específicos, como un array de puntos.
En esta sección, usarás una capa de polígonos para renderizar un array de puntos y usarás los resultados para renderizar un mapa de coropletas. El mapa de coropletas muestra la densidad de las estaciones de bicicletas compartidas por vecindario uniendo los datos del conjunto de datos de vecindarios de San Francisco con el conjunto de datos de Ford GoBike Share de San Francisco.
Para insertar una celda de código, haz clic en Código.
Para agregar y contar la cantidad de estaciones por vecindario y crear una columna
polygonque contenga un array de puntos, ingresa el siguiente código:# Aggregate and count the number of stations per neighborhood. gdf_count_stations = gdf_sanfrancisco_neighborhoods.sjoin(gdf_sf_bikestations, how='left', predicate='contains') gdf_count_stations = gdf_count_stations.groupby(by='neighborhood')['station_id'].count().rename('num_stations') gdf_stations_x_neighborhood = gdf_sanfrancisco_neighborhoods.join(gdf_count_stations, on='neighborhood', how='inner') # To simulate non-GeoJSON input data, create a polygon column that contains # an array of points by using the pandas.Series.map method. gdf_stations_x_neighborhood['polygon'] = gdf_stations_x_neighborhood['geometry'].map(lambda g: list(g.exterior.coords))
Haz clic en Ejecutar celda.
Después de ejecutar el código, no se genera ningún resultado en tu notebook de Colab. La marca de verificación junto a la celda indica que el código se ejecutó correctamente.
Para insertar una celda de código, haz clic en Código.
Para agregar una columna
fill_colorpara cada uno de los polígonos, ingresa el siguiente código:# Create a color map gradient using the branch library, and add a fill_color # column for each of the polygons. colormap = branca.colormap.LinearColormap( colors=["lightblue", "darkred"], vmin=0, vmax=gdf_stations_x_neighborhood['num_stations'].max(), ) gdf_stations_x_neighborhood['fill_color'] = gdf_stations_x_neighborhood['num_stations'] \ .map(lambda c: list(colormap.rgba_bytes_tuple(c)[:3]) + [0.7 * 255]) # force opacity of 0.7
Haz clic en Ejecutar celda.
Después de ejecutar el código, no se genera ningún resultado en tu notebook de Colab. La marca de verificación junto a la celda indica que el código se ejecutó correctamente.
Para insertar una celda de código, haz clic en Código.
Para renderizar la capa de polígonos, ingresa el siguiente código:
# Render the polygon layer. polygon_layer = pdk.Layer( 'PolygonLayer', id="bike_stations_choropleth", data=gdf_stations_x_neighborhood, get_polygon='polygon', get_fill_color='fill_color', get_line_color=[0, 0, 0, 255], get_line_width=50, pickable=True, stroked=True, filled=True, ) view_state = pdk.ViewState(latitude=37.77613, longitude=-122.42284, zoom=12) display_pydeck_map([polygon_layer], view_state)
Haz clic en Ejecutar celda.
El resultado es similar a lo siguiente:
Crea un mapa de calor
Los mapas de coropletas son útiles cuando tienes límites significativos que son conocidos. Si tienes datos sin límites significativos conocidos, puedes usar una capa de mapa de calor para renderizar su densidad continua.
En el siguiente ejemplo, consultarás datos en la tabla bigquery-public-data.san_francisco_sfpd_incidents.sfpd_incidents del conjunto de datos de informes del Departamento de Policía de San Francisco (SFPD). Los datos se usan para
visualizar la distribución de incidentes en 2015.
En el caso de los mapas de calor, se recomienda cuantificar y agregar los datos antes de
renderizarlos. En este ejemplo, los datos se cuantifican y agregan con la indexación espacial H3 de Carto.
El mapa de calor se crea con una capa de mapa de calor del framework de deck.gl.
En este ejemplo, la cuantización se realiza con la biblioteca de Python h3 para agregar
los puntos de incidentes en hexágonos. La función h3.latlng_to_cell se usa para
asignar la posición del incidente (latitud y longitud) a un índice de celda H3. Una resolución de H3 de nueve proporciona suficientes hexágonos agregados para el mapa de calor.
La función h3.cell_to_latlng se usa para determinar el centro de cada
hexágono.
Para insertar una celda de código, haz clic en Código.
Para consultar los datos en el conjunto de datos de informes del Departamento de Policía de San Francisco (SFPD), ingresa el siguiente código. Este código usa la función mágica
%%bigquerypara ejecutar la consulta y devolver los resultados en un DataFrame:# Query the incident key and location data from the SFPD reports dataset. %%bigquery gdf_incidents --project {GCP_PROJECT_ID} --use_geodataframe location_geography SELECT unique_key, location_geography FROM ( SELECT unique_key, SAFE.ST_GEOGFROMTEXT(location) AS location_geography, # WKT string to GEOMETRY EXTRACT(YEAR FROM timestamp) AS year, FROM `bigquery-public-data.san_francisco_sfpd_incidents.sfpd_incidents` incidents ) WHERE year = 2015
Haz clic en Ejecutar celda.
El resultado es similar a lo siguiente:
Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%Para insertar una celda de código, haz clic en Código.
Para calcular la celda de la latitud y la longitud de cada incidente, agrega los incidentes de cada celda, construye un DataFrame de
geopandasy agrega el centro de cada hexágono para la capa del mapa de calor, ingresa el siguiente código:# Compute the cell for each incident's latitude and longitude. H3_RESOLUTION = 9 gdf_incidents['h3_cell'] = gdf_incidents.geometry.apply( lambda geom: h3.latlng_to_cell(geom.y, geom.x, H3_RESOLUTION) ) # Aggregate the incidents for each hexagon cell. count_incidents = gdf_incidents.groupby(by='h3_cell')['unique_key'].count().rename('num_incidents') # Construct a new geopandas.GeoDataFrame with the aggregate results. # Add the center of each hexagon for the HeatmapLayer to render. gdf_incidents_x_cell = gpd.GeoDataFrame(data=count_incidents).reset_index() gdf_incidents_x_cell['h3_center'] = gdf_incidents_x_cell['h3_cell'].apply(h3.cell_to_latlng) gdf_incidents_x_cell.info()
Haz clic en Ejecutar celda.
El resultado es similar a lo siguiente:
<class 'geopandas.geodataframe.GeoDataFrame'> RangeIndex: 969 entries, 0 to 968 Data columns (total 3 columns): # Column Non-Null Count Dtype -- ------ -------------- ----- 0 h3_cell 969 non-null object 1 num_incidents 969 non-null Int64 2 h3_center 969 non-null object dtypes: Int64(1), object(2) memory usage: 23.8+ KBPara insertar una celda de código, haz clic en Código.
Para obtener una vista previa de las primeras cinco filas del DataFrame, ingresa el siguiente código:
# Preview the first five rows. gdf_incidents_x_cell.head()
Haz clic en Ejecutar celda.
El resultado es similar a lo siguiente:
Para insertar una celda de código, haz clic en Código.
Para convertir los datos en un formato JSON que pueda usar
HeatmapLayer, ingresa el siguiente código:# Convert to a JSON format recognized by the HeatmapLayer. def _make_heatmap_datum(row) -> dict: return { "latitude": row['h3_center'][0], "longitude": row['h3_center'][1], "weight": float(row['num_incidents']), } heatmap_data = gdf_incidents_x_cell.apply(_make_heatmap_datum, axis='columns').values.tolist()
Haz clic en Ejecutar celda.
Después de ejecutar el código, no se genera ningún resultado en tu notebook de Colab. La marca de verificación junto a la celda indica que el código se ejecutó correctamente.
Para insertar una celda de código, haz clic en Código.
Para renderizar el mapa de calor, ingresa el siguiente código:
# Render the heatmap. heatmap_layer = pdk.Layer( "HeatmapLayer", id="sfpd_heatmap", data=heatmap_data, get_position=['longitude', 'latitude'], get_weight='weight', opacity=0.7, radius_pixels=99, # this limitation can introduce artifacts (see above) aggregation='MEAN', ) view_state = pdk.ViewState(latitude=37.77613, longitude=-122.42284, zoom=12) display_pydeck_map([heatmap_layer], view_state)
Haz clic en Ejecutar celda.
El resultado es similar a lo siguiente:
Realiza una limpieza
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
Console
- En la Google Cloud consola, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
gcloud
Borra un proyecto de Google Cloud :
gcloud projects delete PROJECT_ID
Borra tu clave de API de Google Maps y el notebook
Después de borrar el Google Cloud proyecto, si usaste la API de Google Maps, borra la clave de API de Google Maps de tus Secrets de Colab y, luego, borra el notebook (opcional).
En Colab, haz clic en Secrets.
Al final de la fila
GMP_API_KEY, haz clic en Borrar.Opcional: Para borrar el notebook, haz clic en Archivo > Mover a la papelera.
¿Qué sigue?
- Para obtener más información sobre las estadísticas geoespaciales en BigQuery, consulta Introducción a las estadísticas geoespaciales en BigQuery.
- Para obtener una introducción a la visualización de datos geoespaciales en BigQuery, consulta Visualiza datos geoespaciales.
- Para obtener más información sobre
pydecky otros tipos de gráficos dedeck.gl, puedes encontrar ejemplos en la Galería depydeck, el Catálogo de capas dedeck.gly la fuente de GitHub dedeck.gl. - Para obtener más información sobre cómo trabajar con datos geoespaciales en marcos de datos, consulta la página de introducción de GeoPandas y la guía del usuario de GeoPandas.
- Para obtener más información sobre la manipulación de objetos geométricos, consulta el manual de instrucciones de Shapely.
- Para explorar el uso de datos de Google Earth Engine en BigQuery, consulta Exporta a BigQuery en la documentación de Google Earth Engine.