Developers Haven

(DH)๋ธ”๋กœ๊ทธ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ธฐ์ˆ  ์ •๋ณด๋ฅผ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ์•ˆ์‹์ฒ˜๊ฐ€ ๋˜๊ณ  ์‹ถ์Œ์„ ํฌ๋งํ•˜์—ฌ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ๊ณผ ์„ฑ์žฅ ๊ณผ์ •์„ ๊ธฐ๋กํ•ด๋‘์—ˆ์œผ๋‹ˆ ํŽธํžˆ ๋‘˜๋Ÿฌ๋ณด์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Welcome to DH's Blog

[๊ธฐ์ˆ ๊ณต๋ถ€]/Python

[Kaggle] Google BigQuery๋ฅผ ํ™œ์šฉํ•œ Python ํ”„๋กœ๊ทธ๋ž˜๋ฐ

DH’s Blog 2023. 7. 30. 21:18
๋ฐ˜์‘ํ˜•

๐Ÿ‘€ ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ

ํšŒ์‚ฌ์—์„œ ํ”„๋กœ์ ํŠธ์™€ ์—…๋ฌด๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ์•„ํ‚คํ…ํŠธ(DA) ์—…๋ฌด ํŠน์„ฑ์ƒ SQL ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋งŽ์ด ํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๋ฌธ๋“ ์•ž์œผ๋กœ์˜ ๋‚ด๊ฐ€ ๋” ๋‹ค์–‘ํ•œ ์—…๋ฌด๋ฅผ ๋งก์œผ๋ ค๋ฉด SQL์™ธ์˜ ๊ฐœ๋ฐœ ๊ณต๋ถ€๋„ ๊พธ์ค€ํžˆ ํ•ด์•ผ๋˜๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์ด๋Ÿฐ ์ƒ๊ฐ์„ ๊ฐ€์ง€๊ณ  ์‹œ๋‹ˆ์–ด ๋ถ„๋“ค๊ป˜ ํ‰์†Œ ์–ด๋–ป๊ฒŒ ๊ณต๋ถ€ํ•˜์…จ๋Š”์ง€, ์–ด๋–ค ์‹์œผ๋กœ ์„ฑ์žฅํ•˜๋Š”๊ฒŒ ์ข‹์„์ง€์— ๋Œ€ํ•ด์„œ๋„ ๋งŽ์ด ๋ฌผ์–ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค. ์ด ์‹œ๊ฐ„์„ ํ†ตํ•ด ๋‚˜๋Š” 'ํ˜ธ๊ธฐ์‹ฌ์„ ๊ฐ€์ง€๊ณ  ๊ถ๊ธˆํ•œ๊ฒŒ ์ƒ๊ธธ๋•Œ๋งˆ๋‹ค ์ฐพ์•„๋ณด๊ณ  ๋‚ด๊ฒŒ ํ•„์š”ํ•œ ์—ญ๋Ÿ‰์„ ํ•˜๋‚˜์”ฉ ์ฑ„์›Œ๋‚˜๊ฐ€์ž'๋ผ๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ฆฌ๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ž…์‚ฌ ์ „(ํ•™๋ถ€์™€ ์ธํ„ด ์ƒํ™œ ๋™์•ˆ) ๊พธ์ค€ํžˆ ์ง„ํ–‰ํ–ˆ๋˜ Python ๊ฐœ๋ฐœ ๊ณต๋ถ€๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋ณด๊ฒŒ ๋˜์—ˆ๊ณ , ์ด ์‹œ๊ฐ„์„ ๋ธ”๋กœ๊ทธ์— ๊ธฐ๋กํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 


 

์šฐ์„ , ๊ฐ€์žฅ ๋งŽ์€ ๋ฐ์ดํ„ฐ์…‹์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฑ„๋„์ด ํ™œ์„ฑํ™” ๋˜์–ด์žˆ๋Š” 'Kaggle' ์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ํ•ด๋‹น ์‚ฌ์ดํŠธ์—์„œ๋Š” Python, SQL, Modeling ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์˜ ํŠœํ† ๋ฆฌ์–ผ๊ณผ ์˜ˆ์ œ ์—ฐ์Šต์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ๋„ˆ๋ฌด ์˜ค๋žœ๋งŒ์— Python ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ ํ„ฐ๋ผ ๊ฐ„๋‹จํ•œ ํŠœํ† ๋ฆฌ์–ผ์„ ํ†ตํ•ด ์˜› ๊ธฐ์–ต์„ ๋˜์‚ด๋ ค๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

 

๐Ÿ“์ด๋ฒˆ ์˜ˆ์ œ์—์„œ ์ฐธ๊ณ ํ•œ ์‚ฌ์ดํŠธ

https://www.kaggle.com/learn/intro-to-sql

 

Learn Intro to SQL Tutorials

Learn SQL for working with databases, using Google BigQuery.

www.kaggle.com

 

์‹ค์Šต1: Google BigQuery

 

