JupyterLab 내에서 BigQuery의 데이터 탐색 및 시각화
이 페이지에서는 Vertex AI Workbench 관리형 노트북 인스턴스의 JupyterLab 인터페이스에서 BigQuery에 저장된 데이터를 탐색하고 시각화하는 방법의 예시를 보여줍니다.
시작하기 전에
아직 만들지 않은 경우 관리형 노트북 인스턴스를 만듭니다.
JupyterLab 열기
Google Cloud 콘솔에서 관리형 노트북 페이지로 이동합니다.
관리형 노트북 인스턴스 이름 옆에 있는 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
매직에서 결과를 다운로드하는 데 사용됩니다.
노트북 파일을 열려면 파일 > 새로 만들기 > 노트북을 선택합니다.
커널 선택 대화상자에서 Python(로컬)을 선택한 다음 선택을 클릭합니다.
새 IPYNB 파일이 열립니다.
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;
셀 실행을 클릭합니다.
출력은 다음과 비슷합니다.
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 ...
다음 셀(이전 셀의 출력 아래)에 다음 명령어를 입력하여 동일한 쿼리를 실행합니다. 단, 이번에는 결과를 이름이
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
명령어에 사용 가능한 인수에 대한 자세한 내용은 클라이언트 라이브러리 매직 문서를 참조하세요.셀 실행을 클릭합니다.
다음 셀에서 다음 명령어를 입력하여 방금 읽은 쿼리 결과의 처음 몇 행을 확인합니다.
regions_by_country.head()
셀 실행을 클릭합니다.
Pandas DataFrame
regions_by_country
를 표시할 수 있게 되었습니다.
BigQuery 클라이언트 라이브러리를 직접 사용하여 데이터 쿼리
이 섹션에서는 Python용 BigQuery 클라이언트 라이브러리를 직접 사용하여 데이터를 Python 노트북으로 읽습니다.
클라이언트 라이브러리를 사용하면 쿼리를 보다 세부적으로 제어할 수 있고 쿼리 및 작업을 위한 더욱 복잡한 구성도 가능해집니다. Pandas와 함께 라이브러리의 통합을 사용하면 선언형 SQL의 기능을 명령형 코드(Python)와 결합하여 데이터를 분석, 시각화, 변환할 수 있습니다.
참고: 다양한 Python 데이터 분석, 데이터 랭글링, 시각화 라이브러리(예: numpy
, pandas
, matplotlib
) 등을 사용할 수 있습니다. 이 중 일부 라이브러리는 DataFrame 객체를 기반으로 합니다.
다음 셀에서 다음 Python 코드를 입력하여 Python용 BigQuery 클라이언트 라이브러리를 가져오고 클라이언트를 초기화합니다.
from google.cloud import bigquery client = bigquery.Client()
BigQuery 클라이언트는 BigQuery API에서 메시지를 주고받는 데 사용됩니다.
셀 실행을 클릭합니다.
다음 셀에서 다음 코드를 입력하여 시간이 지나면서 날짜별로 겹치는 미국
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에 다운로드합니다.셀 실행을 클릭합니다.
쿼리 결과의 처음 몇 행이 코드 셀 아래에 나타납니다.
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
를 제공합니다. 특정 테이블 이름으로 호출할 수 있는 이 명령어를 사용하면 테이블 개요와 테이블의 각 열에 대한 자세한 통계가 제공됩니다.
다음 셀에서 다음 코드를 입력하여 미국
top_terms
테이블에서 분석을 실행합니다.%bigquery_stats bigquery-public-data.google_trends.top_terms
셀 실행을 클릭합니다.
일정 시간 동안 실행된 후
top_terms
테이블의 각 7개 변수에 대한 이미지가 다양한 통계와 함께 표시됩니다. 다음 이미지는 몇 가지 예시 출력의 일부를 보여줍니다.
BigQuery 데이터 시각화
이 섹션에서는 이전에 Jupyter 노트북에서 실행한 쿼리의 결과를 시각화하는 차트 기능을 사용합니다.
다음 셀에서 다음 코드를 입력하여 Pandas
DataFrame.plot()
메서드로 국가별 리전 수를 반환하는 쿼리 결과를 시각화하는 막대 그래프를 만듭니다.regions_by_country.plot(kind="bar", x="country_name", y="num_regions", figsize=(15, 10))
셀 실행을 클릭합니다.
차트는 다음과 비슷합니다.
다음 셀에서 다음 코드를 입력하여 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) )
셀 실행을 클릭합니다.
차트는 다음과 비슷합니다. 각 지점의 크기는 데이터의 날짜 간격에 따른 날짜 쌍 수를 반영합니다. 예를 들어 상위 검색어가 약 한 달간 매일 표시되므로 30일 간격보다는 1일 간격에 더 많은 쌍이 있습니다.
데이터 시각화에 대한 자세한 내용은 Pandas 문서를 참조하세요.