Visualiser des graphiques à l'aide de BigQuery DataFrames

Ce document explique comment tracer différents types de graphiques à l'aide de la bibliothèque de visualisation BigQuery DataFrames.

L'API bigframes.pandas fournit un écosystème complet d'outils pour Python. L'API accepte les opérations statistiques avancées et vous pouvez visualiser les agrégations générées à partir de BigQuery DataFrames. Vous pouvez également passer de BigQuery DataFrames à un DataFrame pandas avec des opérations d'échantillonnage intégrées.

Histogramme

L'exemple suivant lit les données de la table bigquery-public-data.ml_datasets.penguins pour représenter un histogramme de la distribution des profondeurs de bec des manchots :

import bigframes.pandas as bpd

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

Exemple d'histogramme dans BigQuery DataFrames.

Graphique en courbes

L'exemple suivant utilise les données de la table bigquery-public-data.noaa_gsod.gsod2021 pour représenter un graphique en courbes des variations de température médiane tout au long de l'année :

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

Exemple de graphique linéaire dans BigQuery DataFrames.

Graphique en aires

L'exemple suivant utilise la table bigquery-public-data.usa_names.usa_1910_2013 pour suivre la popularité des prénoms dans l'histoire des États-Unis et se concentre sur les prénoms Mary, Emily et 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)

Exemple de graphique en aires dans BigQuery DataFrames.

Graphique à barres

L'exemple suivant utilise la table bigquery-public-data.ml_datasets.penguins pour visualiser la répartition des sexes des manchots :

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

Exemple de graphique à barres dans BigQuery DataFrames.

Graphique à nuage de points

L'exemple suivant utilise la table bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2021 pour explorer la relation entre les montants des courses en taxi et les distances parcourues :

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)

Exemple de graphique en nuage de points dans BigQuery DataFrames.

Visualiser un grand ensemble de données

BigQuery DataFrames télécharge les données sur votre ordinateur local pour les visualiser. Par défaut,le nombre de points de données à télécharger est limité à 1 000. Si le nombre de points de données dépasse la limite, les DataFrames BigQuery échantillonnent aléatoirement le nombre de points de données égal à la limite.

Vous pouvez remplacer cette limite en définissant le paramètre sampling_n lorsque vous tracez un graphique, comme indiqué dans l'exemple suivant :

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)

Exemple de graphique en courbes visualisant un grand ensemble de données dans BigQuery DataFrames.

Représentation graphique avancée avec les paramètres pandas et Matplotlib

Vous pouvez transmettre d'autres paramètres pour affiner votre graphique, comme vous le feriez avec pandas, car la bibliothèque de graphiques de BigQuery DataFrames est optimisée par pandas et Matplotlib. Les sections suivantes décrivent des exemples.

Tendance de popularité des noms avec des sous-graphiques

En utilisant les données de l'historique des noms de l'exemple de graphique en aires, l'exemple suivant crée des graphiques individuels pour chaque nom en définissant subplots=True dans l'appel de la fonction 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)

Exemple de graphiques individuels avec des sous-graphiques dans BigQuery DataFrames.

Graphique de dispersion des trajets en taxi avec plusieurs dimensions

En utilisant les données de l'exemple de nuage de points, l'exemple suivant renomme les libellés des axes X et Y, utilise le paramètre passenger_count pour la taille des points, utilise des points de couleur avec le paramètre tip_amount et redimensionne la figure :

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

Exemple de graphique en nuage de points avec plusieurs dimensions dans BigQuery DataFrames.

Étapes suivantes