Visualiser des données d'analyse géospatiale à l'aide d'un notebook Colab


Dans ce tutoriel, vous allez visualiser des données d'analyse géospatiale à partir de BigQuery à l'aide d'un notebook Colab.

Ce tutoriel utilise les ensembles de données publics BigQuery suivants:

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. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and Google Maps JavaScript APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and Google Maps JavaScript APIs.

    Enable the APIs

  8. 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:

Check for the roles

  1. In the Google Cloud console, go to the IAM page.

    Go to IAM
  2. Select the project.
  3. 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.

  4. 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

  1. In the Google Cloud console, go to the IAM page.

    Accéder à IAM
  2. Sélectionnez le projet.
  3. Cliquez sur Accorder l'accès.
  4. 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.

  5. Dans la liste Sélectionner un rôle, sélectionnez un rôle.
  6. Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez chaque rôle supplémentaire.
  7. 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).

  1. Ouvrez Colab.

    Ouvrir Colab

  2. Dans la boîte de dialogue Ouvrir un notebook, cliquez sur Nouveau notebook.

  3. Cliquez sur Untitled0.ipynb et remplacez le nom du notebook par bigquery-geo.ipynb.

  4. 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

  1. Pour insérer une cellule de code, cliquez sur  Code.

  2. 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.

  3. Cliquez sur  Exécuter la cellule.

  4. Si vous y êtes invité, cliquez sur Autoriser pour autoriser Colab à accéder à vos identifiants, si vous êtes d'accord.

  5. Sur la page Se connecter avec Google, sélectionnez votre compte.

  6. Sur la page Se connecter au code de notebook créé par un tiers, cliquez sur Continuer.

  7. 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.

  1. Obtenez votre clé API Google Maps en suivant les instructions de la page Utiliser des clés API de la documentation Google Maps.

  2. Accédez à votre notebook Colab, puis cliquez sur  Secrets.

  3. Cliquez sur Ajouter un secret.

  4. Dans le champ Nom, saisissez GMP_API_KEY.

  5. Dans Valeur, saisissez la valeur de la clé API Maps que vous avez générée précédemment.

  6. Fermez le panneau Secrets.

  7. Pour insérer une cellule de code, cliquez sur  Code.

  8. 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
  9. Lorsque vous y êtes invité, cliquez sur Accorder l'accès pour autoriser le notebook à accéder à votre clé, si vous êtes d'accord.

  10. 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 par pandas 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 avec pydeck et earthengine-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

  1. Pour insérer une cellule de code, cliquez sur  Code.

  2. Pour installer les packages pydeck et h3, saisissez le code suivant:

    # Install pydeck and h3.
    !pip install pydeck>=0.9 h3>=4.2
  3. 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

  1. Pour insérer une cellule de code, cliquez sur  Code.

  2. 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
  3. 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

  1. Pour insérer une cellule de code, cliquez sur  Code.

  2. 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()
  3. 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.

  1. Pour insérer une cellule de code, cliquez sur  Code.

  2. 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
  3. 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.

  4. Pour insérer une cellule de code, cliquez sur  Code.

  5. Pour créer une routine partagée qui convertit un DataFrame pandas en DataFrame geopandas, 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')
      
  6. 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.

  1. Pour insérer une cellule de code, cliquez sur  Code.

  2. 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`
  3. Cliquez sur  Exécuter la cellule.

    Le résultat ressemble à ce qui suit :

    Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%

  4. Pour insérer une cellule de code, cliquez sur  Code.

  5. 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()
  6. 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
    
  7. Pour insérer une cellule de code, cliquez sur  Code.

  8. Pour prévisualiser les cinq premières lignes du DataFrame, saisissez le code suivant:

    # Preview the first five rows
    gdf_sf_bikestations.head()
  9. Cliquez sur  Exécuter la cellule.

    Le résultat ressemble à ce qui suit :

    Cinq premières lignes du DataFrame.

  10. Pour insérer une cellule de code, cliquez sur  Code.

  11. 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
  12. 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.

  13. Pour insérer une cellule de code, cliquez sur  Code.

  14. 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)
  15. Cliquez sur  Exécuter la cellule.

    Le résultat ressemble à ce qui suit :

    Graphique en nuage de points des stations de vélos en libre-service.

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.

  1. Pour insérer une cellule de code, cliquez sur  Code.

  2. 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`
  3. Cliquez sur  Exécuter la cellule.

    Le résultat ressemble à ce qui suit :

    Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%

  4. Pour insérer une cellule de code, cliquez sur  Code.

  5. 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()
  6. 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
    
  7. Pour prévisualiser la première ligne du DataFrame, saisissez le code suivant:

    # Preview the first row
    gdf_sanfrancisco_neighborhoods.head(1)
  8. Cliquez sur  Exécuter la cellule.

    Le résultat ressemble à ce qui suit :

    Première ligne du DataFrame.

    Dans les résultats, vous pouvez voir que les données sont un polygone.

  9. Pour insérer une cellule de code, cliquez sur  Code.

  10. Pour visualiser les polygones, saisissez le code suivant. pydeck permet de convertir chaque instance d'objet shapely de la colonne de géométrie au format GeoJSON:

    # 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)
  11. Cliquez sur  Exécuter la cellule.

    Le résultat ressemble à ce qui suit :

    Polygones affichés à partir de l&#39;ensemble de données &quot;Quartiers de San Francisco&quot;.

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".

  1. Pour insérer une cellule de code, cliquez sur  Code.

  2. 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))
  3. 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.

  4. Pour insérer une cellule de code, cliquez sur  Code.

  5. 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
  6. 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.

  7. Pour insérer une cellule de code, cliquez sur  Code.

  8. 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)
  9. Cliquez sur  Exécuter la cellule.

    Le résultat ressemble à ce qui suit :

    Calque de polygones affiché pour les quartiers de San Francisco.

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.

  1. Pour insérer une cellule de code, cliquez sur  Code.

  2. 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
  3. Cliquez sur  Exécuter la cellule.

    Le résultat ressemble à ce qui suit :

    Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%

  4. Pour insérer une cellule de code, cliquez sur  Code.

  5. 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')
  6. 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.

  7. Pour insérer une cellule de code, cliquez sur  Code.

  8. 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()
  9. 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
    
  10. Pour insérer une cellule de code, cliquez sur  Code.

  11. Pour prévisualiser les cinq premières lignes du DataFrame, saisissez le code suivant:

    # Preview the first five rows.
    gdf_incidents_x_cell.head()
  12. Cliquez sur  Exécuter la cellule.

    Le résultat ressemble à ce qui suit :

    Cinq premières lignes du DataFrame.

  13. Pour insérer une cellule de code, cliquez sur  Code.

  14. 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()
  15. 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.

  16. Pour insérer une cellule de code, cliquez sur  Code.

  17. 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)
  18. Cliquez sur  Exécuter la cellule.

    Le résultat ressemble à ce qui suit :

    Carte de densité affichée.

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

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. 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.

  1. Dans votre Colab, cliquez sur  Secrets.

  2. À la fin de la ligne GMP_API_KEY, cliquez sur  Supprimer.

  3. Facultatif: Pour supprimer le notebook, cliquez sur Fichier > Déplacer vers la corbeille.

Étape suivante