Convalidare i dati di Places Insights utilizzando ID luogo di esempio

In questo documento imparerai a utilizzare i dati di esempio degli ID luogo di Places Insights, utilizzando le funzioni di conteggio dei luoghi, insieme a ricerche mirate dei dettagli dei luoghi, per aumentare l'affidabilità dei risultati.

Per un'implementazione di riferimento dettagliata di questo pattern, consulta questo notebook esplicativo:

Una mappa termica della densità dei luoghi di Londra, con singoli indicatori sovrapposti per
convalidare i dati statistici.

Il pattern architettonico

Questo pattern architetturale ti offre un workflow ripetibile per colmare il divario tra l'analisi statistica di alto livello e la verifica dei dati di riferimento. Combinando la scalabilità di BigQuery con la precisione dell'API Places, puoi convalidare con sicurezza i risultati analitici. Ciò è particolarmente utile per la selezione dei siti, l'analisi della concorrenza e le ricerche di mercato, in cui la fiducia nei dati è fondamentale.

Il fulcro di questo pattern prevede quattro passaggi chiave:

  1. Esegui analisi su larga scala:utilizza una funzione di conteggio dei luoghi di Places Insights in BigQuery per analizzare i dati dei luoghi in un'ampia area geografica, ad esempio un'intera città o regione.
  2. Isola ed estrai campioni:identifica le aree di interesse (ad es. gli "hotspot" ad alta densità) dai risultati aggregati ed estrai i sample_place_ids forniti dalla funzione.
  3. Recupera i dettagli della verità di riferimento: utilizza gli ID luogo estratti per effettuare chiamate mirate all'API Place Details per recuperare dettagli reali e completi per ogni luogo.
  4. Crea una visualizzazione combinata: sovrapponi i dati dettagliati dei luoghi alla mappa statistica di primo livello iniziale per verificare visivamente che i conteggi aggregati riflettano la realtà sul campo.

Flusso di lavoro della soluzione

Questo flusso di lavoro ti consente di colmare il divario tra le tendenze a livello macro e i fatti a livello micro. Inizi con una visione statistica generale e fai il drill-down in modo strategico per verificare i dati con esempi specifici e reali.

Analizzare la densità di luoghi su larga scala con Places Insights

Il primo passo è comprendere il panorama a un livello generale. Anziché recuperare migliaia di singoli punti di interesse, puoi eseguire una singola query per ottenere un riepilogo statistico.

La funzione Places Insights PLACES_COUNT_PER_H3 è ideale per questo. Aggrega i conteggi dei PDI in un sistema di griglia esagonale (H3), consentendoti di identificare rapidamente le aree di densità alta o bassa in base ai tuoi criteri specifici (ad es. ristoranti con un punteggio elevato che sono operativi).

Di seguito è riportato un esempio di query. Tieni presente che dovrai fornire la geografia dell'area di ricerca. Un set di dati aperto, come il set di dati pubblico di BigQuery Overture Maps Data, può essere utilizzato per recuperare i dati dei confini geografici.

Per i confini dei set di dati aperti utilizzati di frequente, consigliamo di materializzarli in una tabella del tuo progetto. Ciò riduce significativamente i costi di BigQuery e migliora le prestazioni delle query.

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

Filtro e convalida per ID brand

Se vuoi convalidare i conteggi e gli ID luogo di esempio per brand specifici, fornisci un elenco di ID brand utilizzando il filtro brand_ids.

Per ottenere l'ID brand di un brand di destinazione, esegui una query sulla tabella brands in BigQuery:

SELECT id, name
FROM `YOUR_PROJECT.places_insights___us.brands`
WHERE LOWER(name) LIKE "%starbucks%";

Dopo aver recuperato l'ID brand di destinazione (ad esempio, "1413758728321880760" per Starbucks), passalo all'interno dell'array di filtri brand_ids:

SELECT *
FROM
  `places_insights___us.PLACES_COUNT_PER_H3`(
    JSON_OBJECT(
      'geography', your_defined_geography,
      'h3_resolution', 8,
      'brand_ids', ["1413758728321880760"]
    )
  );

Durante il passaggio 3, la verifica della verità di riferimento, anziché confermare che un luogo corrisponde a categorie generali, puoi confrontare a livello di programmazione il nome visualizzato restituito dall'API Place Details con il nome del brand previsto utilizzando una corrispondenza di espressioni regolari. Ad esempio, puoi confrontare il campo response.display_name.text.

