Raumbezogene Analysedaten mit einem Colab-Notebook visualisieren


In dieser Anleitung visualisieren Sie raumbezogene Analysedaten aus BigQuery mit einem Colab-Notebook.

In dieser Anleitung werden die folgenden öffentlichen BigQuery-Datasets verwendet:

Informationen zum Zugriff auf diese öffentlichen Datasets finden Sie unter Auf öffentliche Datasets in der Google Cloud Console zugreifen.

Mit den öffentlichen Datasets erstellen Sie die folgenden Visualisierungen:

  • Ein Streudiagramm aller Bikesharing-Stationen aus dem Ford GoBike Share-Datensatz
  • Polygone im Datensatz „San Francisco Neighborhoods“
  • Eine Choroplethkarte mit der Anzahl der Bikesharing-Stationen nach Stadtteil
  • Eine Hitzekarte mit Vorfällen aus dem Datensatz der Polizeiberichte von San Francisco

Lernziele

  • Richten Sie die Authentifizierung mit Google Cloud und optional mit Google Maps ein.
  • Daten in BigQuery abfragen und die Ergebnisse in Google Colab herunterladen
  • Verwenden Sie Python-Data-Science-Tools, um Transformationen und Analysen durchzuführen.
  • Visualisierungen wie Streudiagramme, Polygone, Choroplethen und Wärmekarten erstellen

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweise

  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. Prüfen Sie, ob Sie die erforderlichen Berechtigungen haben, um die Aufgaben in diesem Dokument ausführen zu können.

Erforderliche Rollen

Wenn Sie ein neues Projekt erstellen, sind Sie der Projektinhaber und erhalten alle erforderlichen IAM-Berechtigungen, die Sie für die Durchführung dieses Tutorials benötigen.

Wenn Sie ein vorhandenes Projekt verwenden, benötigen Sie die folgende Rolle auf Projektebene, um Abfragejobs ausführen zu können.

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.

    IAM aufrufen
  2. Wählen Sie das Projekt aus.
  3. Klicken Sie auf Zugriff erlauben.
  4. Geben Sie im Feld Neue Hauptkonten Ihre Nutzer-ID ein. Dies ist in der Regel die E-Mail-Adresse eines Google-Kontos.

  5. Wählen Sie in der Liste Rolle auswählen eine Rolle aus.
  6. Wenn Sie weitere Rollen hinzufügen möchten, klicken Sie auf Weitere Rolle hinzufügen und fügen Sie weitere Rollen hinzu.
  7. Klicken Sie auf Speichern.

Weitere Informationen zu Rollen in BigQuery finden Sie unter Vordefinierte IAM-Rollen.

Colab-Notebook erstellen

In dieser Anleitung wird ein Colab-Notebook erstellt, um raumbezogene Analysedaten zu visualisieren. Sie können eine vorkonfigurierte Version des Notebooks in Colab, Colab Enterprise oder BigQuery Studio öffnen, indem Sie oben in der GitHub-Version der Anleitung auf die Links klicken: BigQuery-geospatiale Visualisierung in Colab.

  1. Öffnen Sie Colab.

    Colab öffnen

  2. Klicken Sie im Dialogfeld Notebook öffnen auf Neues Notebook.

  3. Klicken Sie auf Untitled0.ipynb und ändern Sie den Namen des Notebooks in bigquery-geo.ipynb.

  4. Wählen Sie Datei > Speichern aus.

Mit Google Cloud und Google Maps authentifizieren

In dieser Anleitung werden BigQuery-Datasets abgefragt und die Google Maps JavaScript API verwendet. Wenn Sie diese Ressourcen verwenden möchten, authentifizieren Sie die Colab-Laufzeit mit Google Cloud und der Maps API.

