La visualizzazione dei dati di analisi geospaziale in un notebook di Colab ti consente di esplorare i dati sulla posizione con strumenti di data science Python familiari. In questo tutorial, eseguirai query sui seguenti set di dati pubblici direttamente dal tuo notebook per scoprire pattern geografici eseguendo il rendering di grafici a dispersione, poligoni, mappe coropletiche e mappe termiche interattivi:
- San Francisco Ford GoBike Share
- Quartieri di San Francisco
- Report del San Francisco Police Department (SFPD)
Per informazioni sull'accesso a questi set di dati pubblici, consulta Accedi ai set di dati pubblici nella console Google Cloud .
Obiettivi
- Configura l'autenticazione con Google Cloud e, facoltativamente, Google Maps.
- Eseguire query sui dati in BigQuery e scaricare i risultati in Colab.
- Utilizzare gli strumenti di data science di Python per eseguire trasformazioni e analisi.
- Crea visualizzazioni, tra cui grafici a dispersione, poligoni, coropleti e mappe termiche.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.
Prima di iniziare
- Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
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.- Assicurati di disporre delle autorizzazioni necessarie per eseguire le attività descritte in questo documento.
Ruoli obbligatori
Se crei un nuovo progetto, sei il Project Owner e ti vengono concesse tutte le autorizzazioni IAM necessarie per completare questo tutorial.
Se utilizzi un progetto esistente, devi disporre del seguente ruolo a livello di progetto per eseguire i job di query.
Assicurati di disporre dei seguenti ruoli nel progetto:
- BigQuery User (
roles/bigquery.user)
Controlla i ruoli
-
Nella console Google Cloud vai alla pagina IAM.
Vai a IAM - Seleziona il progetto.
-
Nella colonna Entità, individua tutte le righe che identificano te o un gruppo di cui fai parte. Per scoprire in quali gruppi sei incluso, contatta l'amministratore.
- Per tutte le righe che ti specificano o ti includono, controlla la colonna Ruolo per verificare se l'elenco dei ruoli include i ruoli richiesti.
Concedi i ruoli
-
Nella console Google Cloud vai alla pagina IAM.
Vai a IAM - Seleziona il progetto.
- Fai clic su Concedi l'accesso.
-
Nel campo Nuove entità, inserisci il tuo identificatore dell'utente. In genere si tratta dell'indirizzo email di un Account Google.
- Fai clic su Seleziona un ruolo, quindi cerca il ruolo.
- Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo successivo.
- Fai clic su Salva.
Per saperne di più sui ruoli in BigQuery, consulta Ruoli IAM predefiniti.
Crea un notebook di Colab
Questo tutorial crea un notebook di Colab per visualizzare i dati di analisi geospaziale. Puoi aprire una versione predefinita del notebook in Colab, Colab Enterprise o BigQuery Studio facendo clic sui link nella parte superiore della versione GitHub del tutorial: Visualizzazione geospaziale di BigQuery in Colab.
Apri Colab.
Nella finestra di dialogo Apri notebook, fai clic su Nuovo notebook.
Fai clic su
Untitled0.ipynbe cambia il nome del notebook inbigquery-geo.ipynb.Seleziona File > Salva.
Autenticati con Google Cloud e Google Maps
Questo tutorial esegue query sui set di dati BigQuery e utilizza l'API Google Maps JavaScript. Per utilizzare queste risorse, autentica il runtime di Colab con Google Cloud e l'API di Google Maps.
Autenticati con Google Cloud
Per inserire una cella di codice, fai clic su Codice.
Per autenticarti con il tuo progetto, inserisci il seguente codice:
# 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
Sostituisci PROJECT_ID con l'ID progetto.
Fai clic su Esegui cella.
Quando richiesto, fai clic su Consenti per concedere a Colab l'accesso alle tue credenziali, se accetti.
Nella pagina Accedi con Google, scegli il tuo account.
Nella pagina Accedi al codice del notebook creato da terze parti, fai clic su Continua.
In Seleziona a cosa può accedere il codice del notebook creato da terze parti, fai clic su Seleziona tutto e poi su Continua.
Dopo aver completato il flusso di autorizzazione, non viene generato alcun output nel notebook di Colab. Il segno di spunta accanto alla cella indica che il codice è stato eseguito correttamente.
(Facoltativo) Autenticati con Google Maps
Se utilizzi Google Maps Platform come fornitore di mappe per le mappe base, devi fornire una chiave API Google Maps Platform. Il notebook recupera la chiave dai tuoi secret di Colab.
Questo passaggio è necessario solo se utilizzi l'API di Google Maps. Se non esegui l'autenticazione con Google Maps Platform, pydeck utilizza la mappa carto.
Ottieni la chiave API di Google Maps seguendo le istruzioni riportate nella pagina Utilizza le chiavi API della documentazione di Google Maps.
Passa al notebook di Colab e fai clic su Secret.
Fai clic su Aggiungi nuovo secret.
In Nome, inserisci
GMP_API_KEY.In Valore, inserisci il valore della chiave API di Google Maps generato in precedenza.
Chiudi il riquadro Secret.
Per inserire una cella di codice, fai clic su Codice.
Per eseguire l'autenticazione con l'API di Google Maps, inserisci il seguente codice:
# 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
Quando richiesto, fai clic su Concedi l'accesso per concedere al notebook l'accesso alla tua chiave, se accetti.
Fai clic su Esegui cella.
Dopo aver completato il flusso di autorizzazione, non viene generato alcun output nel notebook di Colab. Il segno di spunta accanto alla cella indica che il codice è stato eseguito correttamente.
Installa i pacchetti Python e importa le librerie di data science
Oltre ai moduli Python colabtools (google.colab), questo tutorial utilizza diversi altri pacchetti Python e librerie di data science.
In questa sezione, installi i pacchetti pydeck e h3. pydeck
fornisce il rendering spaziale su larga scala in Python, basato su deck.gl.
h3-py fornisce il sistema di indicizzazione geospaziale gerarchica esagonale H3 di Uber in Python.
Poi, importa le librerie h3 e pydeck e le seguenti librerie geospaziali Python:
geopandasper estendere i tipi di dati utilizzati dapandasper consentire operazioni spaziali sui tipi geometrici.shapelyper la manipolazione e l'analisi di singoli oggetti geometrici planari.brancaper generare mappe di colori HTML e JavaScript.geemap.deckper la visualizzazione conpydeckeearthengine-api.
Dopo aver importato le librerie, attiva le tabelle interattive per i DataFrame pandas in Colab.
Installa i pacchetti pydeck e h3
Per inserire una cella di codice, fai clic su Codice.
Per installare i pacchetti
pydeckeh3, inserisci il seguente codice:# Install pydeck and h3. !pip install pydeck>=0.9 h3>=4.2
Fai clic su Esegui cella.
Al termine dell'installazione, non viene generato alcun output nel notebook di Colab. Il segno di spunta accanto alla cella indica che il codice è stato eseguito correttamente.
Importa le librerie Python
Per inserire una cella di codice, fai clic su Codice.
Per importare le librerie Python, inserisci il seguente codice:
# Import data science libraries. import branca import geemap.deck as gmdk import h3 import pydeck as pdk import geopandas as gpd import shapely
Fai clic su Esegui cella.
Dopo aver eseguito il codice, non viene generato alcun output nel notebook di Colab. Il segno di spunta accanto alla cella indica che il codice è stato eseguito correttamente.
Abilita le tabelle interattive per i DataFrame pandas
Per inserire una cella di codice, fai clic su Codice.
Per abilitare i DataFrame
pandas, inserisci il seguente codice:# Enable displaying pandas data frames as interactive tables by default. from google.colab import data_table data_table.enable_dataframe_formatter()
Fai clic su Esegui cella.
Dopo aver eseguito il codice, non viene generato alcun output nel notebook di Colab. Il segno di spunta accanto alla cella indica che il codice è stato eseguito correttamente.
Crea una routine condivisa
In questa sezione, creerai una routine condivisa che esegue il rendering dei livelli su una mappa base.
Per inserire una cella di codice, fai clic su Codice.
Per creare una routine condivisa per il rendering dei livelli su una mappa, inserisci il seguente codice:
# 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
Fai clic su Esegui cella.
Dopo aver eseguito il codice, non viene generato alcun output nel notebook di Colab. Il segno di spunta accanto alla cella indica che il codice è stato eseguito correttamente.
Crea un grafico a dispersione
In questa sezione, creerai un grafico a dispersione di tutte le stazioni di bike sharing nel set di dati pubblico San Francisco Ford GoBike Share recuperando i dati dalla tabella bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info. Il grafico a dispersione viene creato utilizzando un layer e un scatterplot layer del framework deck.gl.
I grafici a dispersione sono utili quando devi esaminare un sottoinsieme di singoli punti (noto anche come controllo a campione).
L'esempio seguente mostra come utilizzare un livello e un livello di grafico a dispersione per eseguire il rendering di singoli punti come cerchi.
Per inserire una cella di codice, fai clic su Codice.
Per eseguire una query sul set di dati pubblico San Francisco Ford GoBike Share, inserisci il seguente codice. Questo codice utilizza la funzione comando magico
%%bigqueryper eseguire la query e restituire i risultati in 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`
Fai clic su Esegui cella.
L'output è simile al seguente:
Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%Per inserire una cella di codice, fai clic su Codice.
Per ottenere un riepilogo del DataFrame, incluse le colonne e i tipi di dati, inserisci il seguente codice:
# Get a summary of the DataFrame gdf_sf_bikestations.info()
Fai clic su Esegui cella.
L'output dovrebbe essere simile all'esempio seguente:
<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+ KBPer inserire una cella di codice, fai clic su Codice.
Per visualizzare l'anteprima delle prime cinque righe del DataFrame, inserisci il seguente codice:
# Preview the first five rows gdf_sf_bikestations.head()
Fai clic su Esegui cella.
L'output è simile al seguente:
Per eseguire il rendering dei punti, devi estrarre la longitudine e la latitudine come coordinate x e y dalla colonna station_geom nel set di dati di bike sharing.
Poiché gdf_sf_bikestations è un geopandas.GeoDataFrame, le coordinate sono accessibili direttamente dalla colonna della geometria station_geom. Puoi recuperare la longitudine utilizzando l'attributo .x della colonna e la latitudine utilizzando l'attributo .y. In seguito, puoi memorizzarli in nuove colonne di longitudine e latitudine.
Per inserire una cella di codice, fai clic su Codice.
Per estrarre i valori di longitudine e latitudine dalla colonna
station_geom, inserisci il seguente codice:# 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
Fai clic su Esegui cella.
Dopo aver eseguito il codice, non viene generato alcun output nel notebook di Colab. Il segno di spunta accanto alla cella indica che il codice è stato eseguito correttamente.
Per inserire una cella di codice, fai clic su Codice.
Per eseguire il rendering del grafico a dispersione delle stazioni di bike sharing in base ai valori di longitudine e latitudine estratti in precedenza, inserisci il seguente codice:
# 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)
Fai clic su Esegui cella.
L'output è simile al seguente:
Visualizza i poligoni
L'analisi geospaziale ti consente di analizzare e visualizzare i dati geospaziali in BigQuery utilizzando i tipi di dati GEOGRAPHY e le funzioni geografiche GoogleSQL.
Il tipo di dati GEOGRAPHY nell'analisi geospaziale è una raccolta di punti, stringhe di linee e poligoni, rappresentata come un insieme di punti o un sottoinsieme della superficie della Terra. Un tipo GEOGRAPHY può contenere oggetti come i seguenti:
- Punti
- Righe
- Poligoni
- Multipoligoni
Per un elenco di tutti gli oggetti supportati, consulta la documentazione del tipo GEOGRAPHY.
Se ti vengono forniti dati geospaziali senza conoscere le forme previste, puoi visualizzare i dati per scoprirle. Puoi visualizzare le forme convertendo i dati geografici nel formato GeoJSON. Puoi
quindi visualizzare i dati GeoJSON utilizzando un livello GeoJSON
del framework deck.gl.
In questa sezione eseguirai una query sui dati geografici nel set di dati San Francisco Neighborhoods e poi visualizzerai i poligoni.
Per inserire una cella di codice, fai clic su Codice.
Per eseguire una query sui dati geografici della tabella
bigquery-public-data.san_francisco_neighborhoods.boundariesnel set di dati San Francisco Neighborhoods, inserisci il codice seguente. Questo codice utilizza la funzione comando magico%%bigqueryper eseguire la query e restituire i risultati in 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`
Fai clic su Esegui cella.
L'output è simile al seguente:
Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%Per inserire una cella di codice, fai clic su Codice.
Per ottenere un riepilogo del DataFrame, inserisci il seguente codice:
# Get a summary of the DataFrame gdf_sanfrancisco_neighborhoods.info()
Fai clic su Esegui cella.
I risultati dovrebbero essere simili ai seguenti:
<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+ KBPer visualizzare l'anteprima della prima riga del DataFrame, inserisci il seguente codice:
# Preview the first row gdf_sanfrancisco_neighborhoods.head(1)
Fai clic su Esegui cella.
L'output è simile al seguente:
Nei risultati, nota che i dati sono un poligono.
Per inserire una cella di codice, fai clic su Codice.
Per visualizzare i poligoni, inserisci il seguente codice.
pydeckviene utilizzato per convertire ogni istanza di oggettoshapelynella colonna della geometria nel 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)
Fai clic su Esegui cella.
L'output è simile al seguente:
Crea una mappa coropletica
Se stai esplorando dati con poligoni difficili da convertire nel formato GeoJSON, puoi utilizzare un livello poligono del framework deck.gl. Un livello poligono può elaborare dati di input di tipi specifici, ad esempio un array di punti.
In questa sezione utilizzerai un livello di poligoni per eseguire il rendering di un array di punti e utilizzerai i risultati per eseguire il rendering di una mappa coropletica. La mappa coropletica mostra la densità delle stazioni di bike sharing per quartiere unendo i dati del set di dati San Francisco Neighborhoods con il set di dati San Francisco Ford GoBike Share.
Per inserire una cella di codice, fai clic su Codice.
Per aggregare e conteggiare il numero di stazioni per quartiere e creare una colonna
polygoncontenente un array di punti, inserisci il seguente codice:# 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))
Fai clic su Esegui cella.
Dopo aver eseguito il codice, non viene generato alcun output nel notebook di Colab. Il segno di spunta accanto alla cella indica che il codice è stato eseguito correttamente.
Per inserire una cella di codice, fai clic su Codice.
Per aggiungere una colonna
fill_colorper ciascuno dei poligoni, inserisci il seguente codice:# 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
Fai clic su Esegui cella.
Dopo aver eseguito il codice, non viene generato alcun output nel notebook di Colab. Il segno di spunta accanto alla cella indica che il codice è stato eseguito correttamente.
Per inserire una cella di codice, fai clic su Codice.
Per eseguire il rendering del livello poligono, inserisci il seguente codice:
# 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)
Fai clic su Esegui cella.
L'output è simile al seguente:
Crea una mappa termica
I coropleti sono utili quando hai confini significativi e noti. Se i dati non hanno confini significativi noti, puoi utilizzare un livello mappa termica per visualizzarne la densità continua.
Nell'esempio seguente, esegui una query sui dati della tabella bigquery-public-data.san_francisco_sfpd_incidents.sfpd_incidents nel set di dati dei report del dipartimento di polizia di San Francisco (SFPD). I dati vengono utilizzati per visualizzare la distribuzione degli incidenti nel 2015.
Per le mappe di calore, è consigliabile quantizzare e aggregare i dati prima del rendering. In questo esempio, i dati vengono quantizzati e aggregati utilizzando l'indicizzazione spaziale H3 di Carto.
La mappa termica viene creata utilizzando un livello mappa termica del framework deck.gl.
In questo esempio, la quantizzazione viene eseguita utilizzando la libreria Python h3 per aggregare i punti degli incidenti in esagoni. La funzione h3.latlng_to_cell viene utilizzata per mappare la posizione dell'incidente (latitudine e longitudine) a un indice di cella H3. Una risoluzione H3 di nove fornisce esagoni aggregati sufficienti per la mappa termica.
La funzione h3.cell_to_latlng viene utilizzata per determinare il centro di ogni esagono.
Per inserire una cella di codice, fai clic su Codice.
Per eseguire una query sui dati nel set di dati dei report del dipartimento di polizia di San Francisco (SFPD), inserisci il seguente codice. Questo codice utilizza la funzione magica
%%bigqueryper eseguire la query e restituire i risultati in 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
Fai clic su Esegui cella.
L'output è simile al seguente:
Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%Per inserire una cella di codice, fai clic su Codice.
Per calcolare la cella per la latitudine e la longitudine di ogni incidente, aggregare gli incidenti per ogni cella, creare un DataFrame
geopandase aggiungere il centro di ogni esagono per il livello della mappa termica, inserisci il seguente codice:# 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()
Fai clic su Esegui cella.
L'output è simile al seguente:
<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+ KBPer inserire una cella di codice, fai clic su Codice.
Per visualizzare l'anteprima delle prime cinque righe del DataFrame, inserisci il seguente codice:
# Preview the first five rows. gdf_incidents_x_cell.head()
Fai clic su Esegui cella.
L'output è simile al seguente:
Per inserire una cella di codice, fai clic su Codice.
Per convertire i dati in un formato JSON che può essere utilizzato da
HeatmapLayer, inserisci il seguente codice:# 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()
Fai clic su Esegui cella.
Dopo aver eseguito il codice, non viene generato alcun output nel notebook di Colab. Il segno di spunta accanto alla cella indica che il codice è stato eseguito correttamente.
Per inserire una cella di codice, fai clic su Codice.
Per eseguire il rendering della mappa termica, inserisci il seguente codice:
# 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)
Fai clic su Esegui cella.
L'output è simile al seguente:
Esegui la pulizia
Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
Console
- Nella console Google Cloud , vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
gcloud
Elimina un progetto Google Cloud :
gcloud projects delete PROJECT_ID
Elimina la chiave API di Google Maps e il notebook
Dopo aver eliminato il progetto Google Cloud , se hai utilizzato l'API di Google Maps, elimina la chiave API di Google Maps dai secret di Colab e, se vuoi, elimina il notebook.
In Colab, fai clic su Secret.
Alla fine della riga
GMP_API_KEY, fai clic su Elimina.(Facoltativo) Per eliminare il notebook, fai clic su File > Sposta nel cestino.
Passaggi successivi
- Per saperne di più sull'analisi geospaziale in BigQuery, consulta Introduzione all'analisi geospaziale in BigQuery.
- Per un'introduzione alla visualizzazione dei dati geospaziali in BigQuery, consulta Visualizza i dati geospaziali.
- Per scoprire di più su
pydecke altri tipi di graficideck.gl, puoi trovare esempi nella galleriapydeck, nel catalogo dei livellideck.gle nell'origine GitHubdeck.gl. - Per saperne di più sull'utilizzo dei dati geospaziali nei frame di dati, consulta la pagina Introduzione a GeoPandas e la guida dell'utente di GeoPandas.
- Per saperne di più sulla manipolazione degli oggetti geometrici, consulta il manuale dell'utente di Shapely.
- Per scoprire come utilizzare i dati di Google Earth Engine in BigQuery, consulta Esportazione in BigQuery nella documentazione di Google Earth Engine.