Memvisualisasikan data analisis geospasial menggunakan notebook Colab

Dalam tutorial ini, Anda akan memvisualisasikan data analisis geospasial dari BigQuery menggunakan notebook Colab.

Tutorial ini menggunakan set data publik BigQuery berikut:

Untuk mengetahui informasi tentang cara mengakses set data publik ini, lihat Mengakses set data publik di konsol Google Cloud .

Anda menggunakan set data publik untuk membuat visualisasi berikut:

  • Diagram sebar semua stasiun berbagi sepeda dari set data Ford GoBike Share
  • Poligon dalam set data San Francisco Neighborhoods
  • Peta koroplet jumlah tempat rental sepeda menurut lingkungan
  • Peta panas insiden dari set data Laporan Departemen Kepolisian San Francisco

Membuat notebook Colab

Tutorial ini membuat notebook Colab untuk memvisualisasikan data analisis geospasial. Anda dapat membuka versi notebook bawaan di Colab, Colab Enterprise, atau BigQuery Studio dengan mengklik link di bagian atas versi GitHub dari tutorial—Visualisasi Geospatial BigQuery di Colab.

  1. Buka Colab.

    Buka Colab

  2. Pada dialog Open notebook, klik New notebook.

  3. Klik Untitled0.ipynb dan ubah nama notebook menjadi bigquery-geo.ipynb.

  4. Pilih File > Simpan.

Mengautentikasi dengan Google Cloud dan Google Maps

Tutorial ini mengkueri set data BigQuery dan menggunakan Google Maps JavaScript API. Untuk menggunakan resource ini, Anda mengautentikasi runtime Colab dengan Google Cloud dan Maps API.

Autentikasi dengan Google Cloud

  1. Untuk menyisipkan sel kode, klik Code.

  2. Untuk melakukan autentikasi dengan project Anda, masukkan kode berikut:

    # 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

    Ganti PROJECT_ID dengan project ID Anda.

  3. Klik  Run cell.

  4. Saat diminta, klik Izinkan untuk memberi Colab akses ke kredensial Anda, jika Anda setuju.

  5. Di halaman Login dengan Google, pilih akun Anda.

  6. Di halaman Sign in to Third-party authored notebook code, klik Continue.

  7. Di Pilih kode notebook yang dibuat pihak ketiga yang dapat diakses, klik Pilih semua, lalu klik Lanjutkan.

    Setelah Anda menyelesaikan alur otorisasi, tidak ada output yang dihasilkan di notebook Colab Anda. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.

Opsional: Mengautentikasi dengan Google Maps

Jika Anda menggunakan Google Maps Platform sebagai penyedia peta untuk peta dasar, Anda harus memberikan kunci API Google Maps Platform. Notebook mengambil kunci dari Colab Secrets Anda.

Langkah ini hanya diperlukan jika Anda menggunakan Maps API. Jika Anda tidak melakukan autentikasi dengan Google Maps Platform, pydeck akan menggunakan peta carto.

  1. Dapatkan kunci Google Maps API Anda dengan mengikuti petunjuk di halaman Menggunakan kunci API di dokumentasi Google Maps.

  2. Beralihlah ke notebook Colab Anda, lalu klik  Secrets.

  3. Klik Tambahkan secret baru.

  4. Untuk Nama, masukkan GMP_API_KEY.

  5. Untuk Nilai, masukkan nilai kunci Maps API yang Anda buat sebelumnya.

  6. Tutup panel Secrets.

  7. Untuk menyisipkan sel kode, klik Code.

  8. Untuk mengautentikasi dengan Maps API, masukkan kode berikut:

    # 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. Jika diminta, klik Beri akses untuk memberi notebook akses ke kunci Anda, jika Anda setuju.

  10. Klik  Run cell.

    Setelah Anda menyelesaikan alur otorisasi, tidak ada output yang dihasilkan di notebook Colab Anda. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.

Menginstal paket Python dan mengimpor library ilmu data

Selain modul Python colabtools (google.colab), tutorial ini menggunakan beberapa paket Python dan library ilmu data lainnya.

Di bagian ini, Anda akan menginstal paket pydeck dan h3. pydeck menyediakan rendering spasial skala tinggi di Python, yang didukung oleh deck.gl. h3-py menyediakan Sistem Pengindeksan Geospatial Hierarkis Heksagonal H3 Uber di Python.

