Ce tutoriel utilise les ensembles de données publics BigQuery suivants:
- San Francisco Ford GoBike Share
- Quartiers de San Francisco
- Rapports du San Francisco Police Department (SFPD)
Pour savoir comment accéder à ces ensembles de données publics, consultez Accéder aux ensembles de données publics dans la console Google Cloud .
Vous utilisez les ensembles de données publics pour créer les visualisations suivantes:
- Graphique en nuage de points de toutes les stations de vélos en libre-service du jeu de données Ford GoBike Share
- Polygones dans l'ensemble de données "Quartiers de San Francisco"
- Carte choroplèthe du nombre de stations de vélos en libre-service par quartier
- Carte thermique des incidents du jeu de données des rapports du service de police de San Francisco
Objectifs
- Configurez l'authentification avec Google Cloud et, éventuellement, Google Maps.
- Interroger des données dans BigQuery et télécharger les résultats dans Colab
- Utilisez des outils de science des données Python pour effectuer des transformations et des analyses.
- Créez des visualisations, y compris des graphiques à nuages de points, des polygones, des cartes choroplèthes et des cartes thermiques.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and Google Maps JavaScript APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and Google Maps JavaScript APIs.
- Assurez-vous de disposer des autorisations nécessaires pour effectuer les tâches décrites dans ce document.
Rôles requis
Si vous créez un projet, vous en êtes le propriétaire et vous disposez de toutes les autorisations IAM requises pour suivre ce tutoriel.
Si vous utilisez un projet existant, vous avez besoin du rôle au niveau du projet suivant pour exécuter des tâches de requête.
Make sure that you have the following role or roles on the project:
- BigQuery User (
roles/bigquery.user
)
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
Accéder à IAM - Sélectionnez le projet.
- Cliquez sur Accorder l'accès.
-
Dans le champ Nouveaux comptes principaux, saisissez votre identifiant utilisateur. Il s'agit généralement de l'adresse e-mail d'un compte Google.
- Dans la liste Sélectionner un rôle, sélectionnez un rôle.
- Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez chaque rôle supplémentaire.
- Cliquez sur Enregistrer.
Pour en savoir plus sur les rôles dans BigQuery, consultez la section Rôles IAM prédéfinis.
Créer un notebook Colab
Ce tutoriel crée un notebook Colab pour visualiser les données d'analyse géospatiale. Vous pouvez ouvrir une version prédéfinie du notebook dans Colab, Colab Enterprise ou BigQuery Studio en cliquant sur les liens en haut de la version GitHub du tutoriel (Visualisation géospatiale BigQuery dans Colab).
Ouvrez Colab.
Dans la boîte de dialogue Ouvrir un notebook, cliquez sur Nouveau notebook.
Cliquez sur
Untitled0.ipynb
et remplacez le nom du notebook parbigquery-geo.ipynb
.Sélectionnez Fichier > Enregistrer.
S'authentifier avec Google Cloud et Google Maps
Ce tutoriel interroge des ensembles de données BigQuery et utilise l'API JavaScript de Google Maps. Pour utiliser ces ressources, vous devez authentifier l'environnement d'exécution Colab avec Google Cloud et l'API Maps.
S'authentifier avec Google Cloud
Pour insérer une cellule de code, cliquez sur
Code.Pour vous authentifier avec votre projet, saisissez le code suivant:
# 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)
Remplacez PROJECT_ID par l'ID du projet.
Cliquez sur
Exécuter la cellule.Si vous y êtes invité, cliquez sur Autoriser pour autoriser Colab à accéder à vos identifiants, si vous êtes d'accord.
Sur la page Se connecter avec Google, sélectionnez votre compte.
Sur la page Se connecter au code de notebook créé par un tiers, cliquez sur Continuer.
Sur la page Sélectionner les éléments auxquels le code de notebook créé par un tiers peut accéder, cliquez sur Tout sélectionner, puis sur Continuer.
Une fois le flux d'autorisation terminé, aucune sortie n'est générée dans votre notebook Colab. La coche à côté de la cellule indique que le code a bien été exécuté.
Facultatif: Authentifier avec Google Maps
Si vous utilisez Google Maps Platform comme fournisseur de cartes pour les cartes de base, vous devez fournir une clé API Google Maps Platform. Le notebook récupère la clé dans vos secrets Colab.
Cette étape n'est nécessaire que si vous utilisez l'API Maps. Si vous ne vous authentifiez pas avec Google Maps Platform, pydeck
utilise plutôt la carte carto
.
Obtenez votre clé API Google Maps en suivant les instructions de la page Utiliser des clés API de la documentation Google Maps.
Accédez à votre notebook Colab, puis cliquez sur
Secrets.Cliquez sur Ajouter un secret.
Dans le champ Nom, saisissez
GMP_API_KEY
.Dans Valeur, saisissez la valeur de la clé API Maps que vous avez générée précédemment.
Fermez le panneau Secrets.
Pour insérer une cellule de code, cliquez sur
Code.Pour vous authentifier avec l'API Maps, saisissez le code suivant:
# 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
Lorsque vous y êtes invité, cliquez sur Accorder l'accès pour autoriser le notebook à accéder à votre clé, si vous êtes d'accord.
Cliquez sur
Exécuter la cellule.Une fois le flux d'autorisation terminé, aucune sortie n'est générée dans votre notebook Colab. La coche à côté de la cellule indique que le code a bien été exécuté.
Installer des packages Python et importer des bibliothèques de data science
En plus des modules Python colabtools
(google.colab
), ce tutoriel utilise plusieurs autres packages Python et bibliothèques de science des données.
Dans cette section, vous allez installer les packages pydeck
et h3
. pydeck
fournit un rendu spatial à grande échelle en Python, optimisé par deck.gl
.
h3-py
fournit le système d'indexation géospatiale hiérarchique hexagonale H3 d'Uber en Python.
Importez ensuite les bibliothèques h3
et pydeck
, ainsi que les bibliothèques géospatiales Python suivantes:
geopandas
pour étendre les types de données utilisés parpandas
afin d'autoriser les opérations spatiales sur les types géométriques.shapely
pour la manipulation et l'analyse d'objets géométriques planaires individuels.branca
pour générer des cartes de couleurs HTML et JavaScript.geemap.deck
pour la visualisation avecpydeck
etearthengine-api
.
Après avoir importé les bibliothèques, vous activez les tables interactives pour les DataFrames pandas
dans Colab.
Installer les packages pydeck
et h3
Pour insérer une cellule de code, cliquez sur
Code.Pour installer les packages
pydeck
eth3
, saisissez le code suivant:# Install pydeck and h3. !pip install pydeck>=0.9 h3>=4.2
Cliquez sur
Exécuter la cellule.Une fois l'installation terminée, aucune sortie n'est générée dans votre notebook Colab. La coche à côté de la cellule indique que le code a bien été exécuté.
Importer les bibliothèques Python
Pour insérer une cellule de code, cliquez sur
Code.Pour importer les bibliothèques Python, saisissez le code suivant:
# Import data science libraries. import branca import geemap.deck as gmdk import h3 import pydeck as pdk import geopandas as gpd import shapely
Cliquez sur
Exécuter la cellule.Une fois le code exécuté, aucune sortie n'est générée dans votre notebook Colab. La coche à côté de la cellule indique que le code s'est exécuté correctement.
Activer les tables interactives pour les DataFrames pandas
Pour insérer une cellule de code, cliquez sur
Code.Pour activer les DataFrames
pandas
, saisissez le code suivant:# Enable displaying pandas data frames as interactive tables by default. from google.colab import data_table data_table.enable_dataframe_formatter()
Cliquez sur
Exécuter la cellule.Une fois le code exécuté, aucune sortie n'est générée dans votre notebook Colab. La coche à côté de la cellule indique que le code s'est exécuté correctement.
Créer des routines partagées
Dans cette section, vous allez créer deux routines partagées : une routine partagée qui affiche des calques sur une carte de base et une routine partagée qui convertit un DataFrame pandas
en DataFrame geopandas
.
Pour insérer une cellule de code, cliquez sur
Code.Pour créer une routine partagée pour l'affichage des calques sur une carte, saisissez le code suivant:
# 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
Cliquez sur
Exécuter la cellule.Une fois le code exécuté, aucune sortie n'est générée dans votre notebook Colab. La coche à côté de la cellule indique que le code s'est exécuté correctement.
Pour insérer une cellule de code, cliquez sur
Code.Pour créer une routine partagée qui convertit un DataFrame
pandas
en DataFramegeopandas
, saisissez le code suivant:# Shared routine for converting a pandas dataframe to a GeoPandas dataframe. def pandas_to_geopandas(df, geometry_column='geometry'): # Use shapely library to parse WKT strings into shapely Geometry based # objects df[geometry_column] = df[geometry_column].dropna().apply(shapely.from_wkt) # Convert to a geopandas Dataframe return gpd.GeoDataFrame(df, geometry=geometry_column, crs='EPSG:4326')
Cliquez sur
Exécuter la cellule.Une fois le code exécuté, aucune sortie n'est générée dans votre notebook Colab. La coche à côté de la cellule indique que le code s'est exécuté correctement.
Créer un graphique à nuage de points
Dans cette section, vous allez créer un graphique en nuage de points de toutes les stations de vélos en libre-service de l'ensemble de données public Ford GoBike Share de San Francisco en récupérant les données de la table bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info
. Le graphique en nuage de points est créé à l'aide d'une couche et d'une couche de nuage de points du framework deck.gl
.
Les graphiques en nuage de points sont utiles lorsque vous devez examiner un sous-ensemble de points individuels (également appelé vérification ponctuelle).
L'exemple suivant montre comment utiliser une couche et une couche de nuage de points pour afficher des points individuels sous forme de cercles. Pour afficher les points, vous devez extraire la longitude et la latitude sous la forme de coordonnées x et y à partir de la colonne station_geom
de l'ensemble de données sur le vélo en libre-service.
Les coordonnées sont extraites en convertissant les données en DataFrame geopandas
, qui convertit chaque élément de la colonne station_geom
en objet shapely
. shapely
fournit des méthodes et des propriétés Python qui vous permettent d'extraire des composants tels que x et y.
Pour insérer une cellule de code, cliquez sur
Code.Pour interroger l'ensemble de données public Ford GoBike Share de San Francisco, saisissez le code suivant. Ce code utilise la fonction magique
%%bigquery
pour exécuter la requête et renvoyer les résultats dans 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 df_sanfrancisco_bike_stations --project {GCP_PROJECT_ID} SELECT station_id, name, short_name, station_geom FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info`
Cliquez sur
Exécuter la cellule.Le résultat ressemble à ce qui suit :
Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%
Pour insérer une cellule de code, cliquez sur
Code.Pour convertir les données en DataFrame
geopandas
, saisissez le code suivant:# Convert the data to a geopandas.GeoDataFrame. gdf_sf_bikestations = pandas_to_geopandas(df_sanfrancisco_bike_stations, geometry_column='station_geom') gdf_sf_bikestations.info()
Cliquez sur
Exécuter la cellule.Le résultat doit se présenter sous la forme suivante :
<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+ KB
Pour insérer une cellule de code, cliquez sur
Code.Pour prévisualiser les cinq premières lignes du DataFrame, saisissez le code suivant:
# Preview the first five rows gdf_sf_bikestations.head()
Cliquez sur
Exécuter la cellule.Le résultat ressemble à ce qui suit :
Pour insérer une cellule de code, cliquez sur
Code.Pour extraire les valeurs de longitude et de latitude de la colonne
station_geom
, saisissez le code suivant:# 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
Cliquez sur
Exécuter la cellule.Une fois le code exécuté, aucune sortie n'est générée dans votre notebook Colab. La coche à côté de la cellule indique que le code s'est exécuté correctement.
Pour insérer une cellule de code, cliquez sur
Code.Pour afficher le graphique en nuage de points des stations de vélos en libre-service en fonction des valeurs de longitude et de latitude que vous avez extraites précédemment, saisissez le code suivant:
# 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)
Cliquez sur
Exécuter la cellule.Le résultat ressemble à ce qui suit :
Visualiser des polygones
Les analyses géospatiales vous permettent d'analyser et de visualiser des données géospatiales dans BigQuery à l'aide de types de données GEOGRAPHY
et de fonctions de géographie GoogleSQL.
Le type de données GEOGRAPHY
dans l'analyse géospatiale est un ensemble de points, de polylignes et de polygones, représenté sous la forme d'un jeu de points, ou d'un sous-ensemble de la surface de la Terre. Un type GEOGRAPHY
peut contenir des objets tels que les suivants:
- Points
- Lignes
- Polygones
- Multipolygones
Pour obtenir la liste de tous les objets acceptés, consultez la documentation sur le type GEOGRAPHY
.
Si vous disposez de données géospatiales sans connaître les formes attendues, vous pouvez les visualiser pour les découvrir. Vous pouvez visualiser des formes en convertissant les données géographiques au format GeoJSON
. Vous pouvez ensuite visualiser les données GeoJSON
à l'aide d'une couche GeoJSON
du framework deck.gl
.
Dans cette section, vous allez interroger les données géographiques de l'ensemble de données "Quartiers de San Francisco", puis visualiser les polygones.
Pour insérer une cellule de code, cliquez sur
Code.Pour interroger les données géographiques de la table
bigquery-public-data.san_francisco_neighborhoods.boundaries
dans l'ensemble de données "Quartiers de San Francisco", saisissez le code suivant. Ce code utilise la fonction magique%%bigquery
pour exécuter la requête et renvoyer les résultats dans un DataFrame:# Query the neighborhood name and geometry from the San Francisco # neighborhoods dataset. %%bigquery df_sanfrancisco_neighborhoods --project {GCP_PROJECT_ID} SELECT neighborhood, neighborhood_geom AS geometry FROM `bigquery-public-data.san_francisco_neighborhoods.boundaries`
Cliquez sur
Exécuter la cellule.Le résultat ressemble à ce qui suit :
Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%
Pour insérer une cellule de code, cliquez sur
Code.Pour convertir les résultats au format
geopandas
, saisissez le code suivant:# Convert the query results to geopandas format. gdf_sanfrancisco_neighborhoods = pandas_to_geopandas(df_sanfrancisco_neighborhoods) gdf_sanfrancisco_neighborhoods.info()
Cliquez sur
Exécuter la cellule.Les résultats doivent se présenter sous la forme suivante :
<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+ KB
Pour prévisualiser la première ligne du DataFrame, saisissez le code suivant:
# Preview the first row gdf_sanfrancisco_neighborhoods.head(1)
Cliquez sur
Exécuter la cellule.Le résultat ressemble à ce qui suit :
Dans les résultats, vous pouvez voir que les données sont un polygone.
Pour insérer une cellule de code, cliquez sur
Code.Pour visualiser les polygones, saisissez le code suivant.
pydeck
permet de convertir chaque instance d'objetshapely
de la colonne de géométrie au formatGeoJSON
:# 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)
Cliquez sur
Exécuter la cellule.Le résultat ressemble à ce qui suit :
Créer une carte choroplèthe
Si vous explorez des données avec des polygones difficiles à convertir au format GeoJSON
, vous pouvez utiliser une couche de polygones du framework deck.gl
à la place. Un calque de polygone peut traiter des données d'entrée de types spécifiques, tels qu'un tableau de points.
Dans cette section, vous allez utiliser une couche de polygones pour afficher un tableau de points et utiliser les résultats pour afficher une carte choroplèthe. La carte choroplèthe montre la densité des stations de vélos en libre-service par quartier en joignant les données de l'ensemble de données "Quartiers de San Francisco" à celles de l'ensemble de données "San Francisco Ford GoBike Share".
Pour insérer une cellule de code, cliquez sur
Code.Pour agréger et compter le nombre de bornes par quartier, et créer une colonne
polygon
contenant un tableau de points, saisissez le code suivant:# 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))
Cliquez sur
Exécuter la cellule.Une fois le code exécuté, aucune sortie n'est générée dans votre notebook Colab. La coche à côté de la cellule indique que le code s'est exécuté correctement.
Pour insérer une cellule de code, cliquez sur
Code.Pour ajouter une colonne
fill_color
pour chacun des polygones, saisissez le code suivant:# 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
Cliquez sur
Exécuter la cellule.Une fois le code exécuté, aucune sortie n'est générée dans votre notebook Colab. La coche à côté de la cellule indique que le code s'est exécuté correctement.
Pour insérer une cellule de code, cliquez sur
Code.Pour afficher le calque de polygones, saisissez le code suivant:
# 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)
Cliquez sur
Exécuter la cellule.Le résultat ressemble à ce qui suit :
Créer une carte de densité
Les cartes choroplèthes sont utiles lorsque vous disposez de limites pertinentes connues. Si vous disposez de données sans limites significatives connues, vous pouvez utiliser une couche de carte thermique pour afficher sa densité continue.
Dans l'exemple suivant, vous interrogez les données de la table bigquery-public-data.san_francisco_sfpd_incidents.sfpd_incidents
de l'ensemble de données des rapports du San Francisco Police Department (SFPD). Les données permettent de visualiser la répartition des incidents en 2015.
Pour les cartes de densité, nous vous recommandons de quantifier et d'agréger les données avant le rendu. Dans cet exemple, les données sont quantifiées et agrégées à l'aide de l'indexation spatiale H3 de Carto.
La carte de densité est créée à l'aide d'un calque de carte de densité du framework deck.gl
.
Dans cet exemple, la quantification est effectuée à l'aide de la bibliothèque Python h3
pour agréger les points d'incident en hexagones. La fonction h3.latlng_to_cell
permet de mapper la position de l'incident (latitude et longitude) sur un indice de cellule H3. Une résolution H3 de neuf fournit suffisamment d'hexagones agrégés pour la carte thermique.
La fonction h3.cell_to_latlng
permet de déterminer le centre de chaque hexagone.
Pour insérer une cellule de code, cliquez sur
Code.Pour interroger les données de l'ensemble de données "Rapports du San Francisco Police Department (SFPD)", saisissez le code suivant. Ce code utilise la fonction magique
%%bigquery
pour exécuter la requête et renvoyer les résultats dans un DataFrame:# Query the incident key and location data from the SFPD reports dataset. %%bigquery df_sanfrancisco_incidents_2015 --project {GCP_PROJECT_ID} SELECT unique_key, location FROM ( SELECT unique_key, location, # WKT string EXTRACT(YEAR FROM timestamp) AS year, FROM `bigquery-public-data.san_francisco_sfpd_incidents.sfpd_incidents` incidents ) WHERE year = 2015
Cliquez sur
Exécuter la cellule.Le résultat ressemble à ce qui suit :
Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%
Pour insérer une cellule de code, cliquez sur
Code.Pour convertir les résultats en DataFrame
geopandas
, saisissez le code suivant:# Convert the results into a geopandas.GeoDataFrame. gdf_incidents = pandas_to_geopandas(df_sanfrancisco_incidents_2015, geometry_column='location')
Cliquez sur
Exécuter la cellule.Une fois le code exécuté, aucune sortie n'est générée dans votre notebook Colab. La coche à côté de la cellule indique que le code s'est exécuté correctement.
Pour insérer une cellule de code, cliquez sur
Code.Pour calculer la cellule pour la latitude et la longitude de chaque incident, agréger les incidents pour chaque cellule, créer un DataFrame
geopandas
et ajouter le centre de chaque hexagone pour la couche de carte thermique, saisissez le code suivant:# Compute the cell for each incident's latitude and longitude. H3_RESOLUTION = 9 gdf_incidents['h3_cell'] = df_sanfrancisco_incidents_2015['location'].apply( lambda location: h3.latlng_to_cell(location.y, location.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()
Cliquez sur
Exécuter la cellule.Le résultat ressemble à ce qui suit :
<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+ KB
Pour insérer une cellule de code, cliquez sur
Code.Pour prévisualiser les cinq premières lignes du DataFrame, saisissez le code suivant:
# Preview the first five rows. gdf_incidents_x_cell.head()
Cliquez sur
Exécuter la cellule.Le résultat ressemble à ce qui suit :
Pour insérer une cellule de code, cliquez sur
Code.Pour convertir les données au format JSON pouvant être utilisé par
HeatmapLayer
, saisissez le code suivant:# 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()
Cliquez sur
Exécuter la cellule.Une fois le code exécuté, aucune sortie n'est générée dans votre notebook Colab. La coche à côté de la cellule indique que le code s'est exécuté correctement.
Pour insérer une cellule de code, cliquez sur
Code.Pour afficher la carte thermique, saisissez le code suivant:
# 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)
Cliquez sur
Exécuter la cellule.Le résultat ressemble à ce qui suit :
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer le projet
Console
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
gcloud
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Supprimer votre clé API Google Maps et votre bloc-notes
Après avoir supprimé le projet Google Cloud , si vous avez utilisé l'API Google Maps, supprimez la clé de l'API Google Maps de vos secrets Colab, puis supprimez éventuellement le notebook.
Dans votre Colab, cliquez sur
Secrets.À la fin de la ligne
GMP_API_KEY
, cliquez sur Supprimer.Facultatif: Pour supprimer le notebook, cliquez sur Fichier > Déplacer vers la corbeille.
Étape suivante
- Pour en savoir plus sur les analyses géospatiales dans BigQuery, consultez la page Présentation des analyses géospatiales dans BigQuery.
- Pour découvrir comment visualiser des données géospatiales dans BigQuery, consultez Visualiser des données géospatiales.
- Pour en savoir plus sur
pydeck
et les autres types de graphiquesdeck.gl
, vous trouverez des exemples dans la galeriepydeck
, le catalogue de calquesdeck.gl
et la source GitHubdeck.gl
. - Pour en savoir plus sur l'utilisation des données géospatiales dans des cadres de données, consultez la page de démarrage de GeoPandas et le guide de l'utilisateur de GeoPandas.
- Pour en savoir plus sur la manipulation d'objets géométriques, consultez le manuel utilisateur de Shapely.
- Pour découvrir comment utiliser les données Google Earth Engine dans BigQuery, consultez la section Exporter vers BigQuery dans la documentation Google Earth Engine.