Mit Google Cloudauthentifizieren

  1. Klicken Sie auf Code, um eine Codezelle einzufügen.

  2. Geben Sie den folgenden Code ein, um sich mit Ihrem Projekt zu authentifizieren:

    # 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)

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

  3. Klicken Sie auf  Zelle ausführen.

  4. Klicken Sie auf Zulassen, um Colab Zugriff auf Ihre Anmeldedaten zu gewähren, falls Sie damit einverstanden sind.

  5. Wählen Sie auf der Seite Über Google anmelden Ihr Konto aus.

  6. Klicken Sie auf der Seite In Notebook-Code von Drittanbietern anmelden auf Weiter.

  7. Klicken Sie auf der Seite Auswählen, auf welchen Notebook-Code von Drittanbietern zugegriffen werden kann auf Alle auswählen und dann auf Weiter.

    Nachdem Sie den Autorisierungsvorgang abgeschlossen haben, wird in Ihrem Colab-Notebook keine Ausgabe generiert. Das Häkchen neben der Zelle gibt an, dass der Code erfolgreich ausgeführt wurde.

Optional: Mit Google Maps authentifizieren

Wenn Sie die Google Maps Platform als Kartenanbieter für Basiskarten verwenden, müssen Sie einen Google Maps Platform API-Schlüssel angeben. Der Schlüssel wird aus Ihren Colab-Secrets abgerufen.

Dieser Schritt ist nur erforderlich, wenn Sie die Maps API verwenden. Wenn Sie sich nicht bei der Google Maps Platform authentifizieren, verwendet pydeck stattdessen die Karte carto.

  1. Rufen Sie Ihren Google Maps API-Schlüssel ab. Folgen Sie dazu der Anleitung auf der Seite API-Schlüssel verwenden in der Google Maps-Dokumentation.

  2. Wechseln Sie zu Ihrem Colab-Notebook und klicken Sie auf  Secrets.

  3. Klicken Sie auf Neues Secret hinzufügen.

  4. Geben Sie unter Name GMP_API_KEY ein.

  5. Geben Sie unter Wert den zuvor generierten Maps API-Schlüsselwert ein.

  6. Schließen Sie den Bereich Secrets.

  7. Klicken Sie auf Code, um eine Codezelle einzufügen.

  8. Geben Sie den folgenden Code ein, um sich mit der Maps API zu authentifizieren:

    # 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. Klicken Sie auf Zugriff gewähren, um dem Notebook Zugriff auf Ihren Schlüssel zu gewähren, falls Sie damit einverstanden sind.

  10. Klicken Sie auf  Zelle ausführen.

    Nachdem Sie den Autorisierungsvorgang abgeschlossen haben, wird in Ihrem Colab-Notebook keine Ausgabe generiert. Das Häkchen neben der Zelle gibt an, dass der Code erfolgreich ausgeführt wurde.

Python-Pakete installieren und Data-Science-Bibliotheken importieren

Neben den Python-Modulen colabtools (google.colab) werden in dieser Anleitung mehrere andere Python-Pakete und Data-Science-Bibliotheken verwendet.

In diesem Abschnitt installieren Sie die Pakete pydeck und h3. pydeck bietet skalierbares räumliches Rendering in Python, unterstützt von deck.gl. h3-py bietet das H3-Hexagonal Hierarchical Geospatial Indexing System von Uber in Python.

Importieren Sie dann die Bibliotheken h3 und pydeck sowie die folgenden Python-geospatialen Bibliotheken:

  • geopandas, um die von pandas verwendeten Datentypen zu erweitern und so geometrische Vorgänge zu ermöglichen.
  • shapely zur Manipulation und Analyse einzelner ebener geometrischer Objekte.
  • branca, um HTML- und JavaScript-Farbkarten zu generieren.
  • geemap.deck für die Visualisierung mit pydeck und earthengine-api.

Nachdem Sie die Bibliotheken importiert haben, aktivieren Sie interaktive Tabellen für pandas-DataFrames in Colab.

pydeck- und h3-Pakete installieren

  1. Klicken Sie auf Code, um eine Codezelle einzufügen.

  2. Geben Sie den folgenden Code ein, um die Pakete pydeck und h3 zu installieren:

    # Install pydeck and h3.
    !pip install pydeck>=0.9 h3>=4.2
  3. Klicken Sie auf  Zelle ausführen.

    Nach Abschluss der Installation wird in Ihrem Colab-Notebook keine Ausgabe generiert. Das Häkchen neben der Zelle gibt an, dass der Code erfolgreich ausgeführt wurde.

