Visualiza datos de BigQuery en notebooks de Jupyter


En este instructivo, se describe cómo explorar y visualizar datos mediante la biblioteca cliente de BigQuery para Python y Pandas en una instancia de notebook de Jupyter administrado en Vertex AI Workbench. Las herramientas de visualización de datos pueden ayudarte a analizar los datos de BigQuery de forma interactiva y, además, identificar tendencias y comunicar los datos. En este instructivo, se utilizan los datos que se encuentran en el conjunto de datos públicos de BigQuery de Google Trends.

Objetivos

  • Crear una instancia de notebook de Jupyter administrada con Vertex AI Workbench
  • Consultar datos de BigQuery con comandos automáticos en notebooks
  • Consultar y visualizar los datos de BigQuery usando la biblioteca cliente de Python de BigQuery y Pandas

Costos

BigQuery es un producto pago, por lo que generas costos de uso cuando accedes a él. El primer TB de datos de consultas que se procesan por mes es gratis. Para obtener más información, consulta la página de Precios de BigQuery.

Vertex AI Workbench es un producto pago, por lo que se generan costos de procesamiento, almacenamiento y administración cuando usas instancias de Vertex AI Workbench. Para obtener más información, consulta la página de precios de Vertex AI Workbench.

Antes de comenzar

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery API.

    Enable the API

    En los proyectos nuevos, BigQuery se habilita de forma automática.

  4. Habilita la API de Notebooks.

    Habilita la API de Notebook

Descripción general: Notebooks de Jupyter

Un notebook proporciona un entorno en el que podrás escribir y ejecutar código. En esencia, es un artefacto de origen que se guarda como un archivo IPYNB. Puede incluir contenido de texto descriptivo, bloques de código ejecutables y resultados procesados como HTML interactivo.

Estructuralmente, un notebook es una secuencia de celdas. Una celda es un bloque de texto de entrada que se evalúa para producir resultados. Las celdas pueden ser de uno de estos tres tipos:

  • Celdas de código: contienen un código para evaluar. El resultado o los resultados del código ejecutado se renderizan en línea con el código ejecutado.
  • Celdas Markdown: contienen texto markdown que convierte HTML en encabezados, listas y texto con formato.
  • Puedes usar celdas sin procesar para procesar diferentes formatos de código en HTML o LaTeX.

En la siguiente imagen, se muestra una celda de Markdown seguida de una celda de código de Python, y, luego, el resultado:

Markdown de Jupyter y celdas de código

Cada notebook abierto está asociado con una sesión en ejecución (también conocida como kernel en Python). Esta sesión ejecuta todo el código del notebook y administra el estado. El estado incluye las variables con sus valores, funciones y clases, y cualquier módulo de Python existente que cargues.

En Google Cloud, puedes usar un entorno basado en notebooks de Vertex AI Workbench para consultar y explorar datos, desarrollar y entrenar un modelo, y ejecutar tu código como parte de una canalización. En este instructivo, crearás una instancia de notebook administrada en Vertex AI Workbench y, luego, explorarás los datos de BigQuery dentro de la interfaz de JupyterLab.

Crea una instancia de notebooks administrados

