Visualize gráficos com os DataFrames do BigQuery

Este documento demonstra como traçar vários tipos de gráficos através da biblioteca de visualização BigQuery DataFrames.

A bigframes.pandas API oferece um ecossistema completo de ferramentas para Python. A API suporta operações estatísticas avançadas e pode visualizar as agregações geradas a partir de DataFrames do BigQuery. Também pode mudar de BigQuery DataFrames para um pandas DataFrame com operações de amostragem incorporadas.

Histograma

O exemplo seguinte lê dados da tabela para traçar um histograma sobre a distribuição das profundidades do bico de pinguins:bigquery-public-data.ml_datasets.penguins

import bigframes.pandas as bpd

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

Exemplo de um histograma em DataFrames do BigQuery.

Gráfico de linhas

O exemplo seguinte usa dados da tabela bigquery-public-data.noaa_gsod.gsod2021 para traçar um gráfico de linhas das alterações da temperatura mediana ao longo do ano:

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()

Exemplo de um gráfico de linhas em DataFrames do BigQuery.

Gráfico de áreas

O exemplo seguinte usa a tabela bigquery-public-data.usa_names.usa_1910_2013 para acompanhar a popularidade dos nomes na história dos EUA e foca-se nos nomes Mary, Emily e 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)

Exemplo de um gráfico de área nos DataFrames do BigQuery.

Gráfico de barras

O exemplo seguinte usa a tabela bigquery-public-data.ml_datasets.penguins para visualizar a distribuição dos sexos dos pinguins:

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()

Exemplo de um gráfico de barras no BigQuery DataFrames.

Gráfico de dispersão

O exemplo seguinte usa a tabela bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2021 para explorar a relação entre os valores das tarifas de táxi e as distâncias das viagens:

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)

Exemplo de um gráfico de dispersão nos DataFrames do BigQuery.

Visualizar um grande conjunto de dados

O BigQuery DataFrames transfere dados para o seu computador local para visualização. O número de pontos de dados a transferir está limitado a 1000 por predefinição. Se o número de pontos de dados exceder o limite máximo, os DataFrames do BigQuery usam uma amostragem aleatória do número de pontos de dados igual ao limite máximo.

Pode substituir este limite definindo o parâmetro sampling_n ao traçar um gráfico, conforme mostrado no exemplo seguinte:

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)

Exemplo de um gráfico de linhas que visualiza um grande conjunto de dados em DataFrames do BigQuery.

Representação gráfica avançada com parâmetros pandas e Matplotlib

Pode transmitir mais parâmetros para ajustar o seu gráfico, tal como pode fazer com o pandas, porque a biblioteca de representação gráfica dos DataFrames do BigQuery é baseada no pandas e no Matplotlib. As secções seguintes descrevem exemplos.

Tendência de popularidade dos nomes com subgráficos

Usando os dados do histórico de nomes do exemplo de gráfico de área, o exemplo seguinte cria gráficos individuais para cada nome definindo subplots=True na chamada da função 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)

Exemplo de gráficos individuais com subgráficos em DataFrames do BigQuery.

Gráfico de dispersão de viagens de táxi com várias dimensões

Usando dados do exemplo de gráfico de dispersão, o exemplo seguinte muda o nome das etiquetas do eixo x e do eixo y, usa o parâmetro passenger_count para os tamanhos dos pontos, usa pontos de cor com o parâmetro tip_amount e redimensiona a 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,
)

Exemplo de um gráfico de dispersão com várias dimensões em DataFrames do BigQuery.

O que se segue?