Python-Bibliotheken importieren

  1. Klicken Sie auf Code, um eine Codezelle einzufügen.

  2. Geben Sie den folgenden Code ein, um die Python-Bibliotheken zu importieren:

    # Import data science libraries.
    import branca
    import geemap.deck as gmdk
    import h3
    import pydeck as pdk
    import geopandas as gpd
    import shapely
  3. Klicken Sie auf  Zelle ausführen.

    Nach dem Ausführen des Codes wird in Ihrem Colab-Notebook keine Ausgabe generiert. Das Häkchen neben der Zelle gibt an, dass der Code erfolgreich ausgeführt wurde.

Interaktive Tabellen für Pandas DataFrames aktivieren

  1. Klicken Sie auf Code, um eine Codezelle einzufügen.

  2. Geben Sie den folgenden Code ein, um pandas-DataFrames zu aktivieren:

    # Enable displaying pandas data frames as interactive tables by default.
    from google.colab import data_table
    data_table.enable_dataframe_formatter()
  3. Klicken Sie auf  Zelle ausführen.

    Nachdem Sie den Code ausgeführt haben, wird in Ihrem Colab-Notebook keine Ausgabe generiert. Das Häkchen neben der Zelle gibt an, dass der Code erfolgreich ausgeführt wurde.

Gemeinsam genutzte Abläufe erstellen

In diesem Abschnitt erstellen Sie zwei freigegebene Routinen: eine, die Ebenen auf einer Basiskarte rendert, und eine, die einen pandas-DataFrame in einen geopandas-DataFrame konvertiert.

  1. Klicken Sie auf Code, um eine Codezelle einzufügen.

  2. Geben Sie den folgenden Code ein, um eine freigegebene Routine zum Rendern von Ebenen auf einer Karte zu erstellen:

    # 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. Klicken Sie auf  Zelle ausführen.

    Nachdem Sie den Code ausgeführt haben, wird in Ihrem Colab-Notebook keine Ausgabe generiert. Das Häkchen neben der Zelle gibt an, dass der Code erfolgreich ausgeführt wurde.

  4. Klicken Sie auf Code, um eine Codezelle einzufügen.

  5. Wenn Sie eine freigegebene Funktion erstellen möchten, die einen pandas-DataFrame in einen geopandas-DataFrame konvertiert, geben Sie den folgenden Code ein:

    # 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. Klicken Sie auf  Zelle ausführen.

    Nach dem Ausführen des Codes wird in Ihrem Colab-Notebook keine Ausgabe generiert. Das Häkchen neben der Zelle gibt an, dass der Code erfolgreich ausgeführt wurde.

Streudiagramm erstellen

In diesem Abschnitt erstellen Sie ein Streudiagramm aller Bike-Sharing-Stationen im öffentlichen Dataset „San Francisco Ford GoBike Share“, indem Sie Daten aus der Tabelle bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info abrufen. Das Streudiagramm wird mit einer Ebene und einer Streudiagrammebene aus dem deck.gl-Framework erstellt.

Streudiagramme sind nützlich, wenn Sie eine Teilmenge einzelner Punkte überprüfen möchten (auch als Stichprobenerhebung bezeichnet).

Im folgenden Beispiel wird gezeigt, wie Sie mit einer Ebene und einer Streudiagrammebene einzelne Punkte als Kreise darstellen. Zum Rendern der Punkte müssen Sie die Längen- und Breitengrade als x- und y-Koordinaten aus der Spalte station_geom im Dataset für die Fahrradverleihstationen extrahieren.

