La visualisation des données d'analyse géospatiale dans un notebook Colab vous permet d'explorer vos données de localisation à l'aide d'outils de data science Python que vous connaissez déjà. Dans ce tutoriel, vous allez interroger les ensembles de données publics suivants directement depuis votre notebook pour découvrir des schémas géographiques en affichant des graphiques à nuage de points, des polygones, des cartes choroplèthes et des cartes de densité interactifs :
- San Francisco Ford GoBike Share
- Quartiers de San Francisco
- Rapports du San Francisco Police Department (SFPD)
Pour en savoir plus sur l'accès à ces ensembles de données publics, consultez Accéder aux ensembles de données publics dans la console Google Cloud .
Objectifs
- Configurez l'authentification avec Google Cloud et, éventuellement, Google Maps.
- Interroger les données dans BigQuery et télécharger les résultats dans Colab
- Utiliser des outils de data science Python pour effectuer des transformations et des analyses
- Créez des visualisations, y compris des graphiques à nuage de points, des polygones, des cartes choroplèthes et des cartes de densité.
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, supprimez les ressources que vous avez créées pour éviter que des frais vous soient facturés. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
- Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
-
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.- 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 devez disposer du rôle suivant au niveau du projet pour exécuter des jobs de requête.
Assurez-vous de disposer des rôles suivants sur le projet :
- Utilisateur BigQuery (
roles/bigquery.user)
Vérifier les rôles
-
Dans la console Google Cloud , accédez à la page IAM.
Accéder à IAM - Sélectionnez le projet.
-
Dans la colonne Compte principal, recherchez toutes les lignes qui vous identifient ou identifient un groupe dont vous faites partie. Pour savoir à quels groupes vous appartenez, contactez votre administrateur.
- Pour toutes les lignes qui vous spécifient ou vous incluent, consultez la colonne Rôle pour vous assurer que la liste inclut les rôles requis.
Attribuer les rôles
-
Dans la console Google Cloud , accédez à la page IAM.
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.
- Cliquez sur Sélectionner un rôle, puis recherchez le rôle.
- Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez tous les rôles supplémentaires.
- Cliquez sur Enregistrer.
Pour en savoir plus sur les rôles dans BigQuery, consultez 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.ipynbet 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 Maps JavaScript. Pour utiliser ces ressources, vous devez authentifier l'environnement d'exécution Colab avec Google Cloud et l'API Google Maps.
S'authentifier avec Google Cloud
Pour insérer une cellule de code, cliquez sur Code.
Pour vous authentifier auprès de 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) # Set GMP_API_KEY to none GMP_API_KEY = None
Remplacez PROJECT_ID par l'ID du projet.
Cliquez sur Exécuter la cellule.
Lorsque vous y êtes invité, cliquez sur Autoriser pour permettre à Colab d'accéder à vos identifiants, si vous l'acceptez.
Sur la page Se connecter avec Google, sélectionnez votre compte.
Sur la page Se connecter au code du notebook créé par un tiers, cliquez sur Continuer.
Sur la page Sélectionner les éléments auxquels le code du 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 s'est exécuté correctement.
Facultatif : S'authentifier avec Google Maps
Si vous utilisez Google Maps Platform comme fournisseur de cartes de base, vous devez fournir une clé API Google Maps Platform. Le notebook récupère la clé à partir de vos secrets Colab.
Cette étape n'est nécessaire que si vous utilisez l'API Google Maps. Si vous ne vous authentifiez pas auprès de Google Maps Platform, pydeck utilise la carte carto à la place.
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 le champ Valeur, saisissez la valeur de la clé API Google 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 auprès de lAPI Google 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 s'est exécuté correctement.
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 data science.
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 hexagonal H3 d'Uber en Python.
Vous importez ensuite les bibliothèques h3 et pydeck, ainsi que les bibliothèques géospatiales Python suivantes :
geopandaspour étendre les types de données utilisés parpandasafin d'autoriser les opérations spatiales sur les types géométriques.shapelypour la manipulation et l'analyse d'objets géométriques plans individuels.brancapour générer des cartes de couleurs HTML et JavaScript.geemap.deckpour la visualisation avecpydecketearthengine-api.
Après avoir importé les bibliothèques, vous activez les tableaux interactifs pour les DataFrames pandas dans Colab.
Installez les packages pydeck et h3.
Pour insérer une cellule de code, cliquez sur Code.
Pour installer les packages
pydecketh3, 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, aucun résultat n'est généré dans votre notebook Colab. La coche à côté de la cellule indique que le code s'est exécuté correctement.
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é, aucun résultat n'est généré dans votre notebook Colab. La coche à côté de la cellule indique que le code s'est exécuté correctement.
Activer les tableaux interactifs 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é, aucun résultat n'est généré dans votre notebook Colab. La coche à côté de la cellule indique que le code s'est exécuté correctement.
Créer une routine partagée
Dans cette section, vous allez créer une routine partagée qui affiche des calques sur une carte de base.
Pour insérer une cellule de code, cliquez sur Code.
Pour créer une routine partagée permettant d'afficher 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é, aucun résultat n'est généré 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 à nuage de points de toutes les stations de vélos en libre-service de l'ensemble de données public San Francisco Ford GoBike Share en récupérant les données de la table bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info. Le graphique à nuage de points est créé à l'aide d'une couche et d'une couche de graphique à nuage de points du framework deck.gl.
Les graphiques à 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 un calque et un calque de nuage de points pour afficher des points individuels sous forme de cercles.
Pour insérer une cellule de code, cliquez sur Code.
Pour interroger l'ensemble de données public San Francisco Ford GoBike Share, saisissez le code suivant. Ce code utilise la fonction magique
%%bigquerypour 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 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`
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 obtenir un résumé du DataFrame, y compris les colonnes et les types de données, saisissez le code suivant :
# Get a summary of the DataFrame 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+ KBPour 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 afficher les points, vous devez extraire la longitude et la latitude en tant que coordonnées x et y de la colonne station_geom de l'ensemble de données sur les vélos en libre-service.
Étant donné que gdf_sf_bikestations est un geopandas.GeoDataFrame, les coordonnées sont accessibles directement à partir de sa colonne de géométrie station_geom. Vous pouvez récupérer la longitude à l'aide de l'attribut .x de la colonne et la latitude à l'aide de son attribut .y. Vous pouvez ensuite les stocker dans de nouvelles colonnes de longitude et de latitude.
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é, aucun résultat n'est généré 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 à 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 en utilisant des types de données GEOGRAPHY et des 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 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 compatibles, consultez la documentation sur le type GEOGRAPHY.
Si vous disposez de données géospatiales sans connaître les formes attendues, vous pouvez visualiser les données pour découvrir les formes. Vous pouvez visualiser les 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 "San Francisco Neighborhoods", 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.boundariesdans l'ensemble de données "San Francisco Neighborhoods", saisissez le code suivant. Ce code utilise la fonction magique%%bigquerypour 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 gdf_sanfrancisco_neighborhoods --project {GCP_PROJECT_ID} --use_geodataframe geometry 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 obtenir un résumé du DataFrame, saisissez le code suivant :
# Get a summary of the DataFrame 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+ KBPour 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, notez 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.
pydeckpermet de convertir chaque instance d'objetshapelyde 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 un calque de polygones du framework deck.gl à la place. Une couche de polygones peut traiter des données d'entrée de types spécifiques, comme un tableau de points.
Dans cette section, vous allez utiliser une couche de polygones pour afficher un tableau de points, puis vous utiliserez 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 "San Francisco Neighborhoods" à 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 stations par quartier, et créer une colonne
polygoncontenant 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é, aucun résultat n'est généré 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_colorpour 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é, aucun résultat n'est généré 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 choroplèthes sont utiles lorsque vous disposez de limites significatives et connues. Si vous disposez de données sans limites significatives connues, vous pouvez utiliser un calque de carte de densité 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 dans l'ensemble de données des rapports du service de police de San Francisco (SFPD). Les données sont utilisées pour visualiser la répartition des incidents en 2015.
Pour les cartes de densité, il est recommandé de quantifier et d'agréger les données avant l'affichage. Dans cet exemple, les données sont quantifiées et agrégées à l'aide de l'indexation spatiale Carto H3.
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 regrouper les points d'incident en hexagones. La fonction h3.latlng_to_cell permet de mapper la position de l'incident (latitude et longitude) à un index de cellule H3. Une résolution H3 de neuf fournit suffisamment d'hexagones agrégés pour la carte de densité.
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 des rapports du service de police de San Francisco (SFPD), saisissez le code suivant. Ce code utilise la fonction magique
%%bigquerypour 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 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
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 calculer la cellule pour la latitude et la longitude de chaque incident, agréger les incidents pour chaque cellule, créer un DataFrame
geopandaset ajouter le centre de chaque hexagone pour la couche de carte de densité, saisissez le code suivant :# 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()
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+ KBPour 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 dans un 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é, aucun résultat n'est généré 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 de densité, 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
- Dans la console Google Cloud , accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
gcloud
Supprimer un projet Google Cloud :
gcloud projects delete PROJECT_ID
Supprimer votre clé API Google Maps et votre notebook
Après avoir supprimé le projet Google Cloud , si vous avez utilisé l'API Google Maps, supprimez la clé API Google Maps de vos secrets Colab, puis supprimez éventuellement le notebook.
Dans Colab, cliquez sur Secrets.
À la fin de la ligne
GMP_API_KEY, cliquez sur Supprimer.Facultatif : Pour supprimer le notebook, cliquez sur Fichier > Placer dans la corbeille.
Étapes suivantes
- Pour en savoir plus sur les analyses géospatiales dans BigQuery, consultez 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
pydecket les autres types de graphiquesdeck.gl, vous trouverez des exemples dans la galeriepydeck, le catalogue de calquesdeck.glet la source GitHubdeck.gl. - Pour en savoir plus sur l'utilisation des données géospatiales dans les dataframes, 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 Exporter vers BigQuery dans la documentation Google Earth Engine.