BigQuery๋Š” ๋น…๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ SQL ์ฟผ๋ฆฌ๋ฅผ ๋น ๋ฅธ ์†๋„๋กœ ์ˆ˜ํ–‰ํ•ด์ฃผ๋Š” google cloud platform ์„œ๋น„์Šค ์ค‘ ํ•˜๋‚˜๋กœ, PB(ํŽ˜ํƒ€๋ฐ”์ดํŠธ) ์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋„ ๋น ๋ฅด๊ฒŒ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค. ๋ณธ ์‹ค์Šต์—์„œ๋Š” BigQuery๋ฅผ ์ด์šฉํ•œ SQL ์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

 

 

#BigQuery๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜
from google.cloud import bigquery

#Client ๊ฐ์ฒด ์ƒ์„ฑ
client = bigquery.Client()

#BigQuery๋‚ด์˜ 'hacker_news' ๋ฐ์ดํ„ฐ์…‹์„ ์‹ค์Šต์— ์ด์šฉ
dataset_ref = client.dataset("hacker_news", project="bigquery-public-data")
dataset = client.get_dataset(dataset_ref)

#'hacker_news' ๋ฐ์ดํ„ฐ์…‹์— ์žˆ๋Š” ํ…Œ์ด๋ธ” ๋ฆฌ์ŠคํŠธ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
tables = list(client.list_tables(dataset))

#ํ•ด๋‹น ํ…Œ์ด๋ธ” ๋ฆฌ์ŠคํŠธ์•ˆ์— ์žˆ๋Š” ํ…Œ์ด๋ธ”๋ช… ํ™•์ธ
for table in tables:
    print(table.table_id)
    
#'full'๋ช…์นญ์˜ ํ…Œ์ด๋ธ” ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
table_ref = dataset_ref.table("full")
table = client.get_table(table_ref)

 

1.ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ ์ •๋ณด

.schema ๊ธฐ๋Šฅ์œผ๋กœ ํ•ด๋‹น ํ…Œ์ด๋ธ”์ด ๊ฐ€์ง„ ์ปฌ๋Ÿผ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, (์ปฌ๋Ÿผ๋ช…/์ปฌ๋Ÿผ๋ฐ์ดํ„ฐํƒ€์ž…/NULL๊ฐ€๋Šฅ์—ฌ๋ถ€/์ปฌ๋Ÿผ์„ค๋ช… ๋“ฑ)์— ๋Œ€ํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
#'full' ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ •๋ณด ํ™•์ธ
table.schema

์ถœ๋ ฅ ๊ฒฐ๊ณผ

 

 

2.๋ฐ์ดํ„ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

(1) ํŠน์ • ๊ฐฏ์ˆ˜์˜ ํ–‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ๋ณด๋Š” ๋ฐฉ๋ฒ•

#'full' ํ…Œ์ด๋ธ”์˜ n๊ฐœ ํ–‰ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
#๋ฏธ๋ฆฌ๋ณด๊ณ  ์‹ถ์€ ํ–‰์˜ ๊ฐœ์ˆ˜๊ฐ€ n์ด๋ผ๋ฉด, max_result=n ์œผ๋กœ ์„ค์ •
client.list_rows(table, max_results=5).to_dataframe()

์ถœ๋ ฅ ๊ฒฐ๊ณผ

 

(2) ํŠน์ • ๊ฐฏ์ˆ˜์˜ ์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ณด๋Š” ๋ฐฉ๋ฒ•(+ํ–‰ ๊ฐฏ์ˆ˜๋„ ์„ค์ • ๊ฐ€๋Šฅ)

#'full' ํ…Œ์ด๋ธ”์˜ n๊ฐœ์˜ ์—ด๊ณผ m๊ฐœ์˜ ํ–‰ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
#๋ฏธ๋ฆฌ๋ณด๊ณ  ์‹ถ์€ ์—ด์˜ ๊ฐฏ์ˆ˜๊ฐ€ n์ด๋ผ๋ฉด, table.schema[:n]์œผ๋กœ ์„ค์ •
#๋ฏธ๋ฆฌ๋ณด๊ณ  ์‹ถ์€ ํ–‰์˜ ๊ฐฏ์ˆ˜๊ฐ€ m์ด๋ผ๋ฉด, max_results=m์œผ๋กœ ์„ค์ •
client.list_rows(table, selected_fields=table.schema[:3], max_results=5).to_dataframe()

์ถœ๋ ฅ ๊ฒฐ๊ณผ

 

 

์ด๋ฒˆ ์‹ค์Šต์—์„œ๋Š” ๊ฐ„๋‹จํžˆ BigQuery์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฐ์ดํ„ฐ์…‹์˜ ํ…Œ์ด๋ธ”์„ ๋ถˆ๋Ÿฌ์™”๊ณ , ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•ด๋ณด๋Š” ๊ณผ์ •์€ ๋‹ค์Œ ์‹œ๊ฐ„์— ์ง„ํ–‰ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

๋ฐ˜์‘ํ˜•