Die Koordinaten werden durch Konvertieren der Daten in einen geopandas-DataFrame extrahiert, wobei jedes Element in der Spalte station_geom in ein shapely-Objekt umgewandelt wird. shapely bietet Python-Methoden und ‑Eigenschaften, mit denen Sie Komponenten wie x und y extrahieren können.

  1. Klicken Sie auf Code, um eine Codezelle einzufügen.

  2. Geben Sie den folgenden Code ein, um den öffentlichen Datensatz „San Francisco Ford GoBike Share“ abzufragen. In diesem Code wird die magische Funktion %%bigquery verwendet, um die Abfrage auszuführen und die Ergebnisse in einem DataFrame zurückzugeben:

    # 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. Klicken Sie auf  Zelle ausführen.

    Die Ausgabe sieht etwa so aus:

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

  4. Klicken Sie auf Code, um eine Codezelle einzufügen.

  5. Geben Sie den folgenden Code ein, um die Daten in einen geopandas-DataFrame umzuwandeln:

    # 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. Klicken Sie auf  Zelle ausführen.

    Die Ausgabe sollte so aussehen:

    <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. Klicken Sie auf Code, um eine Codezelle einzufügen.

  8. Geben Sie den folgenden Code ein, um eine Vorschau der ersten fünf Zeilen des DataFrames aufzurufen:

    # Preview the first five rows
    gdf_sf_bikestations.head()
  9. Klicken Sie auf  Zelle ausführen.

    Die Ausgabe sieht etwa so aus:

    Die ersten fünf Zeilen des DataFrames.

  10. Klicken Sie auf Code, um eine Codezelle einzufügen.

  11. Geben Sie den folgenden Code ein, um die Längen- und Breitengradwerte aus der Spalte station_geom zu extrahieren:

    # 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. Klicken Sie auf  Zelle ausführen.

    Nachdem Sie den Code ausgeführt haben, wird in Ihrem Colab-Notebook keine Ausgabe generiert. Das Häkchen neben der Zelle gibt an, dass der Code erfolgreich ausgeführt wurde.

  13. Klicken Sie auf Code, um eine Codezelle einzufügen.

  14. Geben Sie den folgenden Code ein, um das Streudiagramm der Stationen für Fahrräder mit Freischaltsystem anhand der zuvor extrahierten Längen- und Breitengradwerte zu rendern:

    # 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. Klicken Sie auf  Zelle ausführen.

    Die Ausgabe sieht etwa so aus:

    Das gerenderte Streudiagramm der Bikesharing-Stationen.

Polygone visualisieren

Mit raumbezogenen Analysen können Sie raumbezogene Daten in BigQuery mithilfe von GEOGRAPHY-Datentypen und geografischen GoogleSQL-Funktionen analysieren und visualisieren.

Der Datentyp GEOGRAPHY in raumbezogenen Analysen ist eine Sammlung von Punkten, Linien und Polygonen, die als Punktsatz oder als Teilmenge der Erdoberfläche dargestellt werden. Ein GEOGRAPHY-Typ kann Objekte wie die folgenden enthalten:

  • Punkte
  • Linien
  • Polygone
  • Multipolygone

Eine Liste aller unterstützten Objekte finden Sie in der Dokumentation zum GEOGRAPHY-Typ.

Wenn Sie Geodaten erhalten, ohne die erwarteten Formen zu kennen, können Sie die Daten visualisieren, um die Formen zu ermitteln. Sie können Formen visualisieren, indem Sie die geografischen Daten in das GeoJSON-Format konvertieren. Anschließend können Sie die GeoJSON-Daten mithilfe einer GeoJSON-Ebene aus dem deck.gl-Framework visualisieren.

In diesem Abschnitt fragen Sie geografische Daten im Dataset „San Francisco Neighborhoods“ ab und visualisieren dann die Polygone.

  1. Klicken Sie auf Code, um eine Codezelle einzufügen.

  2. Geben Sie den folgenden Code ein, um die geografischen Daten aus der Tabelle bigquery-public-data.san_francisco_neighborhoods.boundaries im Dataset „San Francisco Neighborhoods“ abzufragen. In diesem Code wird die magische Funktion %%bigquery verwendet, um die Abfrage auszuführen und die Ergebnisse in einem DataFrame zurückzugeben:

    # 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. Klicken Sie auf  Zelle ausführen.

    Die Ausgabe sieht etwa so aus:

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

  4. Klicken Sie auf Code, um eine Codezelle einzufügen.

  5. Geben Sie den folgenden Code ein, um die Ergebnisse in das geopandas-Format zu konvertieren:

    # Convert the query results to geopandas format.
    gdf_sanfrancisco_neighborhoods = pandas_to_geopandas(df_sanfrancisco_neighborhoods)
    gdf_sanfrancisco_neighborhoods.info()
  6. Klicken Sie auf  Zelle ausführen.

    Die Ergebnisse sollten so aussehen:

    <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. Geben Sie den folgenden Code ein, um eine Vorschau der ersten Zeile des DataFrames aufzurufen:

    # Preview the first row
    gdf_sanfrancisco_neighborhoods.head(1)
  8. Klicken Sie auf  Zelle ausführen.

    Die Ausgabe sieht etwa so aus:

    Die erste Zeile des DataFrames.

    In den Ergebnissen sehen Sie, dass die Daten ein Polygon sind.

  9. Klicken Sie auf Code, um eine Codezelle einzufügen.

  10. Geben Sie den folgenden Code ein, um die Polygone zu visualisieren. Mit pydeck wird jede shapely-Objektinstanz in der Geometriespalte in das GeoJSON-Format umgewandelt:

    # 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. Klicken Sie auf  Zelle ausführen.

    Die Ausgabe sieht etwa so aus:

    Die gerenderten Polygone aus dem Datensatz „San Francisco Neighborhoods“