Kemudian, Anda mengimpor library h3 dan pydeck serta library geospasial Python berikut:

  • geopandas untuk memperluas jenis data yang digunakan oleh pandas untuk mengizinkan operasi spasial pada jenis geometris.
  • shapely untuk manipulasi dan analisis objek geometris planar individual.
  • branca untuk membuat peta warna HTML dan JavaScript.
  • geemap.deck untuk visualisasi dengan pydeck dan earthengine-api.

Setelah mengimpor library, Anda mengaktifkan tabel interaktif untuk DataFrame pandas di Colab.

Instal paket pydeck dan h3

  1. Untuk menyisipkan sel kode, klik Code.

  2. Untuk menginstal paket pydeck dan h3, masukkan kode berikut:

    # Install pydeck and h3.
    !pip install pydeck>=0.9 h3>=4.2
  3. Klik  Run cell.

    Setelah Anda menyelesaikan penginstalan, tidak ada output yang dihasilkan di notebook Colab Anda. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.

Mengimpor library Python

  1. Untuk menyisipkan sel kode, klik Code.

  2. Untuk mengimpor library Python, masukkan kode berikut:

    # Import data science libraries.
    import branca
    import geemap.deck as gmdk
    import h3
    import pydeck as pdk
    import geopandas as gpd
    import shapely
  3. Klik  Run cell.

    Setelah Anda menjalankan kode, tidak ada output yang dihasilkan di notebook Colab. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.

Mengaktifkan tabel interaktif untuk DataFrame pandas

  1. Untuk menyisipkan sel kode, klik Code.

  2. Untuk mengaktifkan DataFrame pandas, masukkan kode berikut:

    # Enable displaying pandas data frames as interactive tables by default.
    from google.colab import data_table
    data_table.enable_dataframe_formatter()
  3. Klik  Run cell.

    Setelah Anda menjalankan kode, tidak ada output yang dihasilkan di notebook Colab. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.

Membuat rutinitas bersama

Di bagian ini, Anda akan membuat rutin bersama yang merender lapisan di peta dasar.

  1. Untuk menyisipkan sel kode, klik Code.

  2. Untuk membuat rutinitas bersama untuk merender lapisan di peta, masukkan kode berikut:

    # 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. Klik  Run cell.

    Setelah Anda menjalankan kode, tidak ada output yang dihasilkan di notebook Colab. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.

Membuat diagram sebar

Di bagian ini, Anda akan membuat diagram sebar semua stasiun bike share di set data publik San Francisco Ford GoBike Share dengan mengambil data dari tabel bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info. Diagram pencar dibuat menggunakan layer dan scatterplot layer dari framework deck.gl.

Diagram sebar berguna saat Anda perlu meninjau subset titik individual (juga dikenal sebagai pemeriksaan di tempat).

