在 JupyterLab 中探索 BigQuery 資料並以圖表呈現

本頁面提供一些範例,說明如何在 Vertex AI Workbench 執行個體的 JupyterLab 介面中,探索並以視覺化方式呈現儲存在 BigQuery 中的資料。

事前準備

如果您尚未建立 Vertex AI Workbench 執行個體,請建立

必要的角色

為確保您的執行個體服務帳戶具備查詢 BigQuery 資料的必要權限,請要求管理員授予執行個體服務帳戶專案中的「服務使用情形個人使用者」(roles/serviceusage.serviceUsageConsumer) 角色。

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

管理員也可能會透過自訂角色或其他預先定義的角色,為執行個體的服務帳戶授予必要權限。

開啟 JupyterLab

  1. 前往 Google Cloud 控制台的「Instances」頁面。

    前往「Instances」(執行個體)

  2. 按一下 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 下載結果。

  1. 如要開啟筆記本檔案,請依序選取「File」>「New」>「Notebook」

  2. 在「Select Kernel」對話方塊中,選取「Python 3」,然後按一下「Select」

    新的 IPYNB 檔案會隨即開啟。

  3. 如要取得 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;
  4. 按一下 「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
    ...
    
  5. 在下一個儲存格 (上一個儲存格的輸出內容下方) 中輸入下列指令,執行相同的查詢,但這次將結果儲存至名為 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 指令可用的引數,請參閱用戶端程式庫魔法說明文件

  6. 按一下 「Run cell」(執行儲存格)

  7. 在下一個儲存格中輸入下列指令,查看剛才讀取的查詢結果的前幾列:

    regions_by_country.head()
    
  8. 按一下 「Run cell」(執行儲存格)

    pandas DataFrame regions_by_country 已準備好繪製。

直接使用 BigQuery 用戶端程式庫查詢資料

在本節中,您將直接使用 Python 專用的 BigQuery 用戶端程式庫,將資料讀取至 Python 筆記本。

用戶端程式庫可讓您進一步掌控查詢,並使用更複雜的設定來處理查詢和工作。程式庫與 pandas 的整合可讓您將宣告式 SQL 與命令式程式碼 (Python) 的功能結合在一起,以便分析、視覺化及轉換資料。

注意:您可以使用多種 Python 資料分析、資料疊加及視覺化程式庫,例如 numpypandasmatplotlib 等。其中有數種程式庫會以 DataFrame 物件為建構基礎。

  1. 在下一個儲存格中輸入下列 Python 程式碼,以匯入 Python 專用的 BigQuery 用戶端程式庫並初始化用戶端:

    from google.cloud import bigquery
    
    client = bigquery.Client()
    

    BigQuery 用戶端是用來與 BigQuery API 收發訊息。

  2. 按一下 「Run cell」(執行儲存格)

  3. 在下一個儲存格中輸入下列程式碼,即可擷取美國 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。

  4. 按一下 「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,您可以使用特定資料表名稱呼叫這項指令,藉此提供資料表的概覽,以及每個資料表欄的詳細統計資料。

  1. 在下一個儲存格中輸入下列程式碼,即可針對美國的 top_terms 資料表執行該分析:

    %bigquery_stats bigquery-public-data.google_trends.top_terms
    
  2. 按一下 「Run cell」(執行儲存格)

    執行一段時間後,系統會顯示一張圖片,其中包含 top_terms 資料表中每個 7 個變數的各種統計資料。下圖顯示部分輸出內容範例:

    統計資料的國際熱門字詞總覽。

以圖表呈現 BigQuery 資料

在本節中,您將使用繪圖功能,將先前在 Jupyter 筆記本中執行的查詢結果以圖表呈現。

  1. 在下一個儲存格中,輸入以下程式碼,使用 pandas DataFrame.plot() 方法建立長條圖,以視覺化方式呈現查詢結果,並依國家/地區傳回區域數量:

    regions_by_country.plot(kind="bar", x="country_name", y="num_regions", figsize=(15, 10))
    
  2. 按一下 「Run cell」(執行儲存格)

    圖表會類似以下內容:

    國際熱門字詞國家/地區結果

  3. 在下一個儲存格中,輸入下列程式碼,使用 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)
      )
    
  4. 按一下 「Run cell」(執行儲存格)

    圖表會類似下方所示。每個資料點的大小反映資料中相隔天數為該數字的日期組數。舉例來說,相隔 1 天的組合比相隔 30 天的組合多,因為熱門搜尋字詞會在約一個月的時間內每天顯示。

    國際熱門字詞天數間隔圖表。

如要進一步瞭解資料視覺化,請參閱 pandas 說明文件

後續步驟