Jupyter 노트북에서 BigQuery 데이터 시각화


이 튜토리얼에서는 Vertex AI Workbench관리형 Jupyter 노트북 인스턴스에서 Python 및 Pandas용 BigQuery 클라이언트 라이브러리를 사용하여 데이터를 탐색하고 시각화하는 방법을 설명합니다. 데이터 시각화 도구를 사용하면 BigQuery 데이터를 대화형으로 분석하고 데이터에서 동향을 파악하고 유용한 정보를 전달할 수 있습니다. 이 튜토리얼에서는 Google 트렌드 BigQuery 공개 데이터 세트의 데이터를 사용합니다.

목표

  • Vertex AI Workbench를 사용하여 관리형 Jupyter 노트북 인스턴스를 만듭니다.
  • 노트북에서 매직 명령어를 사용하여 BigQuery 데이터를 쿼리합니다.
  • BigQuery Python 클라이언트 라이브러리 및 Pandas를 사용하여 BigQuery 데이터를 쿼리하고 시각화합니다.

비용

BigQuery는 유료 제품이므로 BigQuery에 액세스하면 BigQuery 사용 비용이 발생합니다. 매월 1TB까지는 쿼리 데이터가 무료로 처리됩니다. 자세한 내용은 BigQuery 가격 책정 페이지를 참조하세요.

Vertex AI Workbench는 유료 제품이며 Vertex AI Workbench 인스턴스를 사용하면 컴퓨팅, 스토리지, 관리 비용이 발생합니다. 자세한 내용은 Vertex AI Workbench 가격 책정 페이지를 참조하세요.

시작하기 전에

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  3. Enable the BigQuery API.

    Enable the API

    새 프로젝트의 경우 BigQuery가 자동으로 사용 설정됩니다.

  4. Notebooks API를 사용 설정합니다.

    Notebooks API 사용 설정

개요: Jupyter 메모장

메모장은 코드 작성 및 실행을 위한 환경을 제공합니다. 노트북은 본질적으로 IPYNB 파일로 저장되는 소스 아티팩트이며, 설명이 포함된 텍스트 콘텐츠, 실행 가능한 코드 블록, 대화형 HTML로 렌더링된 출력을 포함할 수 있습니다.

구조상 메모장은 셀의 시퀀스입니다. 은 결과를 생성하기 위해 평가되는 입력 텍스트의 블록입니다. 셀에는 다음과 같은 3가지 유형이 있습니다.

  • 코드 셀: 평가할 코드를 포함합니다. 실행된 코드의 출력 또는 결과가 실행된 코드와 함께 렌더링됩니다.
  • 마크다운 셀: 헤더, 목록, 서식 있는 텍스트를 생성하도록 HTML로 변환되는 마크다운 텍스트를 포함합니다.
  • 원시 셀: 다양한 코드 형식을 HTML 또는 LaTeX로 렌더링할 수 있습니다.

다음 이미지는 마크다운 셀, Python 코드 셀, 출력을 차례로 보여줍니다.

Jupyter 마크다운 및 코드 셀

열려 있는 각 노트북은 실행 세션 한 개(Python에서는 커널이라고도 함)와 연결되어 있습니다. 이 세션은 노트북에 모든 코드를 실행하고 상태를 관리합니다. 상태에는 변수와 변수 값, 함수, 클래스, 사용자가 로드하는 기존의 모든 Python 모듈이 포함됩니다.

Google Cloud에서 Vertex AI Workbench 노트북 기반 환경을 사용하여 데이터를 쿼리 및 탐색하고, 모델을 개발하고 학습시키고, 파이프라인의 일부로 코드를 실행할 수 있습니다. 이 튜토리얼에서는 Vertex AI Workbench에 관리형 노트북 인스턴스를 만든 다음 JupyterLab 인터페이스 내에서 BigQuery 데이터를 살펴봅니다.

관리형 노트북 인스턴스 만들기

