Visualizzare i grafici utilizzando BigQuery DataFrames

Questo documento mostra come tracciare vari tipi di grafici utilizzando la libreria di visualizzazione BigQuery DataFrames.

L'API bigframes.pandas fornisce un ecosistema completo di strumenti per Python. L'API supporta operazioni statistiche avanzate e puoi visualizzare gli aggregati generati da BigQuery DataFrames. Puoi anche passare da BigQuery DataFrames a un DataFrame pandas con operazioni di campionamento integrate.

Istogramma

L'esempio seguente legge i dati dalla tabella bigquery-public-data.ml_datasets.penguins per tracciare un istogramma sulla distribuzione delle profondità del culmen dei pinguini:

import bigframes.pandas as bpd

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

Esempio di istogramma in BigQuery DataFrames.

Grafico a linee

L'esempio seguente utilizza i dati della tabella bigquery-public-data.noaa_gsod.gsod2021 per tracciare un grafico a linee delle variazioni della temperatura media durante l'anno:

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

Esempio di grafico a linee in BigQuery DataFrames.

Grafico ad area

L'esempio seguente utilizza la tabella bigquery-public-data.usa_names.usa_1910_2013 per monitorare la popolarità dei nomi nella storia degli Stati Uniti e si concentra sui nomi 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)

Esempio di un grafico ad area in BigQuery DataFrames.

Grafico a barre

L'esempio seguente utilizza la tabella bigquery-public-data.ml_datasets.penguins per visualizzare la distribuzione dei sessi dei pinguini:

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

Esempio di un grafico a barre in BigQuery DataFrames.

Grafico a dispersione

L'esempio seguente utilizza la tabella bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2021 per esplorare la relazione tra gli importi delle tariffe dei taxi e le distanze dei viaggi:

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)

Esempio di un grafico a dispersione in BigQuery DataFrames.

Visualizzare un set di dati di grandi dimensioni

BigQuery DataFrames scarica i dati sulla tua macchina locale per la visualizzazione. Per impostazione predefinita,il numero di punti dati da scaricare è limitato a 1000. Se il numero di punti dati supera il limite, BigQuery DataFrames campiona in modo casuale il numero di punti dati pari al limite.

Puoi eseguire l'override di questo limite impostando il parametro sampling_n durante la creazione di un grafico, come mostrato nell'esempio seguente:

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)

Esempio di un grafico a linee che visualizza un set di dati di grandi dimensioni in BigQuery DataFrames.

Grafici avanzati con i parametri di pandas e Matplotlib

Puoi passare più parametri per perfezionare il grafico come con pandas, perché la libreria di tracciamento di BigQuery DataFrames è basata su pandas e Matplotlib. Nelle sezioni seguenti vengono descritti alcuni esempi.

Tendenza di popolarità dei nomi con grafici secondari

Utilizzando i dati della cronologia dei nomi dell'esempio di grafico ad area, l'esempio seguente crea grafici individuali per ogni nome impostando subplots=True nella chiamata alla funzione 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)

Esempio di singoli grafici con sottografici in BigQuery DataFrames.

Grafico a dispersione dei viaggi in taxi con più dimensioni

Utilizzando i dati dell'esempio di grafico a dispersione, l'esempio seguente rinomina le etichette per l'asse x e l'asse y, utilizza il parametro passenger_count per le dimensioni dei punti, utilizza i punti colorati con il parametro tip_amount e ridimensiona 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,
)

Esempio di grafico a dispersione con più dimensioni in BigQuery DataFrames.

Passaggi successivi