L'output di questa query fornisce una tabella di celle H3 e il conteggio dei luoghi all'interno di ciascuna, formando la base per una mappa termica di densità.

Una tabella dei risultati della query BigQuery che mostra le colonne per h3_cell_index, count e sample_place_ids.

Isolare gli hotspot ed estrarre gli ID luogo campione

Il risultato della funzione PLACES_COUNT_PER_H3 restituisce anche un array di sample_place_ids, fino a 250 ID luogo per elemento della risposta. Questi ID sono il collegamento dalla statistica aggregata ai singoli luoghi che contribuiscono a generarla.

Il sistema potrebbe prima identificare le celle più pertinenti dalla query iniziale. Ad esempio, potresti selezionare le prime 20 celle con i conteggi più alti. Poi, da questi hotspot, consolida i sample_place_ids in un unico elenco. Questo elenco rappresenta un campione selezionato dei PDI più interessanti delle aree più pertinenti, preparandoti alla verifica mirata.

Se elabori i risultati di BigQuery in Python utilizzando un DataFrame pandas, la logica per estrarre questi ID è semplice:

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

Una logica simile può essere applicata se si utilizzano altri linguaggi di programmazione.

Recuperare i dettagli di Ground Truth con l'API Places

Con l'elenco consolidato di ID luogo, ora puoi passare dall'analisi su larga scala al recupero di dati specifici. Utilizzerai questi ID per eseguire query sull'API Place Details per informazioni dettagliate su ogni posizione di esempio.

Questo è un passaggio di convalida fondamentale. Mentre Places Insights ti diceva quanti ristoranti si trovavano in una zona, l'API Places ti dice quali sono i ristoranti, fornendo il nome, l'indirizzo esatto, la latitudine/longitudine, la valutazione degli utenti e persino un link diretto alla loro posizione su Google Maps. In questo modo, i dati di esempio vengono arricchiti, trasformando gli ID astratti in luoghi concreti e verificabili.

Per l'elenco completo dei dati disponibili dall'API Place Details e il costo associato al recupero, consulta la documentazione dell'API.

Una richiesta all'API Places per un ID specifico utilizzando la libreria client Python avrebbe questo aspetto. Per maggiori dettagli, consulta gli esempi della libreria client dell'API Places (New).

# 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)]
)

Tieni presente che i campi di questa richiesta estraggono dati da due SKU di fatturazione diversi.

Quando una singola richiesta Place Details include campi di più SKU, l'intera richiesta viene fatturata alla tariffa dello SKU di livello più alto. Pertanto, questa chiamata specifica verrà fatturata come richiesta Place Details Pro.

Per controllare i costi, utilizza sempre FieldMask per richiedere solo i campi di cui la tua applicazione ha bisogno.

Creare una visualizzazione combinata per la convalida

Il passaggio finale consiste nel riunire entrambi i set di dati in un'unica visualizzazione. In questo modo puoi controllare immediatamente e in modo intuitivo l'analisi iniziale. La visualizzazione deve avere due livelli:

  1. Livello di base: una mappa coropletica o termica generata dai risultati PLACES_COUNT_PER_H3 iniziali, che mostra la densità complessiva dei luoghi nella tua area geografica.
  2. Livello superiore: un insieme di singoli indicatori per ogni punto d'interesse di esempio, tracciati utilizzando le coordinate precise recuperate dall'API Places nel passaggio precedente.

La logica per la creazione di questa visualizzazione combinata è espressa in questo esempio di pseudocodice:

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

Sovrapponendo i marcatori specifici e reali alla mappa di densità di alto livello, puoi confermare immediatamente che le aree identificate come hotspot contengono effettivamente un'alta concentrazione dei luoghi che stai analizzando. Questa conferma visiva aumenta notevolmente la fiducia nelle tue conclusioni basate sui dati.

Conclusione

Questo pattern architetturale fornisce un metodo solido ed efficiente per convalidare gli approfondimenti geospaziali su larga scala. Sfruttando Places Insights per un'analisi ampia e scalabile e l'API Place Details per una verifica mirata e basata su dati reali, crei un potente ciclo di feedback. In questo modo, le tue decisioni strategiche, che si tratti di selezione di siti di vendita al dettaglio o pianificazione della logistica, si basano su dati non solo statisticamente significativi, ma anche verificabili e accurati.

Passaggi successivi

Collaboratori

Henrik Valve | DevX Engineer