在 JupyterLab 中探索 BigQuery 資料並以圖表呈現
本頁面提供一些範例,說明如何在 Vertex AI Workbench 執行個體的 JupyterLab 介面中,探索並以視覺化方式呈現儲存在 BigQuery 中的資料。
事前準備
如果您尚未建立 Vertex AI Workbench 執行個體,請建立。
必要的角色
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。管理員也可能會透過自訂角色或其他預先定義的角色,為執行個體的服務帳戶授予必要權限。
開啟 JupyterLab
前往 Google Cloud 控制台的「Instances」頁面。
按一下 Vertex AI Workbench 執行個體名稱旁的「Open JupyterLab」。
Vertex AI Workbench 執行個體會開啟 JupyterLab。
讀取 BigQuery 資料
在接下來的兩個部分,您將從 BigQuery 讀取資料,以便稍後進行視覺化處理。這些步驟與「在 JupyterLab 內查詢 BigQuery 中的資料」一文中的步驟相同,因此如果您已完成這些步驟,可以直接跳到「取得 BigQuery 資料表中的資料摘要」一節。
使用 %%bigquery 魔法指令查詢資料
在本節中,您將直接在筆記本儲存格中編寫 SQL,並從 BigQuery 讀取資料至 Python 筆記本。
使用單一或雙百分比字元 (%
或 %%
) 的神奇指令,可讓您使用最少的語法,在 Notebook 中與 BigQuery 互動。Vertex AI Workbench 執行個體會自動安裝 Python 專用的 BigQuery 用戶端程式庫。在幕後,%%bigquery
神奇指令會使用 Python 專用的 BigQuery 用戶端程式庫執行指定的查詢,將結果轉換為 pandas DataFrame,並視需要將結果儲存到變數,然後顯示結果。
注意:自 google-cloud-bigquery
Python 套件 1.26.0 版本起,系統預設會使用 BigQuery Storage API 從 %%bigquery
magics 下載結果。
如要開啟筆記本檔案,請依序選取「File」>「New」>「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;
按一下
「Run cell」(執行儲存格)。輸出結果會與下列內容相似:
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 ...
在下一個儲存格 (上一個儲存格的輸出內容下方) 中輸入下列指令,執行相同的查詢,但這次將結果儲存至名為
regions_by_country
的新 pandas DataFrame。您可以使用%%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
指令可用的引數,請參閱用戶端程式庫魔法說明文件。按一下
「Run cell」(執行儲存格)。在下一個儲存格中輸入下列指令,查看剛才讀取的查詢結果的前幾列:
regions_by_country.head()
按一下
「Run cell」(執行儲存格)。pandas DataFrame
regions_by_country
已準備好繪製。
直接使用 BigQuery 用戶端程式庫查詢資料
在本節中,您將直接使用 Python 專用的 BigQuery 用戶端程式庫,將資料讀取至 Python 筆記本。
用戶端程式庫可讓您進一步掌控查詢,並使用更複雜的設定來處理查詢和工作。程式庫與 pandas 的整合可讓您將宣告式 SQL 與命令式程式碼 (Python) 的功能結合在一起,以便分析、視覺化及轉換資料。
注意:您可以使用多種 Python 資料分析、資料疊加及視覺化程式庫,例如 numpy
、pandas
、matplotlib
等。其中有數種程式庫會以 DataFrame 物件為建構基礎。
在下一個儲存格中輸入下列 Python 程式碼,以匯入 Python 專用的 BigQuery 用戶端程式庫並初始化用戶端:
from google.cloud import bigquery client = bigquery.Client()
BigQuery 用戶端是用來與 BigQuery API 收發訊息。
按一下
「Run cell」(執行儲存格)。在下一個儲存格中輸入下列程式碼,即可擷取美國
top_terms
中,每天熱門字詞重疊的百分比,並以天數為間隔。這裡的想法是查看每個日期的熱門字詞,並瞭解這些字詞與前一天、前 2 天、前 3 天等日期的熱門字詞重疊的百分比 (約一個月的所有日期組合)。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
方法會等候查詢作業完成,並使用 BigQuery Storage API 將結果下載至 pandas DataFrame。按一下
「Run」單元格。程式碼儲存格下方會顯示前幾列的查詢結果。
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
按一下
「Run cell」(執行儲存格)。執行一段時間後,系統會顯示一張圖片,其中包含
top_terms
資料表中每個 7 個變數的各種統計資料。下圖顯示部分輸出內容範例:
以圖表呈現 BigQuery 資料
在本節中,您將使用繪圖功能,將先前在 Jupyter 筆記本中執行的查詢結果以圖表呈現。
在下一個儲存格中,輸入以下程式碼,使用 pandas
DataFrame.plot()
方法建立長條圖,以視覺化方式呈現查詢結果,並依國家/地區傳回區域數量:regions_by_country.plot(kind="bar", x="country_name", y="num_regions", figsize=(15, 10))
按一下
「Run cell」(執行儲存格)。圖表會類似以下內容:
在下一個儲存格中,輸入下列程式碼,使用 pandas
DataFrame.plot()
方法建立散布圖,以視覺化方式呈現查詢結果,瞭解熱門搜尋字詞在不同天數間重疊的百分比: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) )
按一下
「Run cell」(執行儲存格)。圖表會類似下方所示。每個資料點的大小反映資料中相隔天數為該數字的日期組數。舉例來說,相隔 1 天的組合比相隔 30 天的組合多,因為熱門搜尋字詞會在約一個月的時間內每天顯示。
如要進一步瞭解資料視覺化,請參閱 pandas 說明文件。