Explora y visualiza datos en BigQuery desde JupyterLab

En esta página, se muestran algunos ejemplos de cómo explorar y visualizar datos almacenados en BigQuery desde la interfaz de JupyterLab de tu instancia de Vertex AI Workbench.

Antes de comenzar

Si aún no lo hiciste, crea una instancia de Vertex AI Workbench.

Roles obligatorios

Para garantizar que la cuenta de servicio de tu instancia tenga los permisos necesarios para consultar datos en BigQuery, pídele a tu administrador que le otorgue a la cuenta de servicio de tu instancia el rol de IAM del consumidor de Service Usage (roles/serviceusage.serviceUsageConsumer) en el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

Es posible que tu administrador también pueda otorgar a la cuenta de servicio de tu instancia los permisos necesarios mediante roles personalizados o con otros roles predefinidos.

Abre JupyterLab

  1. En la consola de Google Cloud, ve a la página Instancias.

    Ir a Instancias

  2. Junto al nombre de la instancia de Vertex AI Workbench, haz clic en Abrir JupyterLab.

    Tu instancia de Vertex AI Workbench abre JupyterLab.

Leer datos desde BigQuery

En las siguientes dos secciones, leerás datos de BigQuery que usarás para visualizar más adelante. Estos pasos son idénticos a los de Consulta datos en BigQuery desde JupyterLab, por lo que, si ya los completaste, puedes pasar a Obtén un resumen de los datos de una tabla de BigQuery.

Consulta datos con el comando mágico %%bigquery

En esta sección, escribirás SQL directamente en las celdas de notebook y leerás datos de BigQuery en el notebook de Python.

Los comandos automáticos que usan un carácter de porcentaje único o doble (% o %%) te permiten usar una sintaxis mínima para interactuar con BigQuery dentro del notebook. La biblioteca cliente de BigQuery para Python se instala automáticamente en una instancia de Vertex AI Workbench. En segundo plano, el comando mágico %%bigquery usa la biblioteca cliente de BigQuery para Python a fin de ejecutar la consulta determinada, convertir los resultados en un DataFrame de Pandas, guardar los resultados en una variable y, de forma opcional, guardarlos. y, luego, mostrar los resultados.

Nota: A partir de la versión 1.26.0 del paquete google-cloud-bigquery de Python, se usa la API de BigQuery Storage de forma predeterminada para descargar los resultados de los comandos mágicos %%bigquery.

  1. Para abrir un archivo de notebook, selecciona Archivo > Nuevo > Notebook.

  2. En el cuadro de diálogo Seleccionar Kernel, selecciona Python 3 y haz clic en Seleccionar.

    Se abrirá tu archivo IPYNB nuevo.

  3. Para obtener la cantidad de regiones por país en el conjunto de datos international_top_terms, ingresa la siguiente sentencia:

    %%bigquery
    SELECT
      country_code,
      country_name,
      COUNT(DISTINCT region_code) AS num_regions
    FROM
      `bigquery-public-data.google_trends.international_top_terms`
    WHERE
      refresh_date = DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY)
    GROUP BY
      country_code,
      country_name
    ORDER BY
      num_regions DESC;
  4. Haz clic en  Ejecutar celda.

    El resultado es similar a este:

    Query complete after 0.07s: 100%|██████████| 4/4 [00:00<00:00, 1440.60query/s]
    Downloading: 100%|██████████| 41/41 [00:02><00:00, 20.21rows/s]
    ... country_code country_name num_regions 0 TR Turkey 81 1 TH Thailand 77 2 VN Vietnam 63 3 JP Japan 47 4 RO Romania 42 5 NG Nigeria 37 6 IN India 36 7 ID Indonesia 34 8 CO Colombia 33 9 MX Mexico 32 10 BR Brazil 27 11 EG Egypt 27 12 UA Ukraine 27 13 CH Switzerland 26 14 AR Argentina 24 15 FR France 22 16 SE Sweden 21 17 HU Hungary 20 18 IT Italy 20 19 PT Portugal 20 20 NO Norway 19 21 FI Finland 18 22 NZ New Zealand 17 23 PH Philippines 17>
  5. En la celda a continuación (que se encuentra debajo del resultado de la celda anterior), ingresa el siguiente comando para ejecutar la misma consulta, pero esta vez guarda los resultados en un DataFrame de Pandas nuevo llamado regions_by_country. Debes proporcionar ese nombre mediante un argumento con el comando automático %%bigquery.

    %%bigquery regions_by_country
    SELECT
      country_code,
      country_name,
      COUNT(DISTINCT region_code) AS num_regions
    FROM
      `bigquery-public-data.google_trends.international_top_terms`
    WHERE
      refresh_date = DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY)
    GROUP BY
      country_code, country_name
    ORDER BY
      num_regions DESC;

    Nota: Si deseas obtener más información sobre los argumentos disponibles para el comando %%bigquery, consulta la documentación de comandos mágicos de la biblioteca cliente.

  6. Haz clic en  Ejecutar celda.

  7. En la siguiente celda, ingresa el siguiente comando para ver las primeras filas de los resultados de la consulta que acabas de leer:

    regions_by_country.head()
    
  8. Haz clic en  Ejecutar celda.

    El DataFrame de Pandas regions_by_country está listo para trazar.

