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:
- San Francisco Ford GoBike Share
- San Francisco Neighborhoods
- Laporan San Francisco Police Department (SFPD)
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.
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
- 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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.enablepermission. 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.-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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.enablepermission. 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.- 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:
- BigQuery User (
roles/bigquery.user)
Memeriksa peran
-
Di konsol Google Cloud , buka halaman IAM.
Buka IAM - Pilih project.
-
Di kolom Principal, temukan semua baris yang mengidentifikasi Anda atau grup yang mencakup Anda. Untuk mengetahui grup tempat Anda disertakan, hubungi administrator Anda.
- Untuk semua baris yang menentukan atau menyertakan Anda, periksa kolom Peran untuk melihat apakah daftar peran menyertakan peran yang diperlukan.
Memberikan peran
-
Di konsol Google Cloud , buka halaman IAM.
Buka IAM - Pilih project.
- Klik Grant access.
-
Di kolom New principals, masukkan ID pengguna Anda. Biasanya, ini adalah alamat email untuk Akun Google.
- Klik Select a role, lalu telusuri peran.
- Untuk memberikan peran tambahan, klik Add another role, lalu tambahkan tiap peran tambahan.
- 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.
Buka Colab.
Pada dialog Open notebook, klik New notebook.
Klik
Untitled0.ipynbdan ubah nama notebook menjadibigquery-geo.ipynb.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
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) # Set GMP_API_KEY to none GMP_API_KEY = None
Ganti PROJECT_ID dengan project ID Anda.
Klik Run cell.
Jika diminta, klik Allow 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 dibuat oleh pihak ketiga, klik Lanjutkan.
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.
Dapatkan kunci Google Maps API Anda dengan mengikuti petunjuk di halaman Menggunakan kunci API dalam dokumentasi Google Maps.
Beralihlah ke notebook Colab Anda, lalu klik Secrets.
Klik Add new secret.
Untuk Name, masukkan
GMP_API_KEY.Untuk Value, masukkan nilai kunci Maps API yang Anda buat sebelumnya.
Tutup panel Secrets.
Untuk menyisipkan sel kode, klik Code.
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
Saat diminta, klik Grant access 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 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:
geopandasuntuk memperluas jenis data yang digunakan olehpandasguna memungkinkan operasi spasial pada jenis geometris.shapelyuntuk manipulasi dan analisis objek geometris planar individual.brancauntuk membuat peta warna HTML dan JavaScript.geemap.deckuntuk visualisasi denganpydeckdanearthengine-api.
Setelah mengimpor library, Anda mengaktifkan tabel interaktif untuk DataFrame pandas di Colab.
Menginstal paket pydeck dan h3
Untuk menyisipkan sel kode, klik Code.
Untuk menginstal paket
pydeckdanh3, 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 Anda. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.
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 Anda. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.
Mengaktifkan tabel interaktif untuk DataFrame pandas
Untuk menyisipkan sel kode, klik Code.
Untuk mengaktifkan
pandasDataFrame, 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 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.
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 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.
Untuk menyisipkan sel kode, klik Code.
Untuk membuat kueri set data publik San Francisco Ford GoBike Share, masukkan kode berikut. Kode ini menggunakan fungsi ajaib
%%bigqueryuntuk 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`
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 mendapatkan ringkasan DataFrame, termasuk kolom dan jenis data, masukkan kode berikut:
# Get a summary of the DataFrame 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+ KBUntuk 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 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.
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 Anda. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.
Untuk menyisipkan sel kode, klik Code.
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)
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 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.
Untuk menyisipkan sel kode, klik Code.
Untuk mengkueri data geografis dari tabel
bigquery-public-data.san_francisco_neighborhoods.boundariesdi set data San Francisco Neighborhoods, masukkan kode berikut. Kode ini menggunakan fungsi ajaib%%bigqueryuntuk 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`
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 mendapatkan ringkasan DataFrame, masukkan kode berikut:
# Get a summary of the DataFrame 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+ KBUntuk 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 hasilnya, perhatikan bahwa datanya adalah poligon.
Untuk menyisipkan sel kode, klik Code.
Untuk memvisualisasikan poligon, masukkan kode berikut.
pydeckdigunakan untuk mengonversi setiap instance objekshapelydi 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 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.
Untuk menyisipkan sel kode, klik Code.
Untuk menggabungkan dan menghitung jumlah stasiun per lingkungan dan membuat kolom
polygonyang 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 Anda. Tanda centang di samping sel menunjukkan bahwa kode berhasil dijalankan.
Untuk menyisipkan sel kode, klik Code.
Untuk menambahkan kolom
fill_coloruntuk 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 Anda. 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
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.
Untuk menyisipkan sel kode, klik Code.
Untuk mengkueri data dalam set data San Francisco Police Department (SFPD) Reports, masukkan kode berikut. Kode ini menggunakan fungsi magic
%%bigqueryuntuk 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
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 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()
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+ KBUntuk 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 Anda. 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
- Di konsol Google Cloud , buka halaman Manage resources.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- 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.
Di Colab, klik Secrets.
Di akhir baris
GMP_API_KEY, klik Hapus.Opsional: Untuk menghapus notebook, klik File > Move to trash.
Langkah berikutnya
- Untuk mengetahui informasi selengkapnya tentang analisis geospasial di BigQuery, lihat Pengantar analisis geospasial di BigQuery.
- Untuk pengantar visualisasi data geospasial di BigQuery, lihat Memvisualisasikan data geospasial.
- Untuk mempelajari lebih lanjut
pydeckdan jenis diagramdeck.gllainnya, Anda dapat menemukan contoh di Galeripydeck, Katalog Lapisandeck.gl, dan Sumber GitHubdeck.gl. - Untuk mengetahui informasi selengkapnya tentang cara menggunakan data geospasial dalam frame data, lihat halaman Memulai GeoPandas dan Panduan pengguna GeoPandas.
- Untuk mengetahui 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.