JupyterLab 내에서 BigQuery의 데이터 탐색 및 시각화

이 페이지에서는 Vertex AI Workbench 관리형 노트북 인스턴스의 JupyterLab 인터페이스에서 BigQuery에 저장된 데이터를 탐색하고 시각화하는 방법의 예시를 보여줍니다.

시작하기 전에

아직 만들지 않은 경우 관리형 노트북 인스턴스를 만듭니다.

JupyterLab 열기

  1. Google Cloud 콘솔에서 관리형 노트북 페이지로 이동합니다.

    관리형 노트북으로 이동

  2. 관리형 노트북 인스턴스 이름 옆에 있는 JupyterLab 열기를 클릭합니다.

    관리형 노트북 인스턴스가 JupyterLab을 엽니다.

BigQuery에서 데이터 읽기

다음 두 섹션에서는 나중에 시각화에 사용할 BigQuery에서 데이터를 읽습니다. 이 단계는 JupyterLab 내에서 BigQuery의 데이터 쿼리의 단계와 동일하므로, 이미 완료한 경우 다음 단계인 BigQuery 테이블의 데이터 요약 가져오기로 건너뛸 수 있습니다.

%%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 테이블의 데이터 요약 가져오기

이 섹션에서는 노트북 단축키를 사용하여 BigQuery 테이블의 모든 필드에 대한 요약 통계 및 시각화를 가져옵니다. 이렇게 하면 데이터를 더 자세히 살펴보기 전에 빠르게 프로파일링할 수 있습니다.

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

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

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

    일정 시간 동안 실행된 후 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.  셀 실행을 클릭합니다.

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

    해외 상위 검색어 국가 결과

  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 문서를 참조하세요.