Xác thực dữ liệu Places Insights bằng cách sử dụng Mã địa điểm mẫu

Trong tài liệu này, bạn sẽ tìm hiểu cách sử dụng dữ liệu Mã địa điểm mẫu từ Thông tin chi tiết về địa điểm, sử dụng các hàm Đếm địa điểm, cùng với các lượt tra cứu Place Details được nhắm mục tiêu để xây dựng niềm tin vào kết quả của bạn.

Để tham khảo cách triển khai chi tiết của mẫu này, hãy xem sổ tay giải thích sau:

Bản đồ nhiệt mật độ của các địa điểm ở London, với các điểm đánh dấu riêng lẻ được phủ lên để xác thực dữ liệu thống kê.

Mẫu kiến trúc

Mẫu kiến trúc này cung cấp cho bạn một quy trình làm việc có thể lặp lại để thu hẹp khoảng cách giữa phân tích thống kê cấp cao và xác minh thông tin thực tế. Bằng cách kết hợp quy mô của BigQuery với độ chính xác của Places API, bạn có thể tự tin xác thực các phát hiện phân tích của mình. Điều này đặc biệt hữu ích cho việc chọn địa điểm, phân tích đối thủ cạnh tranh và nghiên cứu thị trường, trong đó niềm tin vào dữ liệu là tối quan trọng.

Cốt lõi của mẫu này bao gồm 4 bước chính:

  1. Phân tích trên quy mô lớn: Sử dụng hàm Đếm địa điểm từ Thông tin chi tiết về địa điểm trong BigQuery để phân tích dữ liệu địa điểm trên một khu vực địa lý rộng lớn, chẳng hạn như toàn bộ thành phố hoặc khu vực.
  2. Tách biệt và trích xuất mẫu: Xác định các khu vực quan tâm (ví dụ: "điểm nóng" có mật độ cao) từ kết quả tổng hợp và trích xuất sample_place_ids do hàm cung cấp.
  3. Truy xuất thông tin chi tiết thực tế: Sử dụng Mã địa điểm đã trích xuất để thực hiện các lệnh gọi được nhắm mục tiêu đến Place Details API nhằm tìm nạp thông tin chi tiết phong phú, thực tế cho từng địa điểm.
  4. Tạo hình ảnh trực quan kết hợp: Xếp lớp dữ liệu địa điểm chi tiết lên trên bản đồ thống kê cấp cao ban đầu để xác thực trực quan rằng số lượng tổng hợp phản ánh thực tế.

Quy trình làm việc của giải pháp

Quy trình làm việc này cho phép bạn thu hẹp khoảng cách giữa các xu hướng ở cấp độ vĩ mô và các thông tin thực tế ở cấp độ vi mô. Bạn bắt đầu bằng một chế độ xem thống kê rộng và có chiến lược xem chi tiết để xác minh dữ liệu bằng các ví dụ cụ thể, thực tế.

Phân tích mật độ địa điểm trên quy mô lớn bằng Thông tin chi tiết về địa điểm

Bước đầu tiên là bạn phải hiểu được bức tranh tổng thể ở cấp độ cao. Thay vì tìm nạp hàng nghìn điểm đến riêng lẻ (POI), bạn có thể chạy một truy vấn duy nhất để nhận được bản tóm tắt thống kê.

Hàm PLACES_COUNT_PER_H3 của Thông tin chi tiết về địa điểm là lý tưởng cho việc này. Hàm này tổng hợp số lượng POI thành một hệ thống lưới lục giác (H3), cho phép bạn nhanh chóng xác định các khu vực có mật độ cao hoặc thấp dựa trên các tiêu chí cụ thể (ví dụ: các nhà hàng có xếp hạng cao đang hoạt động).

Sau đây là một truy vấn mẫu. Xin lưu ý rằng bạn sẽ phải cung cấp thông tin địa lý về khu vực tìm kiếm. Bạn có thể sử dụng một tập dữ liệu mở, chẳng hạn như tập dữ liệu công khai Overture Maps Data BigQuery dataset để truy xuất dữ liệu ranh giới địa lý.

Đối với các ranh giới tập dữ liệu công khai thường dùng, bạn nên hiện thực hoá chúng thành một bảng trong dự án của riêng mình. Điều này giúp giảm đáng kể chi phí BigQuery và cải thiện hiệu suất truy vấn.