En esta sección, configurarás una instancia de JupyterLab en Google Cloud para que puedas crear notebooks administrados.

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

    Ir a Workbench

  2. Haz clic en  Notebook nuevo.

  3. En el campo Nombre del notebook, ingresa un nombre para tu instancia.

  4. En la lista Región, selecciona una región para la instancia.

  5. En la sección Permiso, selecciona una opción para definir qué usuarios pueden acceder a la instancia de notebook administrada:

    • Cuenta de servicio: Esta opción otorga acceso a todos los usuarios que tienen acceso a la cuenta de servicio de Compute Engine que vinculas al entorno de ejecución. Para especificar tu propia cuenta de servicio, desmarca la casilla de verificación Usar la cuenta de servicio predeterminada de Compute Engine y, luego, ingresa la dirección de correo electrónico de la cuenta de servicio que deseas usar. Para obtener más información sobre las cuentas de servicio, consulta Tipos de cuentas de servicio.
    • Solo usuario único: Esta opción le otorga acceso solo a un usuario específico. En el campo Correo electrónico del usuario, ingresa la dirección de correo electrónico de la cuenta del usuario que usará la instancia de notebooks administrados.
  6. Opcional: Para modificar la configuración avanzada de tu instancia, haz clic en Configuración avanzada. Para obtener más información, consulta Crea una instancia mediante la configuración avanzada.

  7. Haz clic en Crear.

    Espera unos minutos hasta que se cree la instancia. Vertex AI Workbench inicia la instancia de forma automática. Cuando la instancia está lista para usarse, Vertex AI Workbench activa un vínculo Abrir JupyterLab.

Explora recursos de BigQuery en JupyterLab

En esta sección, abrirás JupyterLab y explorarás los recursos de BigQuery que están disponibles en una instancia de notebook administrada.

  1. En la fila de la instancia de notebook administrada que creaste, haz clic en Abrir JupyterLab.

    Si se te solicita, haz clic en Autenticar si aceptas las condiciones. Tu instancia de notebook administrada abre JupyterLab en una pestaña del navegador nueva.

  2. En el menú de navegación de JupyterLab, haz clic en BigQuery BigQuery in Notebooks.

    En el panel BigQuery, se enumeran los proyectos y conjuntos de datos disponibles, en los que puedes realizar tareas de la siguiente manera:

    • Para ver la descripción de un conjunto de datos, haz doble clic en el nombre del conjunto de datos.
    • Para mostrar las tablas, vistas y modelos de un conjunto de datos, expande el conjunto de datos.
    • Para abrir una descripción resumida como una pestaña en JupyterLab, haz doble clic en una tabla, una vista o un modelo.

    Nota: En la descripción del resumen de una tabla, haz clic en la pestaña Vista previa para obtener una vista previa de sus datos. En la siguiente imagen, se muestra una vista previa de la tabla international_top_terms que se encuentra en el conjunto de datos google_trends en el proyecto bigquery-public-data:

    Lista internacional de términos principales.

Consulta datos del notebook 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 notebooks administrados. 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 (Local) 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 en un notebook directamente con la biblioteca cliente de BigQuery

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 cadena 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 a través de la API de BigQuery Storage.

  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.

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.

Usa el comando %bigquery_stats para obtener estadísticas y visualizaciones de todas las columnas de la tabla

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.

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 el historial de consultas y reutiliza las consultas

Para ver el historial de consultas como una pestaña en JupyterLab, realiza los siguientes pasos:

  1. En el menú de navegación de JupyterLab, haz clic en BigQuery BigQuery in Notebooks (BigQuery en notebooks) para abrir el panel BigQuery.

  2. En el panel BigQuery, desplázate hacia abajo y haz clic en Historial de consultas.

    Historial de consultas destacado en la parte inferior del panel de navegación izquierdo

    Se abre una lista de tus consultas en una pestaña nueva en la que puedes realizar tareas como las siguientes:

    • Para ver los detalles de una consulta, como su ID de trabajo, cuándo se ejecutó la consulta y cuánto tiempo tardó, haz clic en la consulta.
    • Si quieres revisar la consulta, volver a ejecutarla o copiarla en el notebook para usarla más adelante, haz clic en Abrir consulta en el editor.

Guarda y descarga tu notebook

En esta sección, guardarás tu notebook y lo descargarás si lo deseas para el uso futuro después de limpiar los recursos usados en este instructivo.

  1. Selecciona File > Save Notebook.
  2. Selecciona Archivo > Descargar para descargar una copia local del notebook como un archivo IPYNB en tu computadora.

Realiza una limpieza

La manera más fácil de eliminar la facturación es borrar el proyecto de Google Cloud que creaste para este instructivo.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

¿Qué sigue?