הדמיה של גרפים באמצעות BigQuery DataFrames

במאמר הזה מוסבר איך ליצור סוגים שונים של תרשימים באמצעות ספריית ההדמיה של BigQuery DataFrames.

bigframes.pandas API מספק מערך שלם של כלים ל-Python. ה-API תומך בפעולות סטטיסטיות מתקדמות, ואפשר להציג באופן חזותי את הצבירות שנוצרו מ-BigQuery DataFrames. אפשר גם לעבור מ-BigQuery DataFrames ל-pandas DataFrame עם פעולות דגימה מובנות.

היסטוגרמה

בדוגמה הבאה, הנתונים נקראים מהטבלה 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)

דוגמה להיסטוגרמה ב-BigQuery DataFrames.

תרשים קו

בדוגמה הבאה נעשה שימוש בנתונים מהטבלה bigquery-public-data.noaa_gsod.gsod2021 כדי ליצור תרשים קו של שינויים בטמפרטורה החציונית במהלך השנה:

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

דוגמה לתרשים קו ב-BigQuery DataFrames.

תרשים שטח

בדוגמה הבאה נעשה שימוש בטבלה bigquery-public-data.usa_names.usa_1910_2013 כדי לעקוב אחרי הפופולריות של שמות בהיסטוריה של ארה"ב, והיא מתמקדת בשמות Mary, Emily ו-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)

דוגמה לתרשים שטח ב-BigQuery DataFrames.

תרשים עמודות

בדוגמה הבאה נעשה שימוש בטבלה bigquery-public-data.ml_datasets.penguins כדי להציג את התפלגות המינים של הפינגווינים:

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

דוגמה לתרשים עמודות ב-BigQuery DataFrames.

תרשים פיזור

בדוגמה הבאה נעשה שימוש בטבלה bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2021 כדי לבדוק את הקשר בין סכומי התשלום על נסיעות במונית לבין מרחקי הנסיעה:

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)

דוגמה לתרשים פיזור ב-BigQuery DataFrames.

הדמיה של מערך נתונים גדול

‫BigQuery DataFrames מוריד נתונים למחשב המקומי לצורך ויזואליזציה. מספר נקודות הנתונים שניתן להוריד מוגבל ל-1,000 כברירת מחדל. אם מספר נקודות הנתונים חורג מהמגבלה, BigQuery DataFrames מבצע דגימה אקראית של מספר נקודות הנתונים ששווה למגבלה.

אפשר לשנות את המגבלה הזו על ידי הגדרת הפרמטר sampling_n כשמשרטטים תרשים, כמו בדוגמה הבאה:

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)

דוגמה לתרשים קו שמציג נתונים של מערך נתונים גדול ב-BigQuery DataFrames.

יצירת תרשימים מתקדמים באמצעות פרמטרים של pandas ו-Matplotlib

אפשר להעביר עוד פרמטרים כדי לכוונן את הגרף, כמו שאפשר לעשות עם pandas, כי ספריית השרטוט של BigQuery DataFrames מבוססת על pandas ו-Matplotlib. בקטעים הבאים מפורטות דוגמאות.

מגמת הפופולריות של השם עם תרשימי משנה

בדוגמה הבאה, נעשה שימוש בנתוני היסטוריית השמות מדוגמת תרשים שטח כדי ליצור גרפים נפרדים לכל שם על ידי הגדרת subplots=True בקריאה לפונקציה 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)

דוגמה לתרשימים נפרדים עם תרשימי משנה ב-BigQuery DataFrames.

תרשים פיזור של נסיעות במונית עם כמה מאפיינים

בדוגמה הבאה נעשה שימוש בנתונים מדוגמת תרשים הפיזור. התוויות של ציר ה-x וציר ה-y מקבלות שמות חדשים, נעשה שימוש בפרמטר passenger_count לציון גודל הנקודות, נעשה שימוש בנקודות צבעוניות עם הפרמטר tip_amount, והגודל של הדמות משתנה:

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

דוגמה לתרשים פיזור עם כמה ממדים ב-BigQuery DataFrames.

המאמרים הבאים