-- This query counts all highly-rated, operational restaurants
-- across a large geography, grouping them into H3 cells.
SELECT *
FROM
  `places_insights___gb.PLACES_COUNT_PER_H3`(
    JSON_OBJECT(
      'geography', your_defined_geography,
      'h3_resolution', 8,
      'types', ['restaurant'],
      'business_status', ['OPERATIONAL'],
      'min_rating', 3.5
    )
  );

Kết quả của truy vấn này cung cấp cho bạn một bảng các ô H3 và số lượng địa điểm trong mỗi ô, tạo thành cơ sở cho bản đồ nhiệt mật độ.

Một bảng kết quả truy vấn BigQuery cho thấy các cột h3_cell_index, số lượng và sample_place_ids.

Tách biệt điểm nóng và trích xuất Mã địa điểm mẫu

Kết quả từ hàm PLACES_COUNT_PER_H3 cũng trả về một mảng sample_place_ids, tối đa 250 Mã địa điểm cho mỗi phần tử của phản hồi. Các mã này là đường liên kết từ số liệu thống kê tổng hợp đến các địa điểm riêng lẻ đóng góp vào số liệu đó.

Hệ thống của bạn có thể xác định trước các ô có liên quan nhất từ truy vấn ban đầu. Ví dụ: bạn có thể chọn 20 ô hàng đầu có số lượng cao nhất. Sau đó, từ các điểm nóng này, bạn sẽ hợp nhất sample_place_ids thành một danh sách duy nhất. Danh sách này đại diện cho một mẫu được tuyển chọn gồm các POI thú vị nhất từ các khu vực có liên quan nhất, giúp bạn chuẩn bị cho quá trình xác minh được nhắm mục tiêu.

Nếu bạn đang xử lý kết quả BigQuery trong Python bằng DataFrame pandas, thì logic để trích xuất các mã này rất đơn giản:

# Assume 'results_df' is a pandas DataFrame from your BigQuery query.

# 1. Identify the 20 busiest H3 cells by sorting and taking the top results.
top_hotspots_df = results_df.sort_values(by='count', ascending=False).head(20)

# 2. Extract and flatten the lists of sample_place_ids from these hotspots.
# The .explode() function creates a new row for each ID in the lists.
all_sample_ids = top_hotspots_df['sample_place_ids'].explode()

# 3. Create a final list of unique Place IDs to verify.
place_ids_to_verify = all_sample_ids.unique().tolist()

print(f"Consolidated {len(place_ids_to_verify)} unique Place IDs for spot-checking.")

Bạn có thể áp dụng logic tương tự nếu sử dụng các ngôn ngữ lập trình khác.

Truy xuất thông tin chi tiết thực tế bằng Places API

Với danh sách Mã địa điểm được hợp nhất, giờ đây, bạn sẽ chuyển từ phân tích trên quy mô lớn sang truy xuất dữ liệu cụ thể. Bạn sẽ sử dụng các mã này để truy vấn Place Details API nhằm biết thông tin chi tiết về từng vị trí mẫu.

Đây là một bước xác thực quan trọng. Trong khi Thông tin chi tiết về địa điểm cho bạn biết có bao nhiêu nhà hàng trong một khu vực, thì Places API cho bạn biết những nhà hàng đó là gì, cung cấp tên, địa chỉ chính xác, vĩ độ/kinh độ, điểm xếp hạng từ người dùng và thậm chí cả đường liên kết trực tiếp đến vị trí của họ trên Google Maps. Điều này giúp làm phong phú dữ liệu mẫu của bạn, biến các mã trừu tượng thành các địa điểm cụ thể, có thể xác minh.

Để biết danh sách đầy đủ dữ liệu có sẵn từ Place Details API và chi phí liên quan đến việc truy xuất, hãy xem tài liệu về API documentation.

Yêu cầu gửi đến Places API cho một mã cụ thể bằng thư viện ứng dụng Python sẽ có dạng như sau. Xem ví dụ về thư viện ứng dụng Places API (Mới) để biết thêm thông tin chi tiết.

# A request to fetch details for a single Place ID.
request = {"name": f"places/{place_id}"}

