在 Jupyter 筆記本中以視覺化方式呈現 BigQuery 資料

BigQuery 是一個 PB 規模的分析資料倉儲,可用來對大量資料執行幾乎即時的 SQL 查詢。

資料視覺化工具可協助您理解 BigQuery 資料,並以互動方式分析資料。透過視覺化工具,您可以運用資料來協助識別趨勢、加以回應,以及進行預測。在本教學課程中,您要在 Jupyter 筆記本中使用 BigQuery Python 用戶端程式庫與 Pandas,以視覺化方式呈現 BigQuery 出生率範例資料表中的資料。

目標

在此教學課程中,您將執行下列作業:

  • 設定執行 Jupyter 筆記本的環境
  • 使用 BigQuery Python 用戶端程式庫與 Pandas 查詢 BigQuery 資料,並以視覺化方式加以呈現

費用

BigQuery 為付費產品,存取 BigQuery 時系統會向您收取使用費用。BigQuery 的查詢定價提供每月前 1 TB 免費的優惠。詳情請參閱 BigQuery 定價頁面。

事前準備

開始本教學課程之前,請使用 Google Cloud Console 建立或選取一個專案。

  1. 登入您的 Google 帳戶。

    如果您沒有帳戶,請申請新帳戶

  2. 在 GCP Console 的專案選擇器頁面中,選取或建立 GCP 專案。

    前往專案選取器頁面

  3. 新專案會自動啟用 BigQuery。如要在現有的專案中啟用 BigQuery,請前往 啟用BigQuery必要的 。

    啟用 API

  4. 如果您不想為專案提供信用卡或啟用計費功能,BigQuery 也提供沙箱機制。無論您的專案是否已啟用計費功能,皆可使用本主題中所述的步驟。如想啟用計費功能,請參閱瞭解如何啟用計費功能的相關說明。

設定本機 Jupyter 環境

在本教學課程中,您會使用本機託管的 Jupyter 筆記本。請按照下列步驟操作來安裝 Jupyter、設定驗證,並安裝所需的 Python 程式庫。

  1. 在終端機中執行下列指令,安裝最新版本的 BigQuery Python 用戶端程式庫,包括 Pandas 程式庫 (使用 Pandas 的函式需要這個程式庫):

    pip install --upgrade google-cloud-bigquery[pandas]
    
  2. 按照 Jupyter 說明文件中的安裝操作說明安裝 Jupyter。

  3. 按照驗證入門頁面中的操作說明,設定應用程式預設憑證。設定驗證的方式是先建立服務帳戶,然後設定環境變數。

總覽:Jupyter 筆記本

筆記本提供一個編寫和執行程式碼的環境。筆記本基本上是一種來源構件,會以 .ipynb 檔案的形式儲存,其中可包含敘述性文字內容、可執行的程式碼區塊,以及相關聯的結果 (以互動式 HTML 呈現)。就結構而言,筆記本是一系列的儲存格。

儲存格是一種輸入文字區塊,此區塊經過系統評估後會產生結果。儲存格可分成兩種類型:

  • 程式碼儲存格:包含要評估的程式碼。因執行程式碼而產生的任何輸出或結果,皆會立即呈現在輸入程式碼下方。

  • Markdown 儲存格:包含 markdown 文字,此文字會轉換成 HTML,以產生標頭、清單和已設定格式的文字。

下方的螢幕擷取畫面顯示 markdown 儲存格,後面接著 Python 程式碼儲存格。請注意,Python 儲存格的輸出會立即顯示在程式碼下方。

Jupyter markdown 與程式碼儲存格

每個開啟的筆記本都與一個執行中的工作階段相關聯。在 IPython 中,這又稱為核心。此工作階段會執行在筆記本內輸入的所有程式碼,並管理狀態 (變數及其值、函式及類別,以及您載入的所有現有 Python 模組)。

查詢 BigQuery 資料並以視覺化方式加以呈現

在本教學課程的這個部分,您會建立一個用 Datalab 筆記本。這個筆記本會用來在 BigQuery 中查詢資料,並以視覺化方式呈現這些資料。您會使用出生率範例資料表中的資料來建立視覺化內容。本教學課程中的所有查詢皆使用標準 SQL 語法。

