Visualiza datos de BigQuery en un notebook de Jupyter

BigQuery es un almacén de datos estadísticos a escala de petabytes que puedes usar para ejecutar consultas de SQL en grandes cantidades de datos casi en tiempo real.

Las herramientas de visualización de datos pueden ayudarte a comprender los datos de BigQuery y a analizarlos de forma interactiva. Puedes usar herramientas de visualización para que sea más simple identificar tendencias, responder a ellas y hacer predicciones con los datos. En este instructivo, usarás la biblioteca cliente de BigQuery para Python y Pandas en un notebook de Jupyter a fin de visualizar datos en la tabla de natalidad de muestra de BigQuery.

Objetivos

En este instructivo podrás hacer lo siguiente:

  • Configurar un entorno para ejecutar notebooks de Jupyter.
  • Consultar y visualizar los datos de BigQuery usando la biblioteca cliente de BigQuery, Python y Pandas

Costos

BigQuery es un producto pago y genera costos de uso cuando accedes a él. El precio de consulta de BigQuery proporciona el primer TB por mes de forma gratuita. Para obtener más información, consulta la página de Precios de BigQuery.

Antes de comenzar

Antes de comenzar con este instructivo, usa Google Cloud Console para crear o seleccionar un proyecto.

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página de selección de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

    Ir a la página Selector de proyectos

  3. BigQuery se habilita automáticamente en proyectos nuevos. Para activar BigQuery en un proyecto existente, dirígete a Habilita la API BigQuery.

    Habilita la API

    .
  4. BigQuery ofrece una zona de pruebas si no deseas proporcionar una tarjeta de crédito o habilitar la facturación del proyecto. Los pasos de este tema funcionan para un proyecto, más allá de si el proyecto tiene o no habilitada la facturación. Si deseas habilitar la facturación, consulta cómo habilitar la facturación.

Configura un entorno local de Jupyter

En este instructivo, usarás un notebook de Jupyter alojado de forma local. Completa los siguientes pasos para instalar Jupyter, configurar la autenticación e instalar las bibliotecas de Python requeridas.

  1. En tu terminal, ejecuta el siguiente comando a fin de instalar la última versión de la biblioteca cliente de BigQuery para Python, incluida la biblioteca de Pandas, que es necesaria en las funciones que usan Pandas:

    pip install --upgrade google-cloud-bigquery[pandas]
    
  2. Sigue las instrucciones de instalación en la documentación de Jupyter para instalar Jupyter.

  3. Sigue las instrucciones en la página Comenzar a usar la autenticación para configurar las credenciales predeterminadas de la aplicación. La autenticación se configura cuando creas una cuenta de servicio y una variable de entorno.

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 asociados (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 los siguientes tipos:

  • Celdas de código: contienen un código para evaluar. Cualquier salida o resultado de la ejecución del código se procesa de forma inmediata debajo del código de entrada.

  • Celdas de markdown: Contienen texto markdown que se convierte en HTML para producir encabezados, listas y texto con formato.

La siguiente captura de pantalla muestra una celda de markdown seguida de una celda de código de Python. Ten en cuenta que el resultado de la celda de Python se muestra justo debajo del código.

Markdown de Jupyter y celdas de código

Cada notebook abierto está asociado con una sesión en ejecución. En Python, esto también se conoce como kernel. En esta sesión, se ejecuta todo el código ingresado en el notebook y se administra el estado (variables, sus valores, funciones y clases, y cualquier módulo de Python existente que cargues).

Consulta y visualiza datos de BigQuery

En esta sección del instructivo, crearás un notebook de Datalab para consultar y visualizar datos en BigQuery. Puedes crear visualizaciones mediante los datos en la tabla de natalidad de muestra. Todas las consultas en este instructivo tienen la sintaxis de SQL estándar.

Sigue los pasos que se encuentran a continuación, para consultar y visualizar datos de BigQuery mediante un notebook de Jupyter:

  1. Si aún no has iniciado Jupyter, ejecuta el siguiente comando en tu terminal:

    jupyter notebook
    
  2. Jupyter ahora se debería ejecutar y abrir en una ventana del navegador. En la ventana de Jupyter, haz clic en el botón New (Nuevo) y selecciona Python 3 para crear un notebook de Python.

    Notebook nuevo de Python 3 de Jupyter.

  3. En la parte superior de la página, haz clic en Sin título

  4. En el cuadro de diálogo Rename notebook, escribe un nombre nuevo, como “instructivo de BigQuery” y haz clic en Rename.

  5. La biblioteca cliente de BigQuery para Python proporciona un comando automático que te permite ejecutar consultas con un código mínimo. Para cargar los comandos automáticos de la biblioteca cliente, pega el siguiente código en la primera celda del notebook.

    %load_ext google.cloud.bigquery
  6. Para ejecutar el comando, haz clic en el botón Ejecutar o usa SHIFT + ENTER.

  7. La biblioteca cliente de BigQuery para Python proporciona una celda automática, %%bigquery, que ejecuta una consulta de SQL y muestra los resultados como un DataFrame de Pandas. Ingresa el código que se encuentra a continuación en la siguiente celda para mostrar el total de nacimientos por año:

    %%bigquery
    SELECT
        source_year AS year,
        COUNT(is_male) AS birth_count
    FROM `bigquery-public-data.samples.natality`
    GROUP BY year
    ORDER BY year DESC
    LIMIT 15
  8. Haz clic en Ejecutar.

  9. Los resultados de la consulta aparecen debajo de la celda del código.

    Nacimientos por año.

  10. En el siguiente bloque de celdas, ingresa el comando que se muestra a continuación para ejecutar la misma consulta, pero esta vez guarda los resultados en una variable total_births nueva, que se proporciona como un argumento de %%bigquery. Los resultados se pueden usar para un análisis y una visualización más detallados.

    %%bigquery total_births
    SELECT
        source_year AS year,
        COUNT(is_male) AS birth_count
    FROM `bigquery-public-data.samples.natality`
    GROUP BY year
    ORDER BY year DESC
    LIMIT 15
  11. Haz clic en Ejecutar.

  12. Ahora tienes un DataFrame de Pandas guardado en la variable total_births, que está listo para trazar. A fin de prepararte para trazar los resultados de la consulta, pega el comando automático integrado que se muestra a continuación en la siguiente celda para activar matplotlib. Matplotlib es la biblioteca que usa Pandas para trazar.

    %matplotlib inline
  13. Haz clic en Ejecutar.

  14. En la celda a continuación, ingresa el siguiente código para usar el método DataFrame.plot() de Pandas y poder visualizar los resultados de la consulta como un gráfico de barras. Consulta la documentación de Pandas para obtener más información sobre la visualización de datos con Pandas.

    total_births.plot(kind='bar', x='year', y='birth_count');
  15. Haz clic en Ejecutar.

  16. El gráfico aparece debajo del bloque de código.

    Gráfico de barras de nacimientos por año.

  17. Luego, pega en la siguiente celda la consulta que se muestra a continuación para recuperar la cantidad de nacimientos por día de la semana.

    %%bigquery births_by_weekday
    SELECT
        wday,
        SUM(CASE WHEN is_male THEN 1 ELSE 0 END) AS male_births,
        SUM(CASE WHEN is_male THEN 0 ELSE 1 END) AS female_births
    FROM `bigquery-public-data.samples.natality`
    WHERE wday IS NOT NULL
    GROUP BY wday
    ORDER BY wday ASC

    Debido a que el campo wday (día de la semana) permite valores nulos, la consulta excluye los registros donde wday es nulo.

  18. Haz clic en Ejecutar.

  19. En la siguiente celda, ingresa el siguiente código para visualizar los resultados de la consulta con un gráfico de líneas.

    births_by_weekday.plot(x='wday');
  20. Haz clic en Ejecutar.

  21. El gráfico aparece debajo del bloque de código. Observa que la cantidad de nacimientos disminuye de forma drástica el domingo (1) y el sábado (7).

    Gráfico de líneas de nacimientos por día de la semana.

  22. Haz clic en File > Save and Checkpoint o en el ícono de guardar en la barra de herramientas. Crear un punto de control te permite revertir el notebook a un estado anterior.

DataFrames de Panda

Los comandos automáticos te permiten usar una sintaxis mínima para interactuar con BigQuery. En segundo plano, %%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, por último, mostrarlos. Usar la biblioteca cliente de BigQuery para Python directamente, en lugar de hacerlo a través de comandos automáticos, te da más control sobre las consultas y te permite usar opciones de configuración más complejas. Las integraciones de la biblioteca con Pandas te permiten combinar el rendimiento de SQL declarativo con el código imperativo (Python) para realizar tareas de análisis, visualización y transformación de datos interesantes.

Consulta y visualiza datos de BigQuery con DataFrame de Pandas

En esta sección del instructivo, puedes consultar y visualizar datos en BigQuery mediante los DataFrames de Pandas. Debes usar la biblioteca cliente de BigQuery para Python a fin de consultar datos de BigQuery. Usa la biblioteca de Pandas para analizar datos mediante DataFrames.

  1. Escribe el código de Python que se muestra a continuación en la siguiente celda a fin de importar la biblioteca cliente de BigQuery para Python e inicializar un cliente. El cliente de BigQuery se usa para enviar y recibir mensajes de la API de BigQuery.

    from google.cloud import bigquery
    client = bigquery.Client()
  2. Haz clic en Ejecutar.

  3. Usa el método Client.query() para ejecutar una consulta. En la siguiente celda, ingresa el código que se muestra a continuación a fin de ejecutar una consulta que recupere el recuento anual de nacimientos múltiples por pluralidad (2 para gemelos, 3 para trillizos, etcétera).

    sql = """
    SELECT
        plurality,
        COUNT(1) AS count,
        year
    FROM
        `bigquery-public-data.samples.natality`
    WHERE
        NOT IS_NAN(plurality) AND plurality > 1
    GROUP BY
        plurality, year
    ORDER BY
        count DESC
    """
    df = client.query(sql).to_dataframe()
    df.head()
  4. Haz clic en Ejecutar.

  5. Si quieres trazar los resultados de la consulta en tu DataFrame, inserta el código que se muestra a continuación en la siguiente celda para alternar los datos y crear un gráfico de barras apiladas del recuento de nacimientos múltiples a lo largo del tiempo.

    pivot_table = df.pivot(index='year', columns='plurality', values='count')
    pivot_table.plot(kind='bar', stacked=True, figsize=(15, 7));
  6. Haz clic en Ejecutar.

  7. El gráfico aparece debajo del bloque de código.

    Gráfico de barras apiladas de nacimientos múltiples por año.

  8. En la siguiente celda, ingresa la consulta que se muestra a continuación para recuperar la cantidad de nacimientos según el número de semanas de gestación.

    sql = """
    SELECT
        gestation_weeks,
        COUNT(1) AS count
    FROM
        `bigquery-public-data.samples.natality`
    WHERE
        NOT IS_NAN(gestation_weeks) AND gestation_weeks <> 99
    GROUP BY
        gestation_weeks
    ORDER BY
        gestation_weeks
    """
    df = client.query(sql).to_dataframe()
  9. Haz clic en Ejecutar.

  10. Para trazar los resultados de la consulta en tu DataFrame, pega el código a continuación en la siguiente celda.

    ax = df.plot(kind='bar', x='gestation_weeks', y='count', figsize=(15,7))
    ax.set_title('Count of Births by Gestation Weeks')
    ax.set_xlabel('Gestation Weeks')
    ax.set_ylabel('Count');
  11. Haz clic en Ejecutar.

  12. El gráfico de barras aparece debajo del bloque de código.

    Peso promedio por semanas de gestación.

Próximos pasos

  • Obtén más información sobre cómo escribir consultas para BigQuery: en Consulta datos de la documentación de BigQuery, se explica cómo ejecutar consultas, crear funciones definidas por el usuario (UDF) y mucho más.

  • Explora la sintaxis de BigQuery: el dialecto preferido para las consultas de SQL en BigQuery es SQL estándar, que se describe en la referencia de SQL. La sintaxis similar a SQL heredado de BigQuery se describe en la Referencia de consultas (SQL heredado).