이 섹션에서는 관리형 노트북을 만들 수 있도록 Google Cloud에 JupyterLab 인스턴스를 설정합니다.

  1. Google Cloud 콘솔에서 Workbench 페이지로 이동합니다.

    Workbench로 이동

  2.  새 노트북을 클릭합니다.

  3. 노트북 이름 필드에 인스턴스의 이름을 입력합니다.

  4. 리전 목록에서 인스턴스의 리전을 선택합니다.

  5. 권한 섹션에서 관리형 노트북 인스턴스에 액세스할 수 있는 사용자를 정의하는 옵션을 선택합니다.

    • 서비스 계정: 이 옵션은 런타임에 연결하는 Compute Engine 서비스 계정에 액세스하는 모든 사용자에게 액세스를 부여합니다. 자체 서비스 계정을 지정하려면 Compute Engine 기본 서비스 계정 사용 체크박스를 선택 취소한 후 사용하려는 서비스 계정 이메일 주소를 입력합니다. 서비스 계정에 대한 자세한 내용은 서비스 계정 유형을 참조하세요.
    • 단일 사용자 전용: 이 옵션은 특정 단일 사용자에게만 액세스 권한을 부여합니다. 사용자 이메일 필드에서 관리형 노트북 인스턴스를 사용할 사용자의 사용자 계정 이메일 주소를 입력합니다.
  6. 선택사항: 인스턴스 고급 설정을 수정하려면 고급 설정을 클릭합니다. 자세한 내용은 고급 설정을 사용하여 인스턴스 만들기를 참조하세요.

  7. 만들기를 클릭합니다.

    인스턴스가 생성될 때까지 몇 분 정도 기다립니다. Vertex AI Workbench가 자동으로 인스턴스를 시작합니다. 인스턴스를 사용할 수 있으면 Vertex AI Workbench에서 JupyterLab 열기 링크를 활성화합니다.

JupyterLab에서 BigQuery 리소스 찾아보기

이 섹션에서는 JupyterLab을 열고 관리형 노트북 인스턴스에서 사용할 수 있는 BigQuery 리소스를 살펴봅니다.

  1. 생성된 관리형 노트북 인스턴스의 행에서 JupyterLab 열기를 클릭합니다.

    메시지가 표시되면 약관에 동의하는 경우 인증을 클릭합니다. 관리형 노트북 인스턴스가 새 브라우저 탭에서 JupyterLab을 엽니다.

  2. JupyterLab 탐색 메뉴에서 BigQuery BigQuery in Notebooks(Notebooks의 BigQuery)를 클릭합니다.

    BigQuery 창에 다음과 같이 태스크를 수행할 수 있는 사용 가능한 프로젝트 및 데이터 세트가 나열됩니다.

    • 데이터 세트 설명을 보려면 데이터 세트 이름을 더블클릭합니다.
    • 데이터 세트의 테이블, 뷰, 모델을 표시하려면 데이터 세트를 펼칩니다.
    • JupyterLab에서 요약 설명을 탭으로 열려면 테이블, 뷰 또는 모델을 더블클릭합니다.

    참고: 테이블의 요약 설명에서 미리보기 탭을 클릭하여 테이블의 데이터를 미리 보세요. 다음 이미지는 bigquery-public-data 프로젝트의 google_trends 데이터 세트에 있는 international_top_terms 테이블의 미리보기를 보여줍니다.

    해외 상위 검색어 목록

%%bigquery 매직 명령어를 사용한 노트북 데이터 쿼리

이 섹션에서는 SQL을 노트북 셀에 직접 쓰고 BigQuery에서 Python 노트북으로 데이터를 읽습니다.

단일 또는 이중 백분율 문자(% 또는 %%)를 사용하는 매직 명령어를 사용하면 최소한의 구문을 사용하여 노트북 내에서 BigQuery와 상호작용할 수 있습니다. Python용 BigQuery 클라이언트 라이브러리는 관리형 노트북 인스턴스에 자동으로 설치됩니다. 백그라운드에서 %%bigquery 매직 명령어가 Python용 BigQuery 클라이언트 라이브러리를 사용하여 지정된 쿼리를 실행하고, 결과를 Pandas DataFrame으로 변환하고, 선택한 경우 결과를 변수에 저장한 후 결과를 표시합니다.

참고: google-cloud-bigquery Python 패키지 버전 1.26.0부터 BigQuery Storage API가 기본적으로 %%bigquery 매직에서 결과를 다운로드하는 데 사용됩니다.

  1. 노트북 파일을 열려면 파일 > 새로 만들기 > 노트북을 선택합니다.

  2. 커널 선택 대화상자에서 Python(로컬)을 선택한 다음 선택을 클릭합니다.

    새 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.  셀 실행을 클릭합니다.

    출력은 다음과 비슷합니다.

    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.  셀 실행을 클릭합니다.

  7. 다음 셀에서 다음 명령어를 입력하여 방금 읽은 쿼리 결과의 처음 몇 행을 확인합니다.

    regions_by_country.head()
    
  8.  셀 실행을 클릭합니다.

    Pandas DataFrame regions_by_country를 표시할 수 있게 되었습니다.

BigQuery 클라이언트 라이브러리를 직접 사용한 노트북의 데이터 쿼리

이 섹션에서는 Python용 BigQuery 클라이언트 라이브러리를 직접 사용하여 데이터를 Python 노트북으로 읽습니다.