# Define the fields you want returned in the response as a comma-separated string.
fields_to_request = "formattedAddress,location,displayName,googleMapsUri"

# The response contains ground truth data.
response = places_client.get_place(
    request=request,
    metadata=[("x-goog-fieldmask", fields_to_request)]
)

Xin lưu ý rằng các trường trong yêu cầu này lấy dữ liệu từ 2 SKU thanh toán khác nhau.

Khi một yêu cầu Place Details bao gồm các trường từ nhiều SKU, toàn bộ yêu cầu sẽ được tính phí theo mức của SKU cấp cao nhất. Do đó, lệnh gọi cụ thể này sẽ được tính phí là yêu cầu Place Details Pro.

Để kiểm soát chi phí, hãy luôn sử dụng FieldMask để chỉ yêu cầu các trường mà ứng dụng của bạn cần.

Tạo hình ảnh trực quan kết hợp để xác thực

Bước cuối cùng là đưa cả hai tập dữ liệu vào một chế độ xem duy nhất. Điều này cung cấp một cách thức trực quan và tức thì để kiểm tra nhanh bản phân tích ban đầu. Hình ảnh trực quan của bạn phải có 2 lớp:

  1. Lớp cơ sở: Bản đồ phân vùng theo màu hoặc bản đồ nhiệt được tạo từ kết quả PLACES_COUNT_PER_H3 ban đầu, cho thấy mật độ tổng thể của các địa điểm trên khu vực địa lý của bạn.
  2. Lớp trên cùng: Một tập hợp các điểm đánh dấu riêng lẻ cho từng POI mẫu, được vẽ bằng toạ độ chính xác được truy xuất từ Places API ở bước trước.

Logic để xây dựng chế độ xem kết hợp này được thể hiện trong ví dụ về mã giả sau:

# Assume 'h3_density_data' is your aggregated data from Step 1.
# Assume 'detailed_places_data' is your list of place objects from Step 3.

# Create the base choropleth map from the H3 density data.
# The 'count' column determines the color of each hexagon.
combined_map = create_choropleth_map(
    data=h3_density_data,
    color_by_column='count'
)

# Iterate through the detailed place data to add individual markers.
for place in detailed_places_data:
    # Construct the popup information with key details and a link.
    popup_html = f"""
    <b>{place.name}</b><br>
    Address: {place.address}<br>
    <a href="{place.google_maps_uri}" target="_blank">View on Maps</a>
    """

    # Add a marker for the current place to the base map.
    combined_map.add_marker(
        location=[place.latitude, place.longitude],
        popup=popup_html,
        tooltip=place.name
    )

# Display the final map with both layers.
display(combined_map)

Bằng cách phủ các điểm đánh dấu cụ thể, thực tế lên bản đồ mật độ cấp cao, bạn có thể xác nhận ngay rằng các khu vực được xác định là điểm nóng thực sự chứa mật độ cao của các địa điểm mà bạn đang phân tích. Việc xác nhận trực quan này giúp xây dựng niềm tin đáng kể vào các kết luận dựa trên dữ liệu của bạn.

Kết luận

Mẫu kiến trúc này cung cấp một phương pháp mạnh mẽ và hiệu quả để xác thực thông tin chi tiết về không gian địa lý trên quy mô lớn. Bằng cách tận dụng Thông tin chi tiết về địa điểm để phân tích trên quy mô lớn và có thể mở rộng, cũng như Place Details API để xác minh thông tin thực tế được nhắm mục tiêu, bạn sẽ tạo ra một vòng lặp phản hồi mạnh mẽ. Điều này đảm bảo rằng các quyết định mang tính chiến lược của bạn, cho dù là trong việc chọn địa điểm bán lẻ hay lập kế hoạch hậu cần, đều dựa trên dữ liệu không chỉ có ý nghĩa thống kê mà còn có thể xác minh được tính chính xác.

Các bước tiếp theo

  • Khám phá các hàm Đếm địa điểm để xem cách chúng có thể trả lời các câu hỏi phân tích khác nhau.
  • Xem tài liệu về Places API để khám phá các trường khác mà bạn có thể yêu cầu nhằm làm phong phú thêm bản phân tích của mình.

Người đóng góp

Henrik Valve | DevX Kỹ sư