Choroplethenkarte erstellen

Wenn Sie Daten mit Polygonen untersuchen, die sich nur schwer in das GeoJSON-Format konvertieren lassen, können Sie stattdessen eine Polygonebene aus dem deck.gl-Framework verwenden. In einer Polygonebene können Eingabedaten bestimmter Typen verarbeitet werden, z. B. ein Punktarray.

In diesem Abschnitt verwenden Sie eine Polygonebene, um ein Array von Punkten zu rendern, und die Ergebnisse, um eine Choroplethenkarte zu rendern. Die Choroplethkarte zeigt die Dichte der Stationen für Leihfahrräder nach Stadtteil. Dazu wurden Daten aus dem Dataset „San Francisco Neighborhoods“ mit dem Dataset „San Francisco Ford GoBike Share“ zusammengeführt.

  1. Klicken Sie auf Code, um eine Codezelle einzufügen.

  2. Geben Sie den folgenden Code ein, um die Anzahl der Stationen pro Viertel zu aggregieren und zu zählen und eine polygon-Spalte mit einem Array von Punkten zu erstellen:

    # 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. Klicken Sie auf  Zelle ausführen.

    Nachdem Sie den Code ausgeführt haben, wird in Ihrem Colab-Notebook keine Ausgabe generiert. Das Häkchen neben der Zelle gibt an, dass der Code erfolgreich ausgeführt wurde.

  4. Klicken Sie auf Code, um eine Codezelle einzufügen.

  5. Geben Sie den folgenden Code ein, um für jedes Polygon eine Spalte vom Typ fill_color hinzuzufügen:

    # 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. Klicken Sie auf  Zelle ausführen.

    Nachdem Sie den Code ausgeführt haben, wird in Ihrem Colab-Notebook keine Ausgabe generiert. Das Häkchen neben der Zelle gibt an, dass der Code erfolgreich ausgeführt wurde.

  7. Klicken Sie auf Code, um eine Codezelle einzufügen.

  8. Geben Sie den folgenden Code ein, um die Polygonebene zu rendern:

    # 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. Klicken Sie auf  Zelle ausführen.

    Die Ausgabe sieht etwa so aus:

    Die gerenderte Polygonebene für die Stadtteile von San Francisco.

Heatmap erstellen

Choroplethen sind nützlich, wenn Sie aussagekräftige Grenzen haben, die bekannt sind. Wenn Sie Daten ohne bekannte sinnvolle Grenzen haben, können Sie mit einer Heatmap-Ebene die kontinuierliche Dichte rendern.

Im folgenden Beispiel werden Daten in der Tabelle bigquery-public-data.san_francisco_sfpd_incidents.sfpd_incidents im Dataset „San Francisco Police Department (SFPD) Reports“ abgefragt. Mit den Daten wird die Verteilung der Vorfälle im Jahr 2015 visualisiert.

Für Heatmaps sollten Sie die Daten vor dem Rendern quantisieren und aggregieren. In diesem Beispiel werden die Daten mithilfe der H3-Speicherung von Carto quantisiert und aggregiert. Die Heatmap wird mit einer Heatmap-Ebene aus dem deck.gl-Framework erstellt.