클라이언트 라이브러리를 사용하면 쿼리를 보다 세부적으로 제어할 수 있고 쿼리 및 작업을 위한 더욱 복잡한 구성도 가능해집니다. Pandas와 함께 라이브러리의 통합을 사용하면 선언형 SQL의 기능을 명령형 코드(Python)와 결합하여 데이터를 분석, 시각화, 변환할 수 있습니다.

참고: 다양한 Python 데이터 분석, 데이터 랭글링, 시각화 라이브러리(예: numpy, pandas, matplotlib) 등을 사용할 수 있습니다. 이 중 일부 라이브러리는 DataFrame 객체를 기반으로 합니다.

  1. 다음 셀에서 다음 Python 코드를 입력하여 Python용 BigQuery 클라이언트 라이브러리를 가져오고 클라이언트를 초기화합니다.

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

    BigQuery 클라이언트는 BigQuery API에서 메시지를 주고받는 데 사용됩니다.

  2.  셀 실행을 클릭합니다.

  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 데이터 시각화

이 섹션에서는 이전에 Jupyter 노트북에서 실행한 쿼리의 결과를 시각화하는 차트 기능을 사용합니다.

  1. 다음 셀에서 다음 코드를 입력하여 Pandas DataFrame.plot() 메서드로 국가별 리전 수를 반환하는 쿼리 결과를 시각화하는 막대 그래프를 만듭니다.

    regions_by_country.plot(kind="bar", x="country_name", y="num_regions", figsize=(15, 10))
    
  2.  셀 실행을 클릭합니다.

    차트는 다음과 비슷합니다.

    해외 상위 검색어 국가 결과

  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.  셀 실행을 클릭합니다.

    차트는 다음과 비슷합니다. 각 지점의 크기는 데이터의 날짜 간격에 따른 날짜 쌍 수를 반영합니다. 예를 들어 상위 검색어가 약 한 달간 매일 표시되므로 30일 간격보다는 1일 간격에 더 많은 쌍이 있습니다.

    날짜별 해외 상위 검색어를 보여주는 차트

데이터 시각화에 대한 자세한 내용은 Pandas 문서를 참조하세요.

%bigquery_stats 매직을 사용하여 모든 테이블 열의 통계 및 시각화 가져오기

이 섹션에서는 노트북 단축키를 사용하여 BigQuery 테이블의 모든 필드에 대한 요약 통계 및 시각화를 가져옵니다.

BigQuery 클라이언트 라이브러리는 매직 명령어 %bigquery_stats를 제공합니다. 특정 테이블 이름으로 호출할 수 있는 이 명령어를 사용하면 테이블 개요와 테이블의 각 열에 대한 자세한 통계가 제공됩니다.

  1. 다음 셀에서 다음 코드를 입력하여 미국 top_terms 테이블에서 분석을 실행합니다.

    %bigquery_stats bigquery-public-data.google_trends.top_terms
    
  2.  셀 실행을 클릭합니다.

    일정 시간 동안 실행된 후 top_terms 테이블의 각 7개 변수에 대한 이미지가 다양한 통계와 함께 표시됩니다. 다음 이미지는 몇 가지 예시 출력의 일부를 보여줍니다.

    해외 상위 검색어 통계 개요

쿼리 기록 보기 및 쿼리 재사용

JupyterLab에서 쿼리 기록을 탭으로 보려면 다음 단계를 수행합니다.

  1. JupyterLab 탐색 메뉴에서 BigQuery BigQuery in Notebooks(Notebooks의 BigQuery)를 클릭하여 BigQuery 창을 엽니다.

  2. BigQuery 창에서 아래로 스크롤하여 쿼리 기록을 클릭합니다.

    왼쪽 탐색 메뉴 하단에서 강조표시된 쿼리 기록

    쿼리 목록이 다음과 같은 태스크를 수행할 수 있는 새 탭에서 열립니다.

    • 작업 ID, 쿼리 실행 시기, 소요 시간에 대한 자세한 내용을 보려면 쿼리를 클릭합니다.
    • 쿼리를 수정하거나 다시 실행하거나 나중에 사용할 수 있도록 노트북에 복사하려면 편집기에서 쿼리 열기를 클릭합니다.

노트북 저장 및 다운로드

이 섹션에서는 이 튜토리얼에서 사용된 리소스를 삭제한 후 나중에 사용할 수 있도록 노트북을 저장하고 다운로드합니다.

  1. 파일 > 노트북 저장을 선택합니다.
  2. 파일 > 다운로드를 선택하여 노트북의 로컬 복사본을 컴퓨터에 IPYNB 파일로 다운로드합니다.

삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 Google Cloud 프로젝트를 삭제하는 것입니다.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

다음 단계