Consulta datos mediante la biblioteca cliente de BigQuery directamente

En esta sección, usarás la biblioteca cliente de BigQuery para Python directamente a fin de leer datos en el notebook de Python.

La biblioteca cliente te brinda más control sobre tus consultas y te permite usar opciones de configuración más complejas para consultas y trabajos. Las integraciones de la biblioteca con Pandas te permiten combinar el rendimiento de SQL declarativo con el código imperativo (Python) para ayudarte a analizar, visualizar y transformar tus datos.

Nota: Puedes usar varias bibliotecas de análisis, transformación y visualización de datos de Python, como numpy, pandas, matplotlib y muchas opciones más. Varias de estas bibliotecas se basan en un objeto DataFrame.

  1. En la celda siguiente, ingresa el siguiente código de Python a fin de importar la biblioteca cliente de BigQuery para Python e inicializar un cliente:

    from google.cloud import bigquery
    
    client = bigquery.Client()
    

    El cliente de BigQuery se usa para enviar y recibir mensajes de la API de BigQuery.

  2. Haz clic en  Ejecutar celda.

  3. En la siguiente celda, ingresa el siguiente código para recuperar el porcentaje de términos principales diarios en los top_terms de EE.UU. que se superponen en el tiempo según la cantidad de días de diferencia. La idea es ver los términos principales de cada día y ver qué porcentaje de ellos se superpone con los términos principales del día anterior, 2 días antes, 3 días antes, etcétera (para todos pares de fechas durante aproximadamente un mes).

    sql = """
    WITH
      TopTermsByDate AS (
        SELECT DISTINCT refresh_date AS date, term
        FROM `bigquery-public-data.google_trends.top_terms`
      ),
      DistinctDates AS (
        SELECT DISTINCT date
        FROM TopTermsByDate
      )
    SELECT
      DATE_DIFF(Dates2.date, Date1Terms.date, DAY)
        AS days_apart,
      COUNT(DISTINCT (Dates2.date || Date1Terms.date))
        AS num_date_pairs,
      COUNT(Date1Terms.term) AS num_date1_terms,
      SUM(IF(Date2Terms.term IS NOT NULL, 1, 0))
        AS overlap_terms,
      SAFE_DIVIDE(
        SUM(IF(Date2Terms.term IS NOT NULL, 1, 0)),
        COUNT(Date1Terms.term)
        ) AS pct_overlap_terms
    FROM
      TopTermsByDate AS Date1Terms
    CROSS JOIN
      DistinctDates AS Dates2
    LEFT JOIN
      TopTermsByDate AS Date2Terms
      ON
        Dates2.date = Date2Terms.date
        AND Date1Terms.term = Date2Terms.term
    WHERE
      Date1Terms.date <= Dates2.date
    GROUP BY
      days_apart
    
    ORDER BY
      days_apart;
    """
    pct_overlap_terms_by_days_apart = client.query(sql).to_dataframe()
    
    pct_overlap_terms_by_days_apart.head()

    El SQL que se usa se encapsula en una string de Python y, luego, se pasa al método query() para ejecutar una consulta. El método to_dataframe espera a que finalice la consulta y descarga los resultados en un DataFrame de Pandas mediante la API de almacenamiento de BigQuery.

  4. Haz clic en  Ejecutar celda.

    Las primeras filas de los resultados de la consulta aparecen debajo de la celda del código.

       days_apart   num_date_pairs  num_date1_terms overlap_terms   pct_overlap_terms
     0          0             32               800            800            1.000000
     1          1             31               775            203            0.261935
     2          2             30               750             73            0.097333
     3          3             29               725             31            0.042759
     4          4             28               700             23            0.032857
    