Contoh berikut menunjukkan cara menggunakan lapisan dan lapisan diagram sebar untuk merender setiap titik sebagai lingkaran.

  1. Untuk menyisipkan sel kode, klik Code.

  2. Untuk membuat kueri set data publik San Francisco Ford GoBike Share, masukkan kode berikut. Kode ini menggunakan fungsi ajaib %%bigquery untuk menjalankan kueri dan menampilkan hasilnya dalam 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`
  3. Klik  Run cell.

    Outputnya mirip dengan hal berikut ini:

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

  4. Untuk menyisipkan sel kode, klik Code.

  5. Untuk mendapatkan ringkasan DataFrame, termasuk kolom dan jenis data, masukkan kode berikut:

    # Get a summary of the DataFrame
    gdf_sf_bikestations.info()
  6. Klik  Run cell.

    Outputnya akan terlihat seperti berikut ini:

    <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. Untuk menyisipkan sel kode, klik Code.

  8. Untuk melihat pratinjau lima baris pertama DataFrame, masukkan kode berikut:

    # Preview the first five rows
    gdf_sf_bikestations.head()
  9. Klik  Run cell.

    Outputnya mirip dengan hal berikut ini:

    Lima baris pertama DataFrame.

Untuk merender titik, Anda harus mengekstrak bujur dan lintang sebagai koordinat x dan y dari kolom station_geom dalam set data bike share.

Karena gdf_sf_bikestations adalah geopandas.GeoDataFrame, koordinat diakses langsung dari kolom geometri station_geom-nya. Anda dapat mengambil bujur menggunakan atribut .x kolom dan lintang menggunakan atribut .y. Kemudian, Anda dapat menyimpannya di kolom bujur dan lintang baru.

  1. Untuk menyisipkan sel kode, klik Code.

  2. Untuk mengekstrak nilai bujur dan lintang dari kolom station_geom, masukkan kode berikut:

    # 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
  3. Klik  Run cell.

    Setelah Anda menjalankan kode, tidak ada output yang dihasilkan di notebook Colab. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.

  4. Untuk menyisipkan sel kode, klik Code.

  5. Untuk merender diagram sebar stasiun bike share berdasarkan nilai bujur dan lintang yang Anda ekstrak sebelumnya, masukkan kode berikut:

    # 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)
  6. Klik  Run cell.

    Outputnya mirip dengan hal berikut ini:

    Diagram sebar stasiun bike sharing yang dirender.

Memvisualisasikan poligon

Analisis geospasial memungkinkan Anda menganalisis dan memvisualisasikan data geospasial di BigQuery menggunakan jenis data GEOGRAPHY dan fungsi geografi GoogleSQL.

Jenis data GEOGRAPHY dalam analisis geospasial adalah kumpulan titik, linestring, dan poligon, yang ditampilkan sebagai kumpulan titik, atau subkumpulan permukaan Bumi. Jenis GEOGRAPHY dapat berisi objek seperti berikut:

  • Poin
  • Garis
  • Poligon
  • Multipoligon

Untuk mengetahui daftar semua objek yang didukung, lihat dokumentasi jenis GEOGRAPHY.

Jika Anda diberi data geospasial tanpa mengetahui bentuk yang diharapkan, Anda dapat memvisualisasikan data untuk menemukan bentuknya. Anda dapat memvisualisasikan bentuk dengan mengonversi data geografis ke format GeoJSON. Kemudian, Anda dapat memvisualisasikan data GeoJSON menggunakan lapisan GeoJSON dari framework deck.gl.

Di bagian ini, Anda akan membuat kueri data geografis dalam set data San Francisco Neighborhoods, lalu memvisualisasikan poligon.

  1. Untuk menyisipkan sel kode, klik Code.

  2. Untuk mengkueri data geografis dari tabel bigquery-public-data.san_francisco_neighborhoods.boundaries dalam set data San Francisco Neighborhoods, masukkan kode berikut. Kode ini menggunakan fungsi ajaib %%bigquery untuk menjalankan kueri dan menampilkan hasilnya dalam 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`
  3. Klik  Run cell.

    Outputnya mirip dengan hal berikut ini:

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

  4. Untuk menyisipkan sel kode, klik Code.

  5. Untuk mendapatkan ringkasan DataFrame, masukkan kode berikut:

    # Get a summary of the DataFrame
    gdf_sanfrancisco_neighborhoods.info()
  6. Klik  Run cell.

    Hasilnya akan terlihat seperti berikut:

    <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. Untuk melihat pratinjau baris pertama DataFrame, masukkan kode berikut:

    # Preview the first row
    gdf_sanfrancisco_neighborhoods.head(1)
  8. Klik  Run cell.

    Outputnya mirip dengan hal berikut ini:

    Baris pertama DataFrame.

    Dalam hasilnya, perhatikan bahwa data adalah poligon.

  9. Untuk menyisipkan sel kode, klik Code.

  10. Untuk memvisualisasikan poligon, masukkan kode berikut. pydeck digunakan untuk mengonversi setiap instance objek shapely di kolom geometri menjadi 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. Klik  Run cell.

    Outputnya mirip dengan hal berikut ini:

    Poligon yang dirender dari set data San Francisco Neighborhoods.

Membuat peta koroplet

Jika Anda menjelajahi data dengan poligon yang sulit dikonversi ke format GeoJSON, Anda dapat menggunakan lapisan poligon dari framework deck.gl. Lapisan poligon dapat memproses data input dari jenis tertentu seperti array titik.

