Tutorial ini menggunakan set data publik BigQuery berikut:
- San Francisco Ford GoBike Share
- Kawasan di San Francisco
- Laporan Departemen Kepolisian San Francisco (SFPD)
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.
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
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and Google Maps JavaScript APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and Google Maps JavaScript APIs.
- 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:
- BigQuery User (
roles/bigquery.user
)
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
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.
- 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
-
In the Google Cloud console, go to the IAM page.
Buka IAM - Pilih project.
- Klik Berikan akses.
-
Di kolom New principals, masukkan ID pengguna Anda. Ini biasanya adalah alamat email untuk Akun Google.
- Di daftar Pilih peran, pilih peran.
- 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.
Buka Colab.
Pada dialog Open notebook, klik New notebook.
Klik
Untitled0.ipynb
dan ubah nama notebook menjadibigquery-geo.ipynb
.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
Untuk menyisipkan sel kode, klik
Code.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.
Klik
Run cell.Saat diminta, klik Izinkan untuk memberi Colab akses ke kredensial Anda, jika Anda setuju.
Di halaman Login dengan Google, pilih akun Anda.
Di halaman Login ke Kode notebook yang ditulis pihak ketiga, klik Lanjutkan.
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
.
Dapatkan kunci Google Maps API Anda dengan mengikuti petunjuk di halaman Menggunakan kunci API dalam dokumentasi Google Maps.
Beralihlah ke notebook Colab, lalu klik
Secrets.Klik Tambahkan secret baru.
Untuk Nama, masukkan
GMP_API_KEY
.Untuk Nilai, masukkan nilai kunci Maps API yang Anda buat sebelumnya.
Tutup panel Secrets.
Untuk menyisipkan sel kode, klik
Code.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
Jika diminta, klik Berikan akses untuk memberi notebook akses ke kunci Anda, jika Anda setuju.
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 olehpandas
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 denganpydeck
danearthengine-api
.
Setelah mengimpor library, Anda akan mengaktifkan tabel interaktif untuk DataFrame
pandas
di Colab.
Menginstal paket pydeck
dan h3
Untuk menyisipkan sel kode, klik
Code.Untuk menginstal paket
pydeck
danh3
, masukkan kode berikut:# Install pydeck and h3. !pip install pydeck>=0.9 h3>=4.2
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
Untuk menyisipkan sel kode, klik
Code.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
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
Untuk menyisipkan sel kode, klik
Code.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()
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
.
Untuk menyisipkan sel kode, klik
Code.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
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.
Untuk menyisipkan sel kode, klik
Code.Untuk membuat rutinitas bersama yang mengonversi DataFrame
pandas
menjadi DataFramegeopandas
, 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')
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.
Untuk menyisipkan sel kode, klik
Code.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`
Klik
Run cell.Outputnya mirip dengan hal berikut ini:
Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%
Untuk menyisipkan sel kode, klik
Code.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()
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
Untuk menyisipkan sel kode, klik
Code.Untuk melihat pratinjau lima baris pertama DataFrame, masukkan kode berikut:
# Preview the first five rows gdf_sf_bikestations.head()
Klik
Run cell.Outputnya mirip dengan hal berikut ini:
Untuk menyisipkan sel kode, klik
Code.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
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.
Untuk menyisipkan sel kode, klik
Code.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)
Klik
Run cell.Outputnya mirip dengan hal berikut ini:
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.
Untuk menyisipkan sel kode, klik
Code.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`
Klik
Run cell.Outputnya mirip dengan hal berikut ini:
Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%
Untuk menyisipkan sel kode, klik
Code.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()
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
Untuk melihat pratinjau baris pertama DataFrame, masukkan kode berikut:
# Preview the first row gdf_sanfrancisco_neighborhoods.head(1)
Klik
Run cell.Outputnya mirip dengan hal berikut ini:
Dalam hasil, perhatikan bahwa datanya adalah poligon.
Untuk menyisipkan sel kode, klik
Code.Untuk memvisualisasikan poligon, masukkan kode berikut.
pydeck
digunakan untuk mengonversi setiap instance objekshapely
di kolom geometri menjadi formatGeoJSON
:# 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)
Klik
Run cell.Outputnya mirip dengan hal berikut ini:
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.
Untuk menyisipkan sel kode, klik
Code.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))
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.
Untuk menyisipkan sel kode, klik
Code.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
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.
Untuk menyisipkan sel kode, klik
Code.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)
Klik
Run cell.Outputnya mirip dengan hal berikut ini:
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.
Untuk menyisipkan sel kode, klik
Code.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
Klik
Run cell.Outputnya mirip dengan hal berikut ini:
Job ID 12345-1234-5678-1234-123456789 successfully executed: 100%
Untuk menyisipkan sel kode, klik
Code.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')
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.
Untuk menyisipkan sel kode, klik
Code.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()
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
Untuk menyisipkan sel kode, klik
Code.Untuk melihat pratinjau lima baris pertama DataFrame, masukkan kode berikut:
# Preview the first five rows. gdf_incidents_x_cell.head()
Klik
Run cell.Outputnya mirip dengan hal berikut ini:
Untuk menyisipkan sel kode, klik
Code.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()
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.
Untuk menyisipkan sel kode, klik
Code.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)
Klik
Run cell.Outputnya mirip dengan hal berikut ini:
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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- 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.
Di Colab, klik
Secrets.Di akhir baris
GMP_API_KEY
, klik Hapus.Opsional: Untuk menghapus notebook, klik File > Pindahkan ke sampah.
Langkah berikutnya
- Untuk mengetahui informasi selengkapnya tentang analisis geospasial di BigQuery, lihat Pengantar analisis geospasial di BigQuery.
- Untuk pengantar tentang cara memvisualisasikan data geospasial di BigQuery, lihat Memvisualisasikan data geospasial.
- Untuk mempelajari
pydeck
dan jenis diagramdeck.gl
lainnya lebih lanjut, Anda dapat menemukan contoh di Galeripydeck
, Katalog Lapisandeck.gl
, dan sumber GitHubdeck.gl
. - Untuk informasi selengkapnya tentang cara menggunakan data geospasial dalam frame data, lihat halaman Memulai GeoPandas dan Panduan pengguna GeoPandas.
- Untuk informasi selengkapnya tentang manipulasi objek geometris, lihat panduan pengguna Shapely.
- Untuk mempelajari penggunaan data Google Earth Engine di BigQuery, lihat Mengekspor ke BigQuery dalam dokumentasi Google Earth Engine.