Training Data Split in BigQuery
Page content
I. 구글 클라우드 설정
본격적인 빅쿼리 실습에 앞서서, Python과 연동하는 예제를 준비하였다. 빅쿼리 시작에 앞서서 선행적으로 클라우드 사용을 해야 한다.
- 만약 GCP 프로젝트가 없다면, 계정을 연동한다. Go to Cloud Resource Manager
- 그리고, 비용결제를 위한 카드를 등록한다. Enable billing
- 마지막으로 BigQuery API를 사용해야 하기 때문에 빅쿼리 API 사용허가를 내준다.Enable BigQuery
위 API를 이용하지 않으면 Python
또는 R
과 연동해서 사용할 수는 없다. 자주 쓰는것이 아니라면 비용은 거의 발생하지 않으니 염려하지 않아도 된다. 비용관리에 대한 자세한 내용은 BigQuery 권장사항: 비용 관리에서 확인하기를 바란다.
II. 사용자 계정 인증
구글 코랩을 사용해서 인증 절차를 밟도록 한다. 아래 소스코드는 변경시키지 않는다. 아래 절차대로 진행하면 된다. Gmail
인증 절차와 비슷하다.
from google.colab import auth
auth.authenticate_user()
print('Authenticated')
Authenticated
III. Query 작성
- 샘플 데이터를 가져오는 기본 코드를 작성합니다.
from google.cloud import bigquery
from tabulate import tabulate
import pandas as pd
project_id = 'your_project_id'
client = bigquery.Client(project=project_id)
temp = client.query('''
SELECT
date,
airline,
departure_airport,
departure_schedule,
arrival_airport,
arrival_delay
FROM
`bigquery-samples.airline_ontime_data.flights`
WHERE
RAND() < 0.8
''').to_dataframe()
print(tabulate(temp, headers='keys', tablefmt='psql'))
- 위 파일을 실행하는 데, 다소 시간이 소요된다.
- 그러나, 이 방식은
NOT REPEATABLE
이다. 이유는RAND()
매번 실행할 때마다 각각 다른 결괏값을 RETURN 하기 때문이다.
IV. Solution
- Hashing 방식과 Modulo 연산자를 활용하여 training & validation을 분리한다.
client = bigquery.Client(project=your_project_id)
temp = client.query('''
SELECT
date,
airline,
departure_airport,
departure_schedule,
arrival_airport,
arrival_delay
FROM
`bigquery-samples.airline_ontime_data.flights`
WHERE
MOD(ABS(FARM_FINGERPRINT(date)), 10) IN (9)
''').to_dataframe()
print(temp.head())
date airline ... arrival_airport arrival_delay
0 2006-08-17 KH ... KOA -4.0
1 2006-08-14 KH ... KOA -7.0
2 2006-08-11 KH ... KOA 0.0
3 2006-08-27 KH ... KOA 4.0
4 2007-11-15 KH ... KOA -9.0
[5 rows x 6 columns]