如要使用 Jupyter 筆記本查詢 BigQuery 資料,並以視覺化方式加以呈現:

  1. 如果您尚未啟動 Jupyter,請在終端機中執行下列指令:

    jupyter notebook
    
  2. Jupyter 現在應會在瀏覽器視窗中執行並開啟。在 Jupyter 視窗中,按一下 [New] 按鈕,並選取 [Python 2] 或 [Python 3],藉此建立新的 Python 筆記本。

    Jupyter 中的新 Python 3 筆記本

  3. 按一下頁面頂端的 [Untitled]

  4. 在「Rename notebook」(重新命名筆記本) 對話方塊中輸入新名稱 (例如 BigQuery tutorial),然後按一下 [Rename] (重新命名)。

  5. BigQuery Python 用戶端程式庫提供了一個神奇指令,該指令可讓您使用最少的程式碼執行查詢。如要從用戶端程式庫載入神奇指令,請將下列程式碼貼到筆記本中的第一個儲存格。

    %load_ext google.cloud.bigquery
  6. 按一下 [Run] 按鈕,或使用 SHIFT + ENTER 來執行指令。

  7. BigQuery 用戶端程式庫提供一個儲存格神奇指令 %%bigquery,可用來執行 SQL 查詢並以 Pandas DataFrame 形式傳回結果。請將以下內容輸入到下一個儲存格中,以傳回每年的出生總人數。

    %%bigquery
    SELECT
        source_year AS year,
        COUNT(is_male) AS birth_count
    FROM `bigquery-public-data.samples.natality`
    GROUP BY year
    ORDER BY year DESC
    LIMIT 15
  8. 按一下 [Run] (執行)

  9. 查詢結果會出現在程式碼儲存格下方。

    按年份呈現出生人數的表格

  10. 請在下一個儲存格區塊中輸入以下指令,以執行相同的查詢,但這次將結果儲存至新的變數 total_births。這個變數會做為引數提供給 %%bigquery,然後便可將結果用於進一步的分析與視覺化作業。

    %%bigquery total_births
    SELECT
        source_year AS year,
        COUNT(is_male) AS birth_count
    FROM `bigquery-public-data.samples.natality`
    GROUP BY year
    ORDER BY year DESC
    LIMIT 15
  11. 按一下 [Run] (執行)

  12. 現在,您已將 Pandas DataFrame 儲存至變數 total_births,並已準備好開始繪圖。為了準備繪製查詢結果的圖表,請將下列內建神奇指令貼到下一個儲存格中,以啟用 matplotlib。matplotlib 是 Pandas 用於繪圖的程式庫。

    %matplotlib inline
  13. 按一下 [Run] (執行)

  14. 請在下一個儲存格區塊中輸入以下程式碼,以使用 Pandas DataFrame.plot() 方法將查詢結果視覺化,使這些結果以長條圖方式呈現。如要進一步瞭解如何使用 Pandas 來視覺化呈現資料,請參閱 Pandas 說明文件

    total_births.plot(kind='bar', x='year', y='birth_count');
  15. 按一下 [Run] (執行)

  16. 圖表會顯示在程式碼區塊下方。

    按年份呈現出生人數的長條圖

  17. 接下來,將下列查詢貼入到下一個儲存格中,以擷取一週中各日的出生人數。

    %%bigquery births_by_weekday
    SELECT
        wday,
        SUM(CASE WHEN is_male THEN 1 ELSE 0 END) AS male_births,
        SUM(CASE WHEN is_male THEN 0 ELSE 1 END) AS female_births
    FROM `bigquery-public-data.samples.natality`
    WHERE wday IS NOT NULL
    GROUP BY wday
    ORDER BY wday ASC

    由於 wday (星期幾) 欄位允許空值,所以此查詢會排除 為空值的記錄。

  18. 按一下 [Run] (執行)

  19. 在下一個儲存格中,輸入下列程式碼,將查詢結果在折線圖中以視覺方式呈現。

    births_by_weekday.plot(x='wday');
  20. 按一下 [Run] (執行)

  21. 圖表會顯示在程式碼區塊下方。請注意,星期日 (1) 和星期六 (7) 的出生人數大幅減少。

    按星期幾呈現出生人數的折線圖

  22. 按一下 [File] > [Save and Checkpoint] 或按一下工具列中的儲存圖示。建立查核點可讓您將筆記本還原成之前的狀態。

