בדף הזה מפורטות כמה דוגמאות לאופן שבו אפשר לחקור ולהציג נתונים שמאוחסנים ב-BigQuery מתוך ממשק JupyterLab של מכונת Gemini Enterprise Agent Platform Workbench שלכם.
לפני שמתחילים
אם עוד לא עשיתם זאת, צרו מופע של Agent Platform Workbench.
התפקידים הנדרשים
כדי לוודא שלחשבון השירות של המופע יש את ההרשאות שנדרשות לשליחת שאילתות לנתונים ב-BigQuery, צריך לבקש מהאדמין להקצות לחשבון השירות של המופע את תפקיד ה-IAM Service Usage Consumer (roles/serviceusage.serviceUsageConsumer) בפרויקט.
יכול להיות שהאדמין גם יוכל לתת לחשבון השירות של המופע את ההרשאות הנדרשות באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
פתיחת JupyterLab
נכנסים לדף Instances במסוף Google Cloud .
לצד השם של מכונת Agent Platform Workbench, לוחצים על Open JupyterLab.
מופע של Agent Platform Workbench ייפתח ב-JupyterLab.
קריאת נתונים מ-BigQuery
בקטעים הבאים תקראו נתונים מ-BigQuery, ותשתמשו בהם בהמשך כדי ליצור תרשימים. השלבים האלה זהים לאלה שבמאמר שליחת שאילתות לנתונים ב-BigQuery מתוך JupyterLab, כך שאם כבר השלמתם אותם, אתם יכולים לדלג אל קבלת סיכום של נתונים בטבלה ב-BigQuery.
שאילתות על נתונים באמצעות פקודת הקסם %%bigquery
בקטע הזה, תכתבו SQL ישירות בתאי Notebook ותקראו נתונים מ-BigQuery לתוך Notebook של Python.
פקודות Magic שמשתמשות בתו אחוז אחד או שניים (% או %%) מאפשרות לכם להשתמש בתחביר מינימלי כדי ליצור אינטראקציה עם BigQuery בתוך המחברת. ספריית הלקוח של BigQuery ל-Python מותקנת אוטומטית במופע של Agent Platform Workbench. מאחורי הקלעים, פקודת ה-magic %%bigquery משתמשת בספריית הלקוח של BigQuery ל-Python כדי להריץ את השאילתה שצוינה, להמיר את התוצאות ל-DataFrame של pandas, לשמור את התוצאות במשתנה (אופציונלי) ואז להציג את התוצאות.
הערה: החל מגרסה 1.26.0 של חבילת google-cloud-bigquery Python, נעשה שימוש ב-BigQuery Storage API כברירת מחדל להורדת תוצאות מפקודות ה-%%bigquery magics.
כדי לפתוח קובץ notebook, בוחרים באפשרות קובץ > חדש > Notebook (מחברת).
בתיבת הדו-שיח Select Kernel, בוחרים באפשרות Python 3 ולוחצים על Select.
קובץ ה-IPYNB החדש ייפתח.
כדי לקבל את מספר האזורים לפי מדינה במערך הנתונים
international_top_terms, מזינים את ההצהרה הבאה:%%bigquery SELECT country_code, country_name, COUNT(DISTINCT region_code) AS num_regions FROM `bigquery-public-data.google_trends.international_top_terms` WHERE refresh_date = DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY) GROUP BY country_code, country_name ORDER BY num_regions DESC;
לוחצים על הרצת התא.
הפלט אמור להיראות כך:
Query complete after 0.07s: 100%|██████████| 4/4 [00:00<00:00, 1440.60query/s] Downloading: 100%|██████████| 41/41 [00:02<00:00, 20.21rows/s] country_code country_name num_regions 0 TR Turkey 81 1 TH Thailand 77 2 VN Vietnam 63 3 JP Japan 47 4 RO Romania 42 5 NG Nigeria 37 6 IN India 36 7 ID Indonesia 34 8 CO Colombia 33 9 MX Mexico 32 10 BR Brazil 27 11 EG Egypt 27 12 UA Ukraine 27 13 CH Switzerland 26 14 AR Argentina 24 15 FR France 22 16 SE Sweden 21 17 HU Hungary 20 18 IT Italy 20 19 PT Portugal 20 20 NO Norway 19 21 FI Finland 18 22 NZ New Zealand 17 23 PH Philippines 17 ...
בתא הבא (מתחת לפלט מהתא הקודם), מזינים את הפקודה הבאה כדי להריץ את אותה שאילתה, אבל הפעם שומרים את התוצאות ב-DataFrame חדש של pandas בשם
regions_by_country. מזינים את השם הזה באמצעות ארגומנט עם פקודת הקסם%%bigquery.%%bigquery regions_by_country SELECT country_code, country_name, COUNT(DISTINCT region_code) AS num_regions FROM `bigquery-public-data.google_trends.international_top_terms` WHERE refresh_date = DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY) GROUP BY country_code, country_name ORDER BY num_regions DESC;
הערה: מידע נוסף על הארגומנטים הזמינים לפקודה
%%bigqueryזמין במסמכי התיעוד של client library magics.לוחצים על הרצת התא.
בתא הבא, מזינים את הפקודה הבאה כדי לראות את השורות הראשונות של תוצאות השאילתה שקראתם זה עתה:
regions_by_country.head()לוחצים על הרצת התא.
ה-DataFrame של pandas
regions_by_countryמוכן לשרטוט.
הרצת שאילתות על נתונים באמצעות ספריית הלקוח של BigQuery ישירות
בקטע הזה תשתמשו בספריית הלקוח של BigQuery ל-Python ישירות כדי לקרוא נתונים לתוך מחברת Python.
ספריית הלקוח מאפשרת לכם לשלוט יותר בשאילתות ולהשתמש בהגדרות מורכבות יותר לשאילתות ולעבודות. השילובים של הספרייה עם pandas מאפשרים לכם לשלב את העוצמה של SQL דקלרטיבי עם קוד אימפרטיבי (Python) כדי לעזור לכם לנתח, להמחיש ולשנות את הנתונים.
הערה: אפשר להשתמש במספר ספריות של Python לניתוח נתונים, ל-data wrangling ולהמחשה חזותית, כמו numpy, pandas, matplotlib ועוד רבות אחרות. חלק מהספריות האלה מבוססות על אובייקט DataFrame.
בתא הבא, מזינים את קוד Python הבא כדי לייבא את ספריית הלקוח BigQuery ל-Python ולאתחל לקוח:
from google.cloud import bigquery client = bigquery.Client()לקוח BigQuery משמש לשליחה ולקבלה של הודעות מ-BigQuery API.
לוחצים על הרצת התא.
בתא הבא, מזינים את הקוד הבא כדי לאחזר את אחוז המונחים המובילים היומיים בארה"ב
top_termsשחופפים לאורך זמן לפי מספר הימים שעברו. הרעיון הוא לבדוק את המונחים המובילים בכל יום ולראות איזה אחוז מהם חופף למונחים המובילים מהיום הקודם, מיומיים לפני, משלושה ימים לפני וכן הלאה (לכל זוג תאריכים בטווח של חודש בערך).sql = """ WITH TopTermsByDate AS ( SELECT DISTINCT refresh_date AS date, term FROM `bigquery-public-data.google_trends.top_terms` ), DistinctDates AS ( SELECT DISTINCT date FROM TopTermsByDate ) SELECT DATE_DIFF(Dates2.date, Date1Terms.date, DAY) AS days_apart, COUNT(DISTINCT (Dates2.date || Date1Terms.date)) AS num_date_pairs, COUNT(Date1Terms.term) AS num_date1_terms, SUM(IF(Date2Terms.term IS NOT NULL, 1, 0)) AS overlap_terms, SAFE_DIVIDE( SUM(IF(Date2Terms.term IS NOT NULL, 1, 0)), COUNT(Date1Terms.term) ) AS pct_overlap_terms FROM TopTermsByDate AS Date1Terms CROSS JOIN DistinctDates AS Dates2 LEFT JOIN TopTermsByDate AS Date2Terms ON Dates2.date = Date2Terms.date AND Date1Terms.term = Date2Terms.term WHERE Date1Terms.date <= Dates2.date GROUP BY days_apart ORDER BY days_apart; """ pct_overlap_terms_by_days_apart = client.query(sql).to_dataframe() pct_overlap_terms_by_days_apart.head()
ה-SQL שבו נעשה שימוש מוצפן במחרוזת Python ואז מועבר אל השיטה
query()כדי להריץ שאילתה. השיטהto_dataframeמחכה שהשאילתה תסתיים ומורידה את התוצאות ל-pandas DataFrame באמצעות BigQuery Storage API.לוחצים על הפעלת התא.
השורה הראשונה של תוצאות השאילתה מופיעה מתחת לתא הקוד.
days_apart num_date_pairs num_date1_terms overlap_terms pct_overlap_terms 0 0 32 800 800 1.000000 1 1 31 775 203 0.261935 2 2 30 750 73 0.097333 3 3 29 725 31 0.042759 4 4 28 700 23 0.032857
מידע נוסף על שימוש בספריות לקוח של BigQuery זמין במאמר שימוש בספריות לקוח.
קבלת סיכום של נתונים בטבלה ב-BigQuery
בקטע הזה תשתמשו בקיצור דרך במחברת כדי לקבל סיכום של נתונים סטטיסטיים והדמיות של כל השדות בטבלה ב-BigQuery. זו יכולה להיות דרך מהירה ליצור פרופיל של הנתונים לפני שממשיכים לחקור אותם.
ספריית הלקוח של BigQuery מספקת פקודה מיוחדת, %bigquery_stats, שאפשר להפעיל עם שם טבלה ספציפי כדי לקבל סקירה כללית של הטבלה ונתונים סטטיסטיים מפורטים על כל אחת מהעמודות בטבלה.
בתא הבא, מזינים את הקוד הבא כדי להריץ את הניתוח הזה על הטבלה
top_termsשל ארה"ב:%bigquery_stats bigquery-public-data.google_trends.top_termsלוחצים על הרצת התא.
אחרי שהקמפיין פועל במשך זמן מה, מופיעה תמונה עם נתונים סטטיסטיים שונים על כל אחד מ-7 המשתנים בטבלה
top_terms. בתמונה הבאה אפשר לראות חלק מהפלט לדוגמה:
הדמיה של נתונים ב-BigQuery
בקטע הזה תשתמשו ביכולות של יצירת תרשימים כדי להמחיש את התוצאות של השאילתות שהפעלתם קודם במסמך ה-notebook של Jupyter.
בתא הבא, מזינים את הקוד הבא כדי להשתמש בשיטה
DataFrame.plot()של pandas כדי ליצור תרשים עמודות שמציג את התוצאות של השאילתה שמחזירה את מספר האזורים לפי מדינה:regions_by_country.plot(kind="bar", x="country_name", y="num_regions", figsize=(15, 10))לוחצים על הרצת התא.
התרשים אמור להיראות כך:
בתא הבא, מזינים את הקוד הבא כדי להשתמש בשיטה
DataFrame.plot()של pandas כדי ליצור תרשים פיזור שממחיש את התוצאות מהשאילתה לגבי אחוז החפיפה במונחי החיפוש המובילים לפי מספר הימים שעברו:pct_overlap_terms_by_days_apart.plot( kind="scatter", x="days_apart", y="pct_overlap_terms", s=len(pct_overlap_terms_by_days_apart["num_date_pairs"]) * 20, figsize=(15, 10) )לוחצים על הרצת התא.
התרשים אמור להיראות כך: הגודל של כל נקודה משקף את מספר זוגות התאריכים שההפרש ביניהם הוא מספר הימים הזה בנתונים. לדוגמה, יש יותר זוגות עם הפרש של יום אחד מאשר זוגות עם הפרש של 30 יום, כי מונחי החיפוש הנפוצים ביותר מוצגים מדי יום במשך כחודש.
מידע נוסף על ויזואליזציה של נתונים זמין במסמכי התיעוד של pandas.