In diesem Beispiel wird die Quantisierung mit der h3-Python-Bibliothek durchgeführt, um die Einstrahlpunkte in Sechsecke zu aggregieren. Mit der Funktion h3.latlng_to_cell wird die Position des Notfalls (Breiten- und Längengrad) einem H3-Zellenindex zugeordnet. Eine H3-Auflösung von neun bietet genügend aggregierte Hexaeder für die Heatmap. Mit der h3.cell_to_latlng-Funktion wird der Mittelpunkt jedes Sechsecks ermittelt.

  1. Klicken Sie auf Code, um eine Codezelle einzufügen.

  2. Geben Sie den folgenden Code ein, um die Daten im Dataset „San Francisco Police Department (SFPD) Reports“ abzufragen. In diesem Code wird die magische Funktion %%bigquery verwendet, um die Abfrage auszuführen und die Ergebnisse in einem DataFrame zurückzugeben:

    # 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. Klicken Sie auf  Zelle ausführen.

    Die Ausgabe sieht etwa so aus:

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

  4. Klicken Sie auf Code, um eine Codezelle einzufügen.

  5. Geben Sie den folgenden Code ein, um die Ergebnisse in einen geopandas-DataFrame umzuwandeln:

    # Convert the results into a geopandas.GeoDataFrame.
    gdf_incidents = pandas_to_geopandas(df_sanfrancisco_incidents_2015, geometry_column='location')
  6. Klicken Sie auf  Zelle ausführen.

    Nachdem Sie den Code ausgeführt haben, wird in Ihrem Colab-Notebook keine Ausgabe generiert. Das Häkchen neben der Zelle gibt an, dass der Code erfolgreich ausgeführt wurde.

  7. Klicken Sie auf Code, um eine Codezelle einzufügen.

  8. Geben Sie den folgenden Code ein, um die Zelle für den Breiten- und Längengrad jedes Vorfalls zu berechnen, die Vorfälle für jede Zelle zu aggregieren, einen geopandas-DataFrame zu erstellen und den Mittelpunkt jedes Hexagons für die Heatmap-Ebene hinzuzufügen:

    # 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. Klicken Sie auf  Zelle ausführen.

    Die Ausgabe sieht etwa so aus:

    <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. Klicken Sie auf Code, um eine Codezelle einzufügen.

  11. Geben Sie den folgenden Code ein, um eine Vorschau der ersten fünf Zeilen des DataFrames aufzurufen:

    # Preview the first five rows.
    gdf_incidents_x_cell.head()
  12. Klicken Sie auf  Zelle ausführen.

    Die Ausgabe sieht etwa so aus:

    Die ersten fünf Zeilen des DataFrames.

  13. Klicken Sie auf Code, um eine Codezelle einzufügen.

  14. Geben Sie den folgenden Code ein, um die Daten in ein JSON-Format zu konvertieren, das von HeatmapLayer verwendet werden kann:

    # 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. Klicken Sie auf  Zelle ausführen.

    Nachdem Sie den Code ausgeführt haben, wird in Ihrem Colab-Notebook keine Ausgabe generiert. Das Häkchen neben der Zelle gibt an, dass der Code erfolgreich ausgeführt wurde.

  16. Klicken Sie auf Code, um eine Codezelle einzufügen.

  17. Geben Sie den folgenden Code ein, um die Heatmap zu rendern:

    # 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. Klicken Sie auf  Zelle ausführen.

    Die Ausgabe sieht etwa so aus:

    Die gerenderte Heatmap.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

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

Google Maps API-Schlüssel und Notebook löschen

Wenn Sie die Google Maps API verwendet haben, löschen Sie nach dem Löschen des Google Cloud -Projekts den Google Maps API-Schlüssel aus Ihren Colab-Secrets und löschen Sie dann optional das Notebook.

  1. Klicken Sie in Colab auf  Secrets.

  2. Klicken Sie am Ende der Zeile GMP_API_KEY auf  Löschen.

  3. Optional: Wenn Sie das Notebook löschen möchten, klicken Sie auf Datei > Zum Papierkorb verschieben.

Nächste Schritte