Memvisualisasikan data analisis geospasial menggunakan notebook Colab

Memvisualisasikan data analisis geospasial di notebook Colab memungkinkan Anda menjelajahi data lokasi dengan alat data science Python yang sudah dikenal. Dalam tutorial ini, Anda akan mengkueri set data publik berikut langsung dari notebook Anda untuk mengungkap pola geografis dengan merender diagram sebar, poligon, peta koroplet, dan peta panas interaktif:

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

Tujuan

  • Siapkan autentikasi dengan Google Cloud dan, secara opsional, Google Maps.
  • Membuat kueri data di BigQuery dan mendownload hasilnya ke Colab.
  • Menggunakan alat data science Python untuk melakukan transformasi dan analisis.
  • Membuat visualisasi, termasuk diagram sebar, poligon, choropleth, dan peta panas.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

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

    Enable the APIs

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

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

    Enable the APIs

  8. Pastikan Anda memiliki izin yang diperlukan untuk melakukan tugas dalam dokumen ini.

Peran yang diperlukan

Jika Anda membuat project baru, Anda adalah pemilik project, dan Anda diberi semua izin IAM yang diperlukan untuk menyelesaikan tutorial ini.

Jika menggunakan project yang sudah ada, Anda memerlukan peran level project berikut untuk menjalankan tugas kueri.

Pastikan Anda memiliki peran berikut di project:

Memeriksa peran

  1. Di konsol Google Cloud , buka halaman IAM.

    Buka IAM
  2. Pilih project.
  3. Di kolom Principal, temukan semua baris yang mengidentifikasi Anda atau grup yang mencakup Anda. Untuk mengetahui grup tempat Anda disertakan, hubungi administrator Anda.

  4. Untuk semua baris yang menentukan atau menyertakan Anda, periksa kolom Peran untuk melihat apakah daftar peran menyertakan peran yang diperlukan.

Memberikan peran

  1. Di konsol Google Cloud , buka halaman IAM.

    Buka IAM
  2. Pilih project.
  3. Klik Grant access.
  4. Di kolom New principals, masukkan ID pengguna Anda. Biasanya, ini adalah alamat email untuk Akun Google.

  5. Klik Select a role, lalu telusuri peran.
  6. Untuk memberikan peran tambahan, klik Add another role, lalu tambahkan tiap peran tambahan.
  7. Klik Simpan.

Untuk mengetahui informasi selengkapnya tentang peran di BigQuery, lihat Peran IAM yang telah ditetapkan.

Membuat notebook Colab

Tutorial ini membangun notebook Colab untuk memvisualisasikan data analisis geospasial. Anda dapat membuka versi bawaan notebook di Colab, Colab Enterprise, atau BigQuery Studio dengan mengklik link di bagian atas tutorial versi GitHub—BigQuery Geospatial Visualization in 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 > Save.

Melakukan autentikasi dengan Google Cloud dan Google Maps

Tutorial ini mengkueri set data BigQuery dan menggunakan Google Maps JavaScript API. Untuk menggunakan resource ini, Anda harus 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. Jika diminta, klik Allow untuk memberi Colab akses ke kredensial Anda, jika Anda setuju.

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

  6. Di halaman Login ke kode notebook yang dibuat oleh pihak ketiga, klik Lanjutkan.

  7. Di bagian Select what third-party authored notebook code can access, klik Select all, lalu klik Continue.

    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: Melakukan autentikasi dengan Google Maps

Jika Anda menggunakan Google Maps Platform sebagai penyedia peta untuk peta dasar, Anda harus memberikan kunci API Google Maps Platform. Notebook akan mengambil kunci dari Rahasia Colab 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 dalam dokumentasi Google Maps.

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

  3. Klik Add new secret.

  4. Untuk Name, masukkan GMP_API_KEY.

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

  6. Tutup panel Secrets.

  7. Untuk menyisipkan sel kode, klik Code.

  8. Untuk melakukan autentikasi 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. Saat diminta, klik Grant access 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 data science

Selain modul Python colabtools (google.colab), tutorial ini menggunakan beberapa paket Python dan library data science 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 Geospasial 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 guna memungkinkan 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.

Menginstal 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 Anda. 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 pandas DataFrame, 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 Anda. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.

Membuat rutinitas bersama

Di bagian ini, Anda akan membuat rutinitas bersama yang merender lapisan pada peta dasar.

  1. Untuk menyisipkan sel kode, klik Code.

  2. Untuk membuat rutinitas bersama guna merender lapisan pada 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 Anda. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.

Membuat diagram sebar

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

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

Contoh berikut menunjukkan cara menggunakan lapisan dan lapisan scatterplot 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 rental sepeda.

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 Anda. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.

  4. Untuk menyisipkan sel kode, klik Code.

  5. Untuk merender diagram sebar stasiun rental sepeda 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 yang dirender dari stasiun rental sepeda.

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 direpresentasikan sebagai kumpulan titik, atau subset 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 di 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 datanya 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 menunjukkan kepadatan stasiun rental sepeda berdasarkan 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 Anda. 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 Anda. 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

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

Dalam contoh berikut, Anda akan mengkueri data dalam tabel bigquery-public-data.san_francisco_sfpd_incidents.sfpd_incidents di set data San Francisco Police Department (SFPD) Reports. Data ini digunakan untuk memvisualisasikan distribusi insiden pada tahun 2015.

Untuk peta panas, sebaiknya Anda mengkuantisasi dan menggabungkan 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 menjadi segi enam. Fungsi h3.latlng_to_cell digunakan untuk memetakan posisi insiden (lintang dan bujur) ke indeks sel H3. Resolusi H3 sembilan memberikan heksagon gabungan yang memadai untuk peta panas. Fungsi h3.cell_to_latlng digunakan untuk menentukan pusat setiap segi enam.

  1. Untuk menyisipkan sel kode, klik Code.

  2. Untuk mengkueri data dalam set data San Francisco Police Department (SFPD) Reports, masukkan kode berikut. Kode ini menggunakan fungsi magic %%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 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 Anda. 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.

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

Konsol

  1. Di konsol Google Cloud , buka halaman Manage resources.

    Buka Kelola resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

gcloud

    Menghapus project Google Cloud :

    gcloud projects delete PROJECT_ID

Menghapus notebook dan kunci Google Maps API Anda

Setelah menghapus project Google Cloud , jika Anda menggunakan Google Maps API, hapus kunci Google Maps API dari Rahasia Colab, lalu hapus notebook jika perlu.

  1. Di Colab, klik  Secrets.

  2. Di akhir baris GMP_API_KEY, klik  Hapus.

  3. Opsional: Untuk menghapus notebook, klik File > Move to trash.

Langkah berikutnya