在 JupyterLab 內探索 BigQuery 中的資料,並以視覺化方式呈現

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

事前準備

如果還沒有,請建立 Vertex AI Workbench 執行個體

必要的角色

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

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

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

開啟 JupyterLab

  1. 前往 Google Cloud 控制台的「Instances」(執行個體) 頁面。

    前往「Instances」(執行個體) 頁面

  2. 按一下 Vertex AI Workbench 執行個體名稱旁的「Open JupyterLab」(開啟 JupyterLab)

    Vertex AI Workbench 執行個體會開啟 JupyterLab。

從 BigQuery 讀取資料

在接下來兩節中,您會從 BigQuery 讀取資料,以便稍後以視覺化方式呈現。這些步驟與「在 JupyterLab 內查詢 BigQuery 中的資料」一文中的步驟相同,因此如果您已完成這些步驟,可以跳至「取得 BigQuery 資料表中的資料摘要」。

使用 %%bigquery magic 指令查詢資料

在本節中,您會在筆記本儲存格中直接撰寫 SQL,並將資料從 BigQuery 讀取至 Python 筆記本。

使用單一或雙百分比字元 (%%%) 的神奇指令,可讓您在筆記本中使用最少的語法與 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 Magic 指令的引數提供該名稱。

    %%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. 按一下 「執行儲存格」

    查詢結果的前幾列會顯示在程式碼儲存格下方。

       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 說明文件

後續步驟