Di bagian ini, Anda akan menggunakan lapisan poligon untuk merender array titik dan menggunakan hasilnya untuk merender peta koroplet. Peta koroplet menampilkan kepadatan stasiun bike share menurut lingkungan dengan menggabungkan data dari set data San Francisco Neighborhoods dengan set data San Francisco Ford GoBike Share.

  1. Untuk menyisipkan sel kode, klik Code.

  2. Untuk menggabungkan dan menghitung jumlah stasiun per lingkungan dan membuat kolom polygon yang berisi array titik, masukkan kode berikut:

    # 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. Klik  Run cell.

    Setelah Anda menjalankan kode, tidak ada output yang dihasilkan di notebook Colab. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.

  4. Untuk menyisipkan sel kode, klik Code.

  5. Untuk menambahkan kolom fill_color untuk setiap poligon, masukkan kode berikut:

    # 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. Klik  Run cell.

    Setelah Anda menjalankan kode, tidak ada output yang dihasilkan di notebook Colab. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.

  7. Untuk menyisipkan sel kode, klik Code.

  8. Untuk merender lapisan poligon, masukkan kode berikut:

    # 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. Klik  Run cell.

    Outputnya mirip dengan hal berikut ini:

    Lapisan poligon yang dirender untuk lingkungan San Francisco.

Membuat peta panas

Peta choropleth berguna jika Anda memiliki batas yang bermakna dan diketahui. Jika Anda memiliki data tanpa batas yang bermakna, Anda dapat menggunakan lapisan peta panas untuk merender kepadatan berkelanjutannya.

Dalam contoh berikut, Anda membuat kueri data di tabel bigquery-public-data.san_francisco_sfpd_incidents.sfpd_incidents dalam set data Laporan Departemen Kepolisian San Francisco (SFPD). Data ini digunakan untuk memvisualisasikan distribusi insiden pada tahun 2015.

Untuk peta panas, sebaiknya kuantisasi dan gabungkan data sebelum merender. Dalam contoh ini, data dikuantisasi dan digabungkan menggunakan pengindeksan spasial H3 Carto. Peta panas dibuat menggunakan lapisan peta panas dari framework deck.gl.

Dalam contoh ini, kuantisasi dilakukan menggunakan library Python h3 untuk menggabungkan titik insiden ke dalam heksagon. Fungsi h3.latlng_to_cell digunakan untuk memetakan posisi insiden (lintang dan bujur) ke indeks sel H3. Resolusi H3 sembilan memberikan cukup banyak heksagon gabungan untuk peta panas. Fungsi h3.cell_to_latlng digunakan untuk menentukan pusat setiap heksagon.

  1. Untuk menyisipkan sel kode, klik Code.

  2. Untuk membuat kueri data dalam set data Laporan Departemen Kepolisian San Francisco (SFPD), masukkan kode berikut. Kode ini menggunakan fungsi ajaib %%bigquery untuk menjalankan kueri dan menampilkan hasilnya dalam 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
  3. Klik  Run cell.

    Outputnya mirip dengan hal berikut ini:

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

  4. Untuk menyisipkan sel kode, klik Code.

  5. Untuk menghitung sel untuk lintang dan bujur setiap insiden, gabungkan insiden untuk setiap sel, buat DataFrame geopandas, dan tambahkan pusat setiap segi enam untuk lapisan peta panas, masukkan kode berikut:

    # 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()
  6. Klik  Run cell.

    Outputnya mirip dengan hal berikut ini:

    <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
    
  7. Untuk menyisipkan sel kode, klik Code.

  8. Untuk melihat pratinjau lima baris pertama DataFrame, masukkan kode berikut:

    # Preview the first five rows.
    gdf_incidents_x_cell.head()
  9. Klik  Run cell.

    Outputnya mirip dengan hal berikut ini:

    Lima baris pertama DataFrame.

  10. Untuk menyisipkan sel kode, klik Code.

  11. Untuk mengonversi data ke dalam format JSON yang dapat digunakan oleh HeatmapLayer, masukkan kode berikut:

    # 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()
  12. Klik  Run cell.

    Setelah Anda menjalankan kode, tidak ada output yang dihasilkan di notebook Colab. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.

  13. Untuk menyisipkan sel kode, klik Code.

  14. Untuk merender peta panas, masukkan kode berikut:

    # 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)
  15. Klik  Run cell.

    Outputnya mirip dengan hal berikut ini:

    Peta panas yang dirender.