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 informasi tentang cara mengakses set data publik ini, lihat Mengakses set data publik di Google Cloud konsol.

Anda menggunakan set data publik untuk membuat visualisasi berikut:

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

Tujuan

  • Siapkan autentikasi dengan Google Cloud dan, secara opsional, Google Maps.
  • Buat kueri data di BigQuery dan download hasilnya ke Colab.
  • Gunakan alat ilmu data Python untuk melakukan transformasi dan analisis.
  • Buat visualisasi, termasuk diagram sebar, poligon, peta koroplet, 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, lihat Pembersihan.

Sebelum memulai

  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. Pastikan Anda memiliki izin yang diperlukan untuk melakukan tugas dalam dokumen ini.

Peran yang diperlukan

Jika membuat project baru, Anda adalah pemilik project, dan Anda akan 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.

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.

    Buka IAM
  2. Pilih project.
  3. Klik Berikan akses.
  4. Di kolom New principals, masukkan ID pengguna Anda. Ini biasanya adalah alamat email untuk Akun Google.

  5. Di daftar Pilih peran, pilih peran.
  6. Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.

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

Membuat notebook Colab

Tutorial ini membuat 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— Visualisasi Geospasial 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 > Save.

Mengautentikasi dengan Google Cloud dan Google Maps

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

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

    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 Login ke Kode notebook yang ditulis pihak ketiga, klik Lanjutkan.

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

Opsional: Mengautentikasi dengan Google Maps

Jika menggunakan Google Maps Platform sebagai penyedia peta untuk peta dasar, Anda harus menyediakan 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 dalam dokumentasi Google Maps.

  2. Beralihlah ke notebook Colab, 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 Berikan 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. Tanda centang di samping sel menunjukkan bahwa kode berhasil berjalan.

Menginstal paket Python dan mengimpor library ilmu data

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 H3 Hexagonal 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 setiap objek geometris planar.
  • branca untuk membuat peta warna HTML dan JavaScript.
  • geemap.deck untuk visualisasi dengan pydeck dan earthengine-api.

Setelah mengimpor library, Anda akan 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. Tanda centang di samping sel menunjukkan bahwa kode berhasil berjalan.

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 dua rutinitas bersama—rutinitas bersama yang merender lapisan pada peta dasar dan rutinitas bersama yang mengonversi DataFrame pandas menjadi DataFrame geopandas.

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

  4. Untuk menyisipkan sel kode, klik Code.

  5. Untuk membuat rutinitas bersama yang mengonversi DataFrame pandas menjadi DataFrame geopandas, masukkan kode berikut:

    # 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. 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 plot pencarahan dari 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 lapisan dan lapisan diagram pencar dari framework deck.gl.

Diagram pencar berguna saat Anda perlu meninjau subset dari setiap titik (juga dikenal sebagai pemeriksaan spot).

Contoh berikut menunjukkan cara menggunakan lapisan dan lapisan diagram pencarahnya untuk merender setiap titik sebagai lingkaran. Untuk merender titik, Anda harus mengekstrak bujur dan lintang sebagai koordinat x dan y dari kolom station_geom dalam set data sepeda bersama.

Koordinat diekstrak dengan mengonversi data ke DataFrame geopandas, yang mengonversi setiap item di kolom station_geom menjadi objek shapely. shapely menyediakan metode dan properti Python yang memungkinkan Anda mengekstrak komponen seperti x dan y.

  1. Untuk menyisipkan sel kode, klik Code.

  2. Untuk membuat kueri terhadap 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 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. 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 mengonversi data ke DataFrame geopandas, masukkan kode berikut:

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

  10. Untuk menyisipkan sel kode, klik Code.

  11. 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
  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 plot sebar stasiun sepeda bersama 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)
  15. Klik  Run cell.

    Outputnya mirip dengan hal berikut ini:

    Plot pencaratan stasiun berbagi sepeda 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 direpresentasikan sebagai kumpulan titik, atau subkumpulan permukaan bumi. Jenis GEOGRAPHY dapat berisi objek seperti berikut:

  • Poin
  • Baris
  • 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 bentuk tersebut. Anda dapat memvisualisasikan bentuk dengan mengonversi data geografis ke format GeoJSON. Anda kemudian 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 membuat kueri 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 df_sanfrancisco_neighborhoods --project {GCP_PROJECT_ID}
    
    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 mengonversi hasil ke format geopandas, masukkan kode berikut:

    # Convert the query results to geopandas format.
    gdf_sanfrancisco_neighborhoods = pandas_to_geopandas(df_sanfrancisco_neighborhoods)
    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 hasil, 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 hasil untuk merender peta koroplet. Peta koroplet menunjukkan kepadatan stasiun bike share menurut lingkungan dengan menggabungkan data dari set data Neighborhoods San Francisco 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 koroplet berguna jika Anda memiliki batas yang bermakna dan diketahui. Jika Anda memiliki data tanpa batas yang diketahui dan bermakna, Anda dapat menggunakan lapisan peta panas untuk merender kepadatannya yang kontinu.

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 Anda melakukan kuantisasi dan menggabungkan data sebelum merender. Dalam contoh ini, data dikuantifikasi 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 menyediakan segi enam gabungan yang memadai 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 magic %%bigquery untuk menjalankan kueri dan menampilkan hasilnya dalam 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. 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 mengonversi hasil menjadi DataFrame geopandas, masukkan kode berikut:

    # Convert the results into a geopandas.GeoDataFrame.
    gdf_incidents = pandas_to_geopandas(df_sanfrancisco_incidents_2015, geometry_column='location')
  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 menghitung sel untuk setiap lintang dan bujur 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'] = 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. 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
    
  10. Untuk menyisipkan sel kode, klik Code.

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

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

    Outputnya mirip dengan hal berikut ini:

    Lima baris pertama DataFrame.

  13. Untuk menyisipkan sel kode, klik Code.

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

  16. Untuk menyisipkan sel kode, klik Code.

  17. 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)
  18. 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. 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

Menghapus kunci dan notebook Google Maps API

Setelah Anda menghapus project Google Cloud , jika Anda menggunakan Google Maps API, hapus kunci Google Maps API dari Secret Colab, lalu hapus notebook secara opsional.

  1. Di Colab, klik  Secrets.

  2. Di akhir baris GMP_API_KEY, klik  Hapus.

  3. Opsional: Untuk menghapus notebook, klik File > Pindahkan ke sampah.

Langkah berikutnya