Para obtener más información sobre el uso de las bibliotecas cliente de BigQuery, consulta la guía de inicio rápido Usa bibliotecas cliente.

Obtén un resumen de los datos de una tabla de BigQuery

En esta sección, usarás un acceso directo de notebook para obtener estadísticas y visualizaciones de resumen de todos los campos de una tabla de BigQuery. Esta puede ser una forma rápida de generar perfiles de tus datos antes de seguir explorando.

La biblioteca cliente de BigQuery proporciona un comando automático, %bigquery_stats, que puedes llamar con un nombre de tabla específico para proporcionar una descripción general de la tabla y estadísticas detalladas en cada una de las columnas de la tabla.

  1. En la siguiente celda, ingresa el siguiente código para ejecutar ese análisis en la tabla top_terms de EE.UU.:

    %bigquery_stats bigquery-public-data.google_trends.top_terms
    
  2. Haz clic en  Ejecutar celda.

    Después de ejecutarse durante un tiempo, aparece una imagen con varias estadísticas en cada una de las 7 variables en la tabla top_terms. En la siguiente imagen, se muestra una parte de un resultado de ejemplo:

    Descripción general de las estadísticas internacionales más importantes.

Visualiza datos de BigQuery

En esta sección, usarás funciones de trazado para visualizar los resultados de las consultas que ejecutaste antes en tu notebook de Jupyter.

  1. En la celda a continuación, ingresa el siguiente código para usar el método DataFrame.plot() de Pandas y crear un gráfico de barras que muestre los resultados de la consulta que muestra la cantidad de regiones por país:

    regions_by_country.plot(kind="bar", x="country_name", y="num_regions", figsize=(15, 10))
    
  2. Haz clic en  Ejecutar celda.

    La respuesta es similar al ejemplo a continuación:

    Resultados internacionales de los mejores términos por país

  3. En la celda a continuación, ingresa el siguiente código para usar el método DataFrame.plot() de Pandas y crear un gráfico de dispersión que muestre los resultados de la consulta en función del porcentaje de superposición en los términos de búsqueda principales según los días de diferencia:

    pct_overlap_terms_by_days_apart.plot(
      kind="scatter",
      x="days_apart",
      y="pct_overlap_terms",
      s=len(pct_overlap_terms_by_days_apart["num_date_pairs"]) * 20,
      figsize=(15, 10)
      )
    
  4. Haz clic en  Ejecutar celda.

    El gráfico es similar al ejemplo a continuación: El tamaño de cada punto refleja la cantidad de pares de fechas que tienen esa cantidad de días de diferencia en los datos. Por ejemplo, hay más pares que tienen 1 día de diferencia y 30 días de diferencia porque los principales términos de búsqueda se muestran a diario durante un mes.

    Gráfico de términos internacionales según los días de diferencia.

Para obtener más información sobre la visualización de datos, consulta la documentación de Pandas.

¿Qué sigue?