Consultar y visualizar datos de 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 empezar
Si aún no lo has hecho, crea una instancia de Vertex AI Workbench.
Roles obligatorios
Para asegurarte de que la cuenta de servicio de tu instancia tiene los permisos necesarios para consultar datos en BigQuery, pide a tu administrador que le conceda el rol de gestión de identidades y accesos de consumidor de uso de servicios (roles/serviceusage.serviceUsageConsumer
) en el proyecto.
Es posible que tu administrador también pueda conceder a la cuenta de servicio de tu instancia los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Abrir JupyterLab
En la consola, ve a la página Instancias. Google Cloud
Junto al nombre de tu instancia de Vertex AI Workbench, haz clic en Abrir JupyterLab.
Tu instancia de Vertex AI Workbench abre JupyterLab.
Leer datos de BigQuery
En las dos secciones siguientes, leerás datos de BigQuery que usarás para crear visualizaciones más adelante. Estos pasos son idénticos a los que se indican en el artículo Consultar datos de BigQuery desde JupyterLab, por lo que, si ya los has completado, puedes ir directamente a la sección Obtener un resumen de los datos de una tabla de BigQuery.
Consultar datos con el comando mágico %%bigquery
En esta sección, escribirás código SQL directamente en celdas de un cuaderno y leerás datos de BigQuery en el cuaderno de Python.
Los comandos mágicos que usan un carácter de porcentaje simple o doble (%
o %%
) te permiten usar una sintaxis mínima para interactuar con BigQuery en el cuaderno. La biblioteca de 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 de cliente de BigQuery para Python con el fin de ejecutar la consulta proporcionada, convertir los resultados en un DataFrame de pandas, guardar los resultados en una variable (opcional) y, a continuación, mostrarlos.
Nota: Desde la versión 1.26.0 del paquete de google-cloud-bigquery
Python, las %%bigquery
mágicas usan de forma predeterminada la API Storage de BigQuery para descargar los resultados.
Para abrir un archivo de cuaderno, selecciona Archivo > Nuevo > Cuaderno.
En el cuadro de diálogo Seleccionar kernel, elige Python 3 y, a continuación, haz clic en Seleccionar.
Se abrirá el nuevo archivo IPYNB.
Para obtener el número de regiones por país en el
international_top_terms
conjunto de datos, introduce la siguiente instrucción:%%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;
Haz clic en
Ejecutar celda.El resultado debería ser similar al siguiente:
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 ...
En la siguiente celda (debajo de la salida de la celda anterior), introduce el siguiente comando para ejecutar la misma consulta, pero esta vez guarda los resultados en un nuevo DataFrame de pandas llamado
regions_by_country
. Para proporcionar ese nombre, usa un argumento con el comando mágico%%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: Para obtener más información sobre los argumentos disponibles para el comando
%%bigquery
, consulta la documentación de los comandos mágicos de la biblioteca de cliente.Haz clic en
Ejecutar celda.En la siguiente celda, introduce el siguiente comando para ver las primeras filas de los resultados de la consulta que acabas de leer:
regions_by_country.head()
Haz clic en
Ejecutar celda.El DataFrame de pandas
regions_by_country
está listo para representarse.
Consultar datos directamente con la biblioteca cliente de BigQuery
En esta sección, usarás la biblioteca de cliente de BigQuery para Python directamente para leer datos en el cuaderno de Python.
La biblioteca de cliente te ofrece más control sobre tus consultas y te permite usar configuraciones más complejas para consultas y trabajos. Las integraciones de la biblioteca con pandas te permiten combinar la potencia de SQL declarativo con código imperativo (Python) para analizar, visualizar y transformar tus datos.
Nota: Puedes usar varias bibliotecas de Python para analizar, organizar y visualizar datos, como numpy
, pandas
, matplotlib
y muchas otras. Varias de estas bibliotecas se basan en un objeto DataFrame.
En la siguiente celda, introduce el siguiente código de Python para importar la biblioteca de 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.
Haz clic en
Ejecutar celda.En la siguiente celda, introduce el siguiente código para obtener el porcentaje de los términos principales diarios de EE. UU.
top_terms
que se solapan a lo largo del tiempo según el número de días de diferencia. La idea es analizar los términos principales de cada día y ver qué porcentaje de ellos se solapan con los términos principales del día anterior, de hace dos días, de hace tres días, etc. (para todos los pares de fechas de un periodo de 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 utiliza se encapsula en una cadena de Python y, a continuación, se pasa al método
query()
para ejecutar una consulta. El métodoto_dataframe
espera a que finalice la consulta y descarga los resultados en un DataFrame de pandas mediante la API Storage de BigQuery.Haz clic en
Ejecutar celda.Las primeras filas de los resultados de la consulta aparecen debajo de la celda de 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 cómo usar las bibliotecas de cliente de BigQuery, consulta la guía de inicio rápido Usar bibliotecas de cliente.
Obtener un resumen de los datos de una tabla de BigQuery
En esta sección, usarás un acceso directo de cuaderno para obtener estadísticas de resumen y visualizaciones de todos los campos de una tabla de BigQuery. Esta puede ser una forma rápida de crear un perfil de tus datos antes de analizarlos en profundidad.
La biblioteca cliente de BigQuery proporciona un comando mágico, %bigquery_stats
, que puedes llamar con un nombre de tabla específico para obtener una descripción general de la tabla y estadísticas detalladas de cada una de sus columnas.
En la siguiente celda, introduce el siguiente código para ejecutar ese análisis en la tabla
top_terms
US:%bigquery_stats bigquery-public-data.google_trends.top_terms
Haz clic en
Ejecutar celda.Después de un tiempo, aparece una imagen con varias estadísticas sobre cada una de las siete variables de la tabla
top_terms
. En la siguiente imagen se muestra parte de un ejemplo de resultado:
Visualizar datos de BigQuery
En esta sección, usarás las funciones de representación gráfica para visualizar los resultados de las consultas que has ejecutado anteriormente en tu cuaderno de Jupyter.
En la siguiente celda, introduce el siguiente código para usar el método
DataFrame.plot()
de pandas y crear un gráfico de barras que visualice los resultados de la consulta que devuelve el número de regiones por país:regions_by_country.plot(kind="bar", x="country_name", y="num_regions", figsize=(15, 10))
Haz clic en
Ejecutar celda.El gráfico es similar al siguiente:
En la siguiente celda, introduce el siguiente código para usar el método
DataFrame.plot()
de pandas y crear un gráfico de dispersión que visualice los resultados de la consulta sobre el porcentaje de solapamiento de los principales términos de búsqueda por 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) )
Haz clic en
Ejecutar celda.El gráfico es similar al siguiente. El tamaño de cada punto refleja el número de pares de fechas que tienen esa diferencia de días en los datos. Por ejemplo, hay más pares con un día de diferencia que con 30 días de diferencia, ya que los términos de búsqueda principales se muestran a diario durante aproximadamente un mes.
Para obtener más información sobre la visualización de datos, consulta la documentación de pandas.