Pandas DataFrame

神奇指令可以讓您使用最少的語法來與 BigQuery 互動。%%bigquery 會在幕後使用 BigQuery Python 用戶端程式庫來執行指定的查詢、將結果轉換為 Pandas Dataframe、讓您選擇是否要將結果儲存到變數,最後再顯示結果。直接使用 BigQuery Python 用戶端程式庫,而非透過神奇指令使用,可讓您進一步掌控查詢,並進行更複雜的設定。程式庫與 Pandas 之間的整合可以讓您將宣告式 SQL 與命令式程式碼 (Python) 的功能結合在一起,以執行想要的資料分析、視覺化作業及轉換工作。

使用 pandas DataFrame 查詢 BigQuery 資料並以視覺化方式加以呈現

在這一節的教學課程中,您將使用 pandas DataFrame 在 BigQuery 中查詢資料,並以視覺化方式呈現這些資料。您會使用 BigQuery Python 用戶端程式庫來查詢 BigQuery 資料,並透過 Pandas 程式庫,使用 DataFrame 來分析資料。

  1. 在下一個儲存格中輸入下列 Python 程式碼,以匯入 BigQuery Python 用戶端程式庫並初始化用戶端。BigQuery 用戶端可用來與 BigQuery API 收發訊息。

    from google.cloud import bigquery
    client = bigquery.Client()
  2. 按一下 [Run] (執行)

  3. 使用 Client.query() 方法來執行查詢。在下一個儲存格中,輸入下列程式碼來執行查詢,按照胎兒數來擷取多胞胎的年度計數 (2 為雙胞胎,3 為三胞胎,依此類推)。

    sql = """
    SELECT
        plurality,
        COUNT(1) AS count,
        year
    FROM
        `bigquery-public-data.samples.natality`
    WHERE
        NOT IS_NAN(plurality) AND plurality > 1
    GROUP BY
        plurality, year
    ORDER BY
        count DESC
    """
    df = client.query(sql).to_dataframe()
    df.head()
  4. 按一下 [Run] (執行)

  5. 如要在 DataFrame 中繪製查詢結果的圖表,請將下列程式碼插入到下一個儲存格中來透視資料,並建立一段時間的多胞胎計數圖表的堆疊長條圖。

    pivot_table = df.pivot(index='year', columns='plurality', values='count')
    pivot_table.plot(kind='bar', stacked=True, figsize=(15, 7));
  6. 按一下 [Run] (執行)

  7. 圖表會顯示在程式碼區塊下方。

    按年份呈現多胞胎出生數的堆疊長條圖

  8. 在下一個儲存格中輸入下列查詢,以擷取各懷孕週數的出生人數。

    sql = """
    SELECT
        gestation_weeks,
        COUNT(1) AS count
    FROM
        `bigquery-public-data.samples.natality`
    WHERE
        NOT IS_NAN(gestation_weeks) AND gestation_weeks <> 99
    GROUP BY
        gestation_weeks
    ORDER BY
        gestation_weeks
    """
    df = client.query(sql).to_dataframe()
  9. 按一下 [Run] (執行)

  10. 如要在 DataFrame 中繪製查詢結果的圖表,請將下列程式碼貼到下一個儲存格中。

    ax = df.plot(kind='bar', x='gestation_weeks', y='count', figsize=(15,7))
    ax.set_title('Count of Births by Gestation Weeks')
    ax.set_xlabel('Gestation Weeks')
    ax.set_ylabel('Count');
  11. 按一下 [Run] (執行)

  12. 長條圖會顯示在程式碼區塊下方。

    按懷孕週數呈現平均重量的圖表

後續步驟

  • 進一步瞭解如何撰寫 BigQuery 的查詢:BigQuery 說明文件提供查詢資料的相關說明,其中包含如何執行查詢、建立使用者定義之函式 (UDF) 等操作的說明。

  • 瞭解 BigQuery 語法:在 BigQuery 中,SQL 查詢的慣用方言是標準 SQL,詳情請參閱 SQL 參考資料。如需 BigQuery 舊版類 SQL 語法的說明,請參閱查詢參考資料 (舊版 SQL)

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