Visualiza gráficos con BigQuery DataFrames

En este documento, se muestra cómo generar gráficos de varios tipos con la biblioteca de visualización de BigQuery DataFrames.

La API de bigframes.pandas proporciona un ecosistema completo de herramientas para Python. La API admite operaciones estadísticas avanzadas, y puedes visualizar las agregaciones generadas a partir de BigQuery DataFrames. También puedes cambiar de BigQuery DataFrames a un DataFrame pandas con operaciones de muestreo integradas.

Histograma

En el siguiente ejemplo, se leen datos de la tabla bigquery-public-data.ml_datasets.penguins para generar un histograma sobre la distribución de las profundidades del culmen de los pingüinos:

import bigframes.pandas as bpd

penguins = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")
penguins["culmen_depth_mm"].plot.hist(bins=40)

Ejemplo de un histograma en BigQuery DataFrames.

Gráfico de líneas

En el siguiente ejemplo, se usan datos de la tabla bigquery-public-data.noaa_gsod.gsod2021 para generar un gráfico de líneas de los cambios en la temperatura media a lo largo del año:

import bigframes.pandas as bpd

noaa_surface = bpd.read_gbq("bigquery-public-data.noaa_gsod.gsod2021")

# Calculate median temperature for each day
noaa_surface_median_temps = noaa_surface[["date", "temp"]].groupby("date").median()

noaa_surface_median_temps.plot.line()

Ejemplo de un gráfico de líneas en BigQuery DataFrames.

Gráfico de áreas

En el siguiente ejemplo, se usa la tabla bigquery-public-data.usa_names.usa_1910_2013 para hacer un seguimiento de la popularidad de los nombres en la historia de EE.UU. y se enfoca en los nombres Mary, Emily y Lisa:

import bigframes.pandas as bpd

usa_names = bpd.read_gbq("bigquery-public-data.usa_names.usa_1910_2013")

# Count the occurences of the target names each year. The result is a dataframe with a multi-index.
name_counts = (
    usa_names[usa_names["name"].isin(("Mary", "Emily", "Lisa"))]
    .groupby(("year", "name"))["number"]
    .sum()
)

# Flatten the index of the dataframe so that the counts for each name has their own columns.
name_counts = name_counts.unstack(level=1).fillna(0)

name_counts.plot.area(stacked=False, alpha=0.5)

Ejemplo de un gráfico de área en BigQuery DataFrames.

Gráfico de barras

En el siguiente ejemplo, se usa la tabla bigquery-public-data.ml_datasets.penguins para visualizar la distribución de los sexos de los pingüinos:

import bigframes.pandas as bpd

penguins = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")

penguin_count_by_sex = (
    penguins[penguins["sex"].isin(("MALE", "FEMALE"))]
    .groupby("sex")["species"]
    .count()
)
penguin_count_by_sex.plot.bar()

Ejemplo de un gráfico de barras en BigQuery DataFrames.

Diagrama de dispersión

En el siguiente ejemplo, se usa la tabla bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2021 para explorar la relación entre los importes de las tarifas de taxi y las distancias de los viajes:

import bigframes.pandas as bpd

taxi_trips = bpd.read_gbq(
    "bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2021"
).dropna()

# Data Cleaning
taxi_trips = taxi_trips[
    taxi_trips["trip_distance"].between(0, 10, inclusive="right")
]
taxi_trips = taxi_trips[taxi_trips["fare_amount"].between(0, 50, inclusive="right")]

# If you are using partial ordering mode, you will also need to assign an order to your dataset.
# Otherwise, the next line can be skipped.
taxi_trips = taxi_trips.sort_values("pickup_datetime")

taxi_trips.plot.scatter(x="trip_distance", y="fare_amount", alpha=0.5)

Ejemplo de un diagrama de dispersión en BigQuery DataFrames.

Visualiza un conjunto de datos grande

BigQuery DataFrames descarga datos en tu máquina local para la visualización. De forma predeterminada, la cantidad de puntos de datos que se pueden descargar está limitada a 1,000. Si la cantidad de puntos de datos supera el límite, los DataFrames de BigQuery toman una muestra aleatoria de la cantidad de puntos de datos igual al límite.

Puedes anular este límite configurando el parámetro sampling_n cuando traces un gráfico, como se muestra en el siguiente ejemplo:

import bigframes.pandas as bpd

noaa_surface = bpd.read_gbq("bigquery-public-data.noaa_gsod.gsod2021")

# Calculate median temperature for each day
noaa_surface_median_temps = noaa_surface[["date", "temp"]].groupby("date").median()

noaa_surface_median_temps.plot.line(sampling_n=40)

Ejemplo de un gráfico de líneas que visualiza un conjunto de datos grande en BigQuery DataFrames.

Gráficos avanzados con parámetros de Pandas y Matplotlib

Puedes pasar más parámetros para ajustar tu gráfico, como lo harías con Pandas, ya que la biblioteca de gráficos de BigQuery DataFrames se basa en Pandas y Matplotlib. En las siguientes secciones, se describen algunos ejemplos.

Tendencia de popularidad de nombres con gráficos secundarios

Con los datos del historial de nombres del ejemplo de gráfico de área, el siguiente ejemplo crea gráficos individuales para cada nombre configurando subplots=True en la llamada a la función plot.area():

import bigframes.pandas as bpd

usa_names = bpd.read_gbq("bigquery-public-data.usa_names.usa_1910_2013")

# Count the occurences of the target names each year. The result is a dataframe with a multi-index.
name_counts = (
    usa_names[usa_names["name"].isin(("Mary", "Emily", "Lisa"))]
    .groupby(("year", "name"))["number"]
    .sum()
)

# Flatten the index of the dataframe so that the counts for each name has their own columns.
name_counts = name_counts.unstack(level=1).fillna(0)

name_counts.plot.area(subplots=True, alpha=0.5)

Ejemplo de gráficos individuales con gráficos secundarios en BigQuery DataFrames.

Diagrama de dispersión de viajes en taxi con múltiples dimensiones

Con los datos del ejemplo de diagrama de dispersión, el siguiente ejemplo cambia el nombre de las etiquetas de los ejes X e Y, usa el parámetro passenger_count para los tamaños de los puntos, usa puntos de color con el parámetro tip_amount y cambia el tamaño de la figura:

import bigframes.pandas as bpd

taxi_trips = bpd.read_gbq(
    "bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2021"
).dropna()

# Data Cleaning
taxi_trips = taxi_trips[
    taxi_trips["trip_distance"].between(0, 10, inclusive="right")
]
taxi_trips = taxi_trips[taxi_trips["fare_amount"].between(0, 50, inclusive="right")]

# If you are using partial ordering mode, you also need to assign an order to your dataset.
# Otherwise, the next line can be skipped.
taxi_trips = taxi_trips.sort_values("pickup_datetime")

taxi_trips["passenger_count_scaled"] = taxi_trips["passenger_count"] * 30

taxi_trips.plot.scatter(
    x="trip_distance",
    xlabel="trip distance (miles)",
    y="fare_amount",
    ylabel="fare amount (usd)",
    alpha=0.5,
    s="passenger_count_scaled",
    label="passenger_count",
    c="tip_amount",
    cmap="jet",
    colorbar=True,
    legend=True,
    figsize=(15, 7),
    sampling_n=1000,
)

Ejemplo de diagrama de dispersión con varias dimensiones en BigQuery DataFrames.

¿Qué sigue?