๋๊ธฐ์ ๊ทธ๋ก์ค๋ง์ผํฐ์ ์ค๋ฌด ๋ฐ์ดํฐ๋ถ์ GPT๋ก ์ง์ ํด๋ณด๊ธฐ
์ฌํ์ด๋ ์๊ณผ ๋ํ์์ ์ํ ์ค์ตํ ๊ฐ์ด๋์ ๋๋ค ๐
๋ชฉํ: CSV ๋ฐ์ดํฐ๋ฅผ BigQuery์ ์ฌ๋ฆฌ๊ณ , GPT์ ๋์์ผ๋ก SQL์ ์คํํ ๋ค, ์ค๋ฌดํ ์ธ์ฌ์ดํธ๊น์ง ๋ฝ์๋ณด๊ธฐ
์ด ์ฝํ ์ธ ๋ ๊ธธ๋ฒ์์ ์ ๋ฌผ๋ก ์ฃผ์ < ๋งค์ถ์ ๋ง๋๋ ๋ฐ์ดํฐ๋ถ์ with ์ฑGPT> (2026, ์กฐ์ ๋ฏธ ์ ) ๋์์์ ์๊ฐ์ ๋ฐ์์ต๋๋ค. thanks to ๊ธธ๋ฒโฃ๏ธ
์์ฑ : ๊ทธ๋ก์คํ๋๋ ์ด๋์ฐ (2026.05)
์ด ๋ฌธ์๋ฅผ ๋๊น์ง ๋ฐ๋ผ ํ๋ฉด ํ ์ ์๋ ๊ฒ
- Kaggle์์ ์ค์ต์ฉ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค๋ฐ์ ์ ์์ต๋๋ค.
- Google BigQuery์ CSV ํ์ผ์ ์ ๋ก๋ํด ๋ฐ์ดํฐ์ ๊ณผ ํ ์ด๋ธ์ ๋ง๋ค ์ ์์ต๋๋ค.
SELECT * FROM ... LIMIT 1000ํํ์ ์ฒซ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์คํํ ์ ์์ต๋๋ค.- SQL ๋ชฐ๋ผ๋ ๊ฒ๋จน์ง๋ง์ธ์. GPT๋ ๋ํํ๋ฉด์ ์ฉ์ด/์ฟผ๋ฆฌ ์ค๋ช ๊ฐ์ด ํด๋ฌ๋ผ๊ณ ํ๋ฉด ์ฝ๊ฒ ์ตํ์ง๋๋ค.
- GPT์๊ฒ โSQL ์์ฑ โ ์ค๋ฅ ์์ โ ๊ฒฐ๊ณผ ํด์ โ ๋ค์ ์ก์ ์ ์โ์ ๋งก๊ธฐ๋ ๊ธฐ๋ณธ ๋ฃจํด์ ์ตํ ์ ์์ต๋๋ค.
- ๋จ์ํ ํด์ ๋ง์ง๋ ๊ฒ์์ ๋๋์ง ์๊ณ , ๋ง์ผํฐ๊ฐ ์ค์ ๋ก ๋ณด๋ ๋งค์ถ, ์ด์ต, ์นดํ ๊ณ ๋ฆฌ, ๊ณ ๊ฐ ์ธ๊ทธ๋จผํธ ๊ด์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํด์ํด๋ณผ ์ ์์ต๋๋ค.
์ด ๊ฐ์ด๋๋ ์ด๋ฐ ์ฌ๋์๊ฒ ๋ง์ต๋๋ค
- ์์ ์ ์กฐ๊ธ ํด๋ดค์ง๋ง SQL, BigQuery, ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค๋ ์ฒ์์ธ ์ฌ๋
- ๋ฐ์ดํฐ ๋ถ์ ์ง๋ฌด๋ ๊ทธ๋ก์ค๋ง์ผํ ์ ๊ด์ฌ ์๋ ๋ํ์, ์ทจ์ค์, ์ฌํ์ด๋ ์
- โGPT๊ฐ ์ฝ๋๋ฅผ ๋์ ์ง์ค๋ค๋๋ฐ, ์ค๋ฌด์์๋ ์ด๋ป๊ฒ ์จ์ผ ํ์ง?โ๊ฐ ๊ถ๊ธํ ์ฌ๋
- ํฌํธํด๋ฆฌ์ค์ ๋ฃ์ ์ ์๋ ์์ ๋ฐ์ดํฐ ๋ถ์ ์ค์ต์ ์ง์ ๋ง๋ค์ด๋ณด๊ณ ์ถ์ ์ฌ๋
๊ทธ๋ก์ค๋ง์ผํฐ์ ๊ด์ : ๋ฐ์ดํฐ ๋ถ์์ โํดโ๋ณด๋ค โ์ง๋ฌธโ์ด ๋จผ์ ์ ๋๋ค
์ค๋ฌด์์ ๋ฐ์ดํฐ ๋ถ์์ ์ํ๋ ์ฌ๋์ ๋ณต์กํ SQL์ ์ธ์ฐ๋ ์ฌ๋์ด ์๋๋๋ค. ๋จผ์ ์ข์ ์ง๋ฌธ์ ๋์ง๊ณ , ๊ทธ ์ง๋ฌธ์ ๋ฐ์ดํฐ๋ก ํ์ธํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ก์ ์ผ๋ก ๋ฐ๊พธ๋ ์ฌ๋์ ๋๋ค.
์ ๊ฐ ์ค๋ฌด์์ GPT๋ฅผ ์ฐ๋ ๋ฐฉ์์ ๋จ์ํฉ๋๋ค.
- ์ง๋ฌธ์ ์ ๋ฆฌํฉ๋๋ค. ์: โ์ด๋ค ์นดํ ๊ณ ๋ฆฌ๊ฐ ๋งค์ถ์ ๋์๋ฐ ์ด์ต๋ฅ ์ ๋ฎ์๊น?โ
- GPT์๊ฒ SQL ์ด์์ ์์ฒญํฉ๋๋ค. ์: โBigQuery Standard SQL๋ก ์์ฑํด์ค.โ
- BigQuery์์ ์คํํฉ๋๋ค. ์๋ฌ๊ฐ ๋๋ฉด ์๋ฌ ๋ฉ์์ง๋ฅผ GPT์๊ฒ ๋ค์ ์ค๋๋ค.
- ๊ฒฐ๊ณผ๋ฅผ GPT์๊ฒ ๋ถ์ฌ๋ฃ๊ณ ํด์์ ์์ฒญํฉ๋๋ค. ๋จ, ์ต์ข ํ๋จ์ ์ฌ๋์ด ํฉ๋๋ค.
- ์ก์ ์ผ๋ก ๋ฐ๊ฟ๋๋ค. ์: โํ ์ธ์จ์ด ๋์๋ฐ ์ด์ต์ด ๋ฎ์ ์นดํ ๊ณ ๋ฆฌ๋ ํ๋ก๋ชจ์ ์ ์ฑ ์ ๋ค์ ๋ณธ๋ค.โ
ํต์ฌ์ GPT๋ฅผ โ์ ๋ต ์์ฑ๊ธฐโ๊ฐ ์๋๋ผ ๋ฐ์ดํฐ ๋ถ์ ํ์ด, ์ฆ ์์๋ฆฌ ์ฌ์์ฒ๋ผ ์ฐ๋ ๊ฒ์ ๋๋ค.
0. ์ค๋น๋ฌผ
| ์ค๋น๋ฌผ | ์ฉ๋ |
|---|---|
| Google ๊ณ์ | Google Cloud / BigQuery ์ ์ |
| Kaggle ๊ณ์ | ์ค์ต ๋ฐ์ดํฐ ๋ค์ด๋ก๋ |
| ChatGPT | SQL ์์ฑ, ์ค๋ฅ ์์ , ๊ฒฐ๊ณผ ํด์ ๋ณด์กฐ |
| ์น๋ธ๋ผ์ฐ์ | BigQuery ์ฝ์, Kaggle ์ ์ |
| 60๋ถ ์ ๋์ ์ง์ค ์๊ฐ | ์ฒ์ ์ธํ ์ ์กฐ๊ธ ๋ฏ์ค ์ ์์ต๋๋ค |
- Google Cloud์์ ๋น ์ฟผ๋ฆฌ๋ฅผ ๋๋ฆฌ๋๋ฐ, ์งํํ ์ค์ต ๋ฐ์ดํฐ๋ ์๊ธฐ ๋๋ฌธ์ ๋ฌด๋ฃ๋ก ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
1. ์ ์ฒด ์ค์ต ํ๋ฆ
Kaggle์์ CSV ๋ค์ด๋ก๋
โ
BigQuery ํ๋ก์ ํธ ์์ฑ
โ
๋ฐ์ดํฐ์
chapter1 ์์ฑ
โ
ํ
์ด๋ธ superstore ์์ฑ
โ
์ฒซ SQL ์ฟผ๋ฆฌ ์คํ
โ
GPT๋ก SQL ๊ฐ์ , ์ค๋ฅ ํด๊ฒฐ, ๊ฒฐ๊ณผ ํด์
โ
๋ง์ผํ
์ธ์ฌ์ดํธ ๋์ถ์ด๋ฒ ์ค์ต์์ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ Kaggle์ Superstore Dataset์ ๋๋ค. ์จ๋ผ์ธ/๋ฆฌํ ์ผ ๋น์ฆ๋์ค์์ ์์ฃผ ๋ณด๋ ์ฃผ๋ฌธ, ๋งค์ถ, ์ด์ต, ์นดํ ๊ณ ๋ฆฌ, ์ง์ญ, ๊ณ ๊ฐ ์ธ๊ทธ๋จผํธ ๋ฑ์ ์ปฌ๋ผ์ด ๋ค์ด ์์ด ๊ทธ๋ก์ค๋ง์ผํ ์ ๋ฌธ์ฉ์ผ๋ก ์ข์ต๋๋ค.
2. Kaggle์์ ์ํ๋ฐ์ดํฐ ๋ค์ด๋ก๋ํ๊ธฐ
๋ณดํต ์ํ๋ฐ์ดํฐ๋ ์บ๊ธ์์ ๋ง์ด ๋ฐ์ต๋๋ค. ํน์ ํต๊ณ์ฒญ ๊ณต๊ณต๋ฐ์ดํฐํฌํธ์ด๋ ์์ธ ์ด๋ฆฐ๋ฐ์ดํฐ ๊ด์ฅ์์๋ ๋ฐ์ ์ ์์ด์ ๐ ๋ง์ฝ ์ํ๋ ์ ๊ณ/์ง๋ฌด ๊ด๋ จ๋ ๋ฐ์ดํฐ์ ์ด ์๋ค๋ฉด GPT์๊ฒ ์ํ๋ก 20๋ง๊ฐ ๋ฐ์ดํฐ ์นผ๋ผ์ ํ์ ์์ ํต์์ ์ผ๋ก ๋ง์ด ์ฐ๋ ๊ฑธ๋ก ์์ฑํด๋ฌ๋ผ๊ณ ํด๋ ๋ฉ๋๋ค!
2-1. ๋ฐ์ดํฐ ํ์ด์ง ์ด๋
Kaggle์ Superstore Dataset ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
https://www.kaggle.com/datasets/vivek468/superstore-dataset-finalKaggle ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ ๋ค Download ๋ฒํผ์ ๋๋ฌ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค๋ฐ์ต๋๋ค. Superstore Dataset์ ๋งค์ถ, ์ด์ต, ๊ณ ๊ฐ, ์ง์ญ, ์นดํ ๊ณ ๋ฆฌ ๋ถ์ ์ฐ์ต์ ์ ํฉํ ๊ณต๊ฐ ๋ฐ์ดํฐ์ ๋๋ค.
2-2. ZIP ํ์ผ ์์ถ ํด์
๋ค์ด๋ก๋ํ ํ์ผ์ ๋ณดํต ZIP ํํ์ ๋๋ค. ์์ถ์ ํ๋ฉด CSV ํ์ผ์ ํ์ธํ ์ ์์ต๋๋ค. (๋ฐ์ดํฐ๋ถ์ ์์๋ xlxs ์์ ํ์ผ์ด ์๋ csv ํ์ผ์ ๊ฐ์ฅ ๋ง์ด ์๋๋ค!) AI๋ฅผ ๋ค๋ฃฐ ์ค ์๋ ์ค๋ฌด์๋ผ๋ฉด MCP๋ก๋ ์บ๊ธ ๋ฐ์ดํฐ ๋ฐ๋ก ๋ฐ์ ์ ์์ต๋๋ค :)
์์ ํ์ผ๋ช :
Sample - Superstore.csv๋์ค์ BigQuery์ ์ ๋ก๋ํ ๋ ์ด CSV ํ์ผ์ ์ ํํฉ๋๋ค.
3. BigQuery์ ์ ์ํ๊ณ ํ๋ก์ ํธ ๋ง๋ค๊ธฐ
3-1. BigQuery ์ ์
๋ธ๋ผ์ฐ์ ์์ Google Cloud BigQuery์ ์ ์ํฉ๋๋ค.
https://console.cloud.google.com/bigquery๋๋ Google์์ BigQuery๋ฅผ ๊ฒ์ํ ๋ค Google Cloud์ BigQuery ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค. BigQuery๋ Google Cloud์์ ์ ๊ณตํ๋ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค์
๋๋ค. SQL๋ก ํฐ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์กฐํํ ์ ์์ต๋๋ค.
3-2. ๋ก๊ทธ์ธ ๋ฐ ๊ธฐ๋ณธ ์ ๋ณด ์ค์
Google ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํฉ๋๋ค. ์ฒ์ ์ ์ํ๋ฉด ๊ตญ๊ฐ, ์๋น์ค ์ฝ๊ด, ์ด๋ฉ์ผ ์ ๋ฐ์ดํธ ์์ ์ฌ๋ถ ๋ฑ์ ๋ฌป๋ ํ๋ฉด์ด ๋์ฌ ์ ์์ต๋๋ค.
์ด๋ณด์๋ผ๋ฉด ๋ค์์ฒ๋ผ ์งํํ๋ฉด ๋ฉ๋๋ค.
- ๊ตญ๊ฐ: ๋ํ๋ฏผ๊ตญ ๋๋ ๋ณธ์ธ ๊ฑฐ์ฃผ ๊ตญ๊ฐ ์ ํ
- ์๋น์ค ์ฝ๊ด: ๋์ํด์ผ ๋ค์ ๋จ๊ณ ์งํ ๊ฐ๋ฅ
- ์ด๋ฉ์ผ ์ ๋ฐ์ดํธ: ์ ํ ์ฌํญ
- ๊ณ์ ๋๋ ๋์ ํ ๊ณ์ ํด๋ฆญ
3-3. ํ๋ก์ ํธ ์์ฑ
BigQuery์์ ์์ ํ๋ ค๋ฉด ๋จผ์ ํ๋ก์ ํธ๊ฐ ํ์ํฉ๋๋ค. ํ๋ก์ ํธ๋ ์ฝ๊ฒ ๋งํด โ๋ฐ์ดํฐ์ ๋ฆฌ์์ค๋ฅผ ๋ด๋ ์์ ๊ณต๊ฐโ์ ๋๋ค. ๋ค๋ชจ๋ฅผ ํด๋ฆญํ๋ฉด โ์ ํ๋ก์ ํธโ๋ฅผ ์์ฑํ ์ ์์ด์.
์์ ํ๋ก์ ํธ ์ด๋ฆ์ ๋ค์์ฒ๋ผ ์ค์ ํฉ๋๋ค.
ํ๋ก์ ํธ ์ด๋ฆ: DataAnalysis์ฃผ์ํ ์ ์ ํ๋ก์ ํธ ์ด๋ฆ๊ณผ ํ๋ก์ ํธ ID๊ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ ๋๋ค.
- ํ๋ก์ ํธ ์ด๋ฆ: ์ฌ๋์ด ์์๋ณด๊ธฐ ์ฌ์ด ์ด๋ฆ์
๋๋ค. ์:
DataAnalysis - ํ๋ก์ ํธ ID: BigQuery ์ฟผ๋ฆฌ์์ ์ค์ ๋ก ์ฌ์ฉํ๋ ๊ณ ์ ID์
๋๋ค. ์:
dataanalysis-449703
ํ๋ก์ ํธ ID๋ ์๋์ผ๋ก ์ซ์๊ฐ ๋ถ์ด ์์ฑ๋ ์ ์์ต๋๋ค. ๋ค์์ SQL์ ์์ฑํ ๋ ๋ฐ๋์ ๋ณธ์ธ์ ํ๋ก์ ํธ ID๋ก ๋ฐ๊ฟ์ผ ํฉ๋๋ค.
3-4. ํ๋ก์ ํธ ์ ํ ํ์ธ
ํ๋ก์ ํธ ์์ฑ ํ BigQuery ํ๋ฉด ์ผ์ชฝ ์๋จ ๋๋ ํ๋ก์ ํธ ์ ํ ๋ฉ๋ด์์ ๋ฐฉ๊ธ ๋ง๋ ํ๋ก์ ํธ๊ฐ ์ ํ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
์ ํ๋ ํ๋ก์ ํธ: DataAnalysis
ํ๋ก์ ํธ ID: dataanalysis-4497034. BigQuery์ CSV ์ ๋ก๋ํ๊ธฐ
4-1. BigQuery ํ๋ฉด์ผ๋ก ๋์๊ฐ๊ธฐ
BigQuery ์ฝ์๋ก ๋์๊ฐ๋๋ค. ๋ฉ์ธ ํ์์ ์คํฌ๋กค์ ํ๋จ์ผ๋ก ์ญ ๋ด๋ฆฌ๋ฉด ์์ฒด ๋ฐ์ดํฐ ์ถ๊ฐ โ ๋ฌธ์ ํ์ผ ์ ๋ก๋ ๋ฒํผ์ด ์์ด์! ๋ก์ปฌ CSV ํ์ผ์ BigQuery ํ ์ด๋ธ๋ก ์ ๋ก๋ํฉ๋๋ค.
4-2. ํ ์ด๋ธ ์์ฑ ๋ฐ ๋ฐ์ดํฐ์ ๋ง๋ค๊ธฐ
์์์ ๋ฐ์ดํฐ ์ถ๊ฐ๋ฅผ ๋๋ ๋ค๋ฉด ๋จ๋ ํ๋ฉด์ ๋ค์ด๋ฐ์๋ ์บ๊ธ .csv ํ์ผ์ ์ ๋ก๋ํ๊ณ ์๋ ๋ด์ฉ์ ์ ๋ ฅํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
| ํญ๋ชฉ | ์ค์ ๊ฐ |
|---|---|
| Create table from | Upload ๋๋ ๋ก์ปฌ ํ์ผ |
| Select file | ์์ถ ํด์ ํ Sample - Superstore.csv |
| File format | CSV |
| Dataset | ์ ๋ฐ์ดํฐ์ ๋ง๋ค๊ธฐ |
| Dataset ID | chapter1 |
| Table name | superstore |
| Schema | Auto detect / ์๋ ๊ฐ์ง ์ฒดํฌ |
4-3. ์์ฑ ํ์ธ
๋ค์ ๋น ์ฟผ๋ฆฌ ํ์ผ๋ก ๋์๊ฐ๋ฉด ์์ฑํ ํ ์ด๋ธ์ด ๋ณด์ธ๋ค๋ฉด ์ฑ๊ณต์ ๋๋ค.
ํ๋ก์ ํธ ID
โโโ chapter1
โโโ superstore์ฉ์ด๋ฅผ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
| ์ฉ์ด | ์๋ฏธ |
|---|---|
| Project | Google Cloud์ ์์ ๊ณต๊ฐ. ๋ฐ์ดํฐ, ๊ถํ, ๋น์ฉ ๊ด๋ฆฌ๋ฅผ ๋ฌถ๋ ๋จ์ |
| Dataset | BigQuery์์ ํ ์ด๋ธ์ ๋ด๋ ์ปจํ ์ด๋ |
| Table | ์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ํ. ํ๊ณผ ์ด๋ก ๊ตฌ์ฑ๋จ |
| Schema | ํ ์ด๋ธ์ ์ปฌ๋ผ๋ช ๊ณผ ๋ฐ์ดํฐ ํ์ ์ ๋ณด |
5. ์ฒซ SQL ์ฟผ๋ฆฌ ์คํํ๊ธฐ
5-1. ์ฟผ๋ฆฌ ํ๋ฉด ์ด๊ธฐ
์์ฑํด๋ chapter1 > superstore ํ
์ด๋ธ์ ๋๋ฌ๋ณด์ธ์. ํ
์ด๋ธ ์์ชฝ ๋ฉ๋ด์์ โ๋ค์์์ ์ด๊ธฐโ โ SQL ์ฟผ๋ฆฌ (์ํญ) ์ ๋๋ฅด๋ฉด SQL์ ๋ฐ๋ก ์คํํ ์ ์์ด์!
5-2. ์ฒซ ์ฟผ๋ฆฌ ์์ฑ
์๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. PROJECT_ID ๋ถ๋ถ์ ๋ฐ๋์ ๋ณธ์ธ์ ํ๋ก์ ํธ ID๋ก(์๋ง ์ํ์ฟผ๋ฆฌ๊ฐ ์จ์์๊ฑฐ์์!) ๋ฐ๊ฟ์ผ ํฉ๋๋ค.
์์:
SELECT *
FROM `dataanalysis-449703.chapter1.superstore`
LIMIT 1000;5-3. ์คํํ๊ธฐ
์๋จ์ Run / ์คํ ๋ฒํผ์ ๋๋ฆ ๋๋ค. ๊ฒฐ๊ณผ ์์ญ์ ์ต๋ 1,000๊ฐ์ ํ์ด ์ถ๋ ฅ๋๋ฉด ์ฑ๊ณต์ ๋๋ค.
์ด ์ฟผ๋ฆฌ๋ โsuperstore ํ ์ด๋ธ์ ๋ชจ๋ ์ปฌ๋ผ์ ์ต๋ 1,000๊ฐ ํ๊น์ง ๋ณด์ฌ์คโ๋ผ๋ ๋ป์ ๋๋ค.
| SQL | ์๋ฏธ |
|---|---|
| SELECT * | ๋ชจ๋ ์ปฌ๋ผ์ ์ ํ |
| FROM ... | ์ด๋ค ํ ์ด๋ธ์์ ๊ฐ์ ธ์ฌ์ง ์ง์ |
| LIMIT 1000 | ๊ฒฐ๊ณผ๋ฅผ ์ต๋ 1,000ํ๊น์ง๋ง ์ถ๋ ฅ |
์ฒซ ๋ฒ์งธ ๋ชฉํ๋ ๋ฉ์ง ๋ถ์์ด ์๋๋ผ, ๋ฐ์ดํฐ๊ฐ ์ ๋ค์ด์๋์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค.
6. GPT๋ฅผ ์์๋ฆฌ ์ฌ์์ฒ๋ผ ์ฐ๋ ํ๋กฌํํธ ๋ฃจํด
๋ฐ์ดํฐ ๋ถ์ ์ ๋ฌธ์๊ฐ ๊ฐ์ฅ ๋ง์ด ๋งํ๋ ์ง์ ์ โ์ด์ ๋ญ ์ง๋ฌธํ์ง?โ์ ๋๋ค. ์ด๋ GPT์๊ฒ SQL๋ง ๋งก๊ธฐ์ง ๋ง๊ณ , ์ง๋ฌธ ์ค๊ณ โ SQL ์์ฑ โ ์ค๋ฅ ์์ โ ๊ฒฐ๊ณผ ํด์๊น์ง ํ ํ๋ฆ์ผ๋ก ์์ฒญํ์ธ์.
6-1. ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํด๋ฌ๋ผ๊ณ ์์ฒญํ๊ธฐ
BigQuery์์ ํ ์ด๋ธ ์คํค๋ง ๋๋ ์ปฌ๋ผ๋ช ์ ํ์ธํ ๋ค GPT์๊ฒ ์ด๋ ๊ฒ ์์ฒญํฉ๋๋ค.
๋๋ ๋ฐ์ดํฐ ๋ถ์์ ์ฒ์ ๋ฐฐ์ฐ๋ ๋ํ์์ด์ผ.
BigQuery์ Superstore ๋ฐ์ดํฐ๋ฅผ ์
๋ก๋ํ๊ณ , ํ
์ด๋ธ ๊ฒฝ๋ก๋ `PROJECT_ID.chapter1.superstore`์ผ.
์ปฌ๋ผ์ Row ID, Order ID, Order Date, Ship Date, Ship Mode, Customer ID, Segment, Country, City, State, Region, Product ID, Category, Sub-Category, Product Name, Sales, Quantity, Discount, Profit ๋ฑ์ด ์์ด.
๊ฐ ์ปฌ๋ผ์ด ๋ฌด์จ ์๋ฏธ์ธ์ง ์ด๋ณด์๋ ์ดํดํ ์ ์๊ฒ ์ค๋ช
ํด์ค.
๊ทธ๋ฆฌ๊ณ ์ด ๋ฐ์ดํฐ๋ก ํ ์ ์๋ ๋ถ์ ์ง๋ฌธ 10๊ฐ๋ฅผ ๋ง์ผํฐ ๊ด์ ์ผ๋ก ์ ์ํด์ค.6-2. SQL์ ์์ฑํด๋ฌ๋ผ๊ณ ์์ฒญํ๊ธฐ
์๋ ๋ถ์ ์ง๋ฌธ์ BigQuery Standard SQL๋ก ์์ฑํด์ค.
๋ถ์ ์ง๋ฌธ:
์นดํ
๊ณ ๋ฆฌ์ ์๋ธ์นดํ
๊ณ ๋ฆฌ๋ณ ๋งค์ถ, ์ด์ต, ์ด์ต๋ฅ ์ ๋ณด๊ณ ์ถ์ด.
์กฐ๊ฑด:
- ํ
์ด๋ธ ๊ฒฝ๋ก๋ `PROJECT_ID.chapter1.superstore`
- ์ด์ต๋ฅ ์ Profit / Sales๋ก ๊ณ์ฐ
- ์ด์ต์ด ๋ฎ์ ์์๋ก ์ ๋ ฌ
- ์ด๋ณด์๊ฐ ์ดํดํ ์ ์๋๋ก SQL ๊ฐ ์ค์ ์ค๋ช
ํด์ค.6-3. ์๋ฌ๊ฐ ๋ฌ์ ๋ ์์ ์์ฒญํ๊ธฐ
BigQuery์์ ์๋ฌ๊ฐ ๋๋ฉด ์๋ฌ ๋ฉ์์ง๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํด์ GPT์๊ฒ ๋ถ์ฌ๋ฃ์ต๋๋ค.
BigQuery์์ ์๋ SQL์ ์คํํ๋๋ฐ ์๋ฌ๊ฐ ๋ฌ์ด.
๋๋ SQL ์ด๋ณด์์ผ.
[๋ด๊ฐ ์คํํ SQL]
์ฌ๊ธฐ์ SQL ๋ถ์ฌ๋ฃ๊ธฐ
[์๋ฌ ๋ฉ์์ง]
์ฌ๊ธฐ์ BigQuery ์๋ฌ ๋ฉ์์ง ๋ถ์ฌ๋ฃ๊ธฐ
์์ฒญ:
1. ์๋ฌ ์์ธ์ ์ฝ๊ฒ ์ค๋ช
ํด์ค.
2. ์์ ๋ SQL์ ๋ค์ ์์ฑํด์ค.
3. ๊ฐ์ ์ค์๋ฅผ ํผํ๋ ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ์๋ ค์ค.6-4. ๊ฒฐ๊ณผ๋ฅผ ํด์ํด๋ฌ๋ผ๊ณ ์์ฒญํ๊ธฐ
์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ช ์ค ๋ณต์ฌํด GPT์๊ฒ ์ค๋๋ค.
์๋๋ BigQuery์์ ๋์จ ๊ฒฐ๊ณผ์ผ.
๋๋ ์ด ๊ฒฐ๊ณผ๋ฅผ ๋ง์ผํ
์ค๋ฌด ๊ด์ ์์ ํด์ํ๊ณ ์ถ์ด.
[๊ฒฐ๊ณผ]
์ฌ๊ธฐ์ ๊ฒฐ๊ณผ ํ
์ด๋ธ ์ผ๋ถ ๋ถ์ฌ๋ฃ๊ธฐ
์์ฒญ:
1. ํต์ฌ ์ธ์ฌ์ดํธ 3๊ฐ
2. ์ ๊ทธ๋ ๊ฒ ํด์ํ ์ ์๋์ง ๊ทผ๊ฑฐ
3. ์ค๋ฌด์์ ํด๋ณผ ์ก์
3๊ฐ
4. ์ถ๊ฐ๋ก ํ์ธํด์ผ ํ ๋ฐ์ดํฐ ์ง๋ฌธ 5๊ฐ7. ๋ฐ๋ก ์คํํด๋ณผ ์ค๋ฌดํ SQL ๋ฏธ์
์๋ SQL์์ PROJECT_ID๋ ๋ณธ์ธ์ ํ๋ก์ ํธ ID๋ก ๋ฐ๊ฟ ์คํํ์ธ์.
๋ฏธ์ 1. ์ ์ฒด ๋ฐ์ดํฐ ๊ท๋ชจ ํ์ธํ๊ธฐ
SELECT
COUNT(*) AS row_count,
COUNT(DISTINCT `Order ID`) AS order_count,
COUNT(DISTINCT `Customer ID`) AS customer_count
FROM `PROJECT_ID.chapter1.superstore`;GPT ํด์ ํ๋กฌํํธ
์ด ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ๋ฐ์ดํฐ ๊ท๋ชจ๋ฅผ ์ด๋ป๊ฒ ์ดํดํ๋ฉด ๋๋์ง ์ค๋ช
ํด์ค.
row_count, order_count, customer_count์ ์ฐจ์ด๋ ์๋ ค์ค.๋ฏธ์ 2. ์ ์ฒด ๋งค์ถ, ์ด์ต, ์ด์ต๋ฅ ๋ณด๊ธฐ
SELECT
ROUND(SUM(Sales), 2) AS total_sales,
ROUND(SUM(Profit), 2) AS total_profit,
ROUND(SUM(Profit) / NULLIF(SUM(Sales), 0), 4) AS profit_margin
FROM `PROJECT_ID.chapter1.superstore`;์ค๋ฌด ํฌ์ธํธ
๋งค์ถ๋ง ๋ณด๋ฉด ์ํํฉ๋๋ค. ๊ทธ๋ก์ค๋ง์ผํ ์์๋ ์ฑ์ฅ๋ฅ , ๋งค์ถ, ์ด์ต๋ฅ ์ ํจ๊ป ๋ด์ผ ํฉ๋๋ค. ๋งค์ถ์ด ์ปค์ ธ๋ ์ด์ต์ด ์ค๋ฉด ์บ ํ์ธ์ด๋ ํ ์ธ ์ ์ฑ ์ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค.
๋ฏธ์ 3. ์นดํ ๊ณ ๋ฆฌ๋ณ ์ฑ๊ณผ ๋ณด๊ธฐ
SELECT
Category,
ROUND(SUM(Sales), 2) AS sales,
ROUND(SUM(Profit), 2) AS profit,
ROUND(SUM(Profit) / NULLIF(SUM(Sales), 0), 4) AS profit_margin
FROM `PROJECT_ID.chapter1.superstore`
GROUP BY Category
ORDER BY profit DESC;GPT ํด์ ํ๋กฌํํธ
์๋ ์นดํ
๊ณ ๋ฆฌ๋ณ ๋งค์ถ, ์ด์ต, ์ด์ต๋ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ
๊ทธ๋ก์ค๋ง์ผํฐ ๊ด์ ์์ ์ด๋ค ์นดํ
๊ณ ๋ฆฌ์ ์ง์คํด์ผ ํ ์ง ์๋ ค์ค.
ํด์ ๊ธฐ์ค:
- ๋งค์ถ์ด ํฐ ์นดํ
๊ณ ๋ฆฌ
- ์ด์ต์ด ํฐ ์นดํ
๊ณ ๋ฆฌ
- ๋งค์ถ์ ํฐ๋ฐ ์ด์ต๋ฅ ์ด ๋ฎ์ ์นดํ
๊ณ ๋ฆฌ
- ์ถ๊ฐ๋ก ํ์ธํด์ผ ํ ์์ธ๋ฏธ์ 4. ์๋ธ์นดํ ๊ณ ๋ฆฌ๋ณ ์์ค ๊ตฌ๊ฐ ์ฐพ๊ธฐ
SELECT
Category,
`Sub-Category`,
ROUND(SUM(Sales), 2) AS sales,
ROUND(SUM(Profit), 2) AS profit,
ROUND(SUM(Profit) / NULLIF(SUM(Sales), 0), 4) AS profit_margin
FROM `PROJECT_ID.chapter1.superstore`
GROUP BY Category, `Sub-Category`
ORDER BY profit ASC
LIMIT 10;์ค๋ฌด ํฌ์ธํธ
์ด ์ฟผ๋ฆฌ๋ โ๋ฌด์์ด ๋์ ๋ฒ๊ณ ์๋๊ฐ?โ๋ณด๋ค โ๋ฌด์์ด ๋์ ์๊ณ ์๋๊ฐ?โ๋ฅผ ๋จผ์ ๋ด ๋๋ค. ์ค๋ฌด์์๋ ์ฑ์ฅ ๊ธฐํ๋งํผ์ด๋ ์์ค์ ์ค์ด๋ ๊ฒ๋ ์ค์ํฉ๋๋ค.
๋ฏธ์ 5. ์ง์ญ๋ณ ์ฑ๊ณผ ๋ณด๊ธฐ
SELECT
Region,
ROUND(SUM(Sales), 2) AS sales,
ROUND(SUM(Profit), 2) AS profit,
ROUND(SUM(Profit) / NULLIF(SUM(Sales), 0), 4) AS profit_margin
FROM `PROJECT_ID.chapter1.superstore`
GROUP BY Region
ORDER BY profit DESC;GPT ํด์ ํ๋กฌํํธ
์ด ์ง์ญ๋ณ ์ฑ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ
์ด๋ ์ง์ญ์ ๋ ํค์์ผ ํ๊ณ , ์ด๋ ์ง์ญ์ ์์ธ ๋ถ์์ด ํ์ํ์ง ์๋ ค์ค.
๋ง์ผํ
์์ฐ ๋ฐฐ๋ถ ๊ด์ ์ผ๋ก ์ค๋ช
ํด์ค.๋ฏธ์ 6. ํ ์ธ์จ๊ณผ ์ด์ต์ ๊ด๊ณ ๋ณด๊ธฐ
SELECT
Discount,
COUNT(*) AS row_count,
ROUND(SUM(Sales), 2) AS sales,
ROUND(SUM(Profit), 2) AS profit,
ROUND(SUM(Profit) / NULLIF(SUM(Sales), 0), 4) AS profit_margin
FROM `PROJECT_ID.chapter1.superstore`
GROUP BY Discount
ORDER BY Discount;์ค๋ฌด ํฌ์ธํธ
ํ ์ธ์ ๋งค์ถ์ ์ฌ๋ฆด ์ ์์ง๋ง, ์ด์ต์ ๋ง์น ์๋ ์์ต๋๋ค. ์ด๋ณด์๋ โํ ์ธ = ์ข์ ๊ฒโ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ์ฝ์ง๋ง, ๊ทธ๋ก์ค๋ง์ผํฐ๋ ํ ์ธ์จ๋ณ ์ด์ต๋ฅ ์ ๋ฐ๋์ ๋ด ๋๋ค.
๋ฏธ์ 7. ์๋ณ ๋งค์ถ ์ถ์ด ๋ณด๊ธฐ
์๋ ์ฟผ๋ฆฌ๋ Order Date๊ฐ DATE ํ์
์ผ๋ก ์ ์ธ์๋์์ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
SELECT
FORMAT_DATE('%Y-%m', `Order Date`) AS order_month,
ROUND(SUM(Sales), 2) AS sales,
ROUND(SUM(Profit), 2) AS profit
FROM `PROJECT_ID.chapter1.superstore`
GROUP BY order_month
ORDER BY order_month;๋ง์ฝ ๋ ์ง ํ์ ์๋ฌ๊ฐ ๋๋ฉด, GPT์๊ฒ ์๋์ฒ๋ผ ์์ฒญํ์ธ์.
BigQuery์์ Order Date ์ปฌ๋ผ ๋๋ฌธ์ FORMAT_DATE ์๋ฌ๊ฐ ๋ฌ์ด.
Order Date๊ฐ ๋ฌธ์์ด์ผ ์๋ ์์ด.
CSV ๋ ์ง ํ์์ ์๋ฅผ ๋ค์ด 11/8/2016 ๊ฐ์ ํํ์ผ.
BigQuery Standard SQL๋ก ๋ ์ง๋ฅผ ํ์ฑํด์ ์๋ณ ๋งค์ถ์ ๋ณด๋ ์ฟผ๋ฆฌ๋ก ๊ณ ์ณ์ค.์ฐธ๊ณ ๋ก ๋ฌธ์์ด ๋ ์ง์ผ ๋๋ ์๋์ฒ๋ผ ๋ฐ๊ฟ์ผ ํ ์ ์์ต๋๋ค.
SELECT
FORMAT_DATE('%Y-%m', PARSE_DATE('%m/%d/%Y', `Order Date`)) AS order_month,
ROUND(SUM(Sales), 2) AS sales,
ROUND(SUM(Profit), 2) AS profit
FROM `PROJECT_ID.chapter1.superstore`
GROUP BY order_month
ORDER BY order_month;8. ๊ฒฐ๊ณผ ํด์์ ์ด 4๋จ๊ณ๋ก ์ ๋ฆฌํ์ธ์
์ค๋ฌด์์๋ SQL์ ์คํํ ๊ฒ๋ณด๋ค ๊ฒฐ๊ณผ๋ฅผ ์ด๋ป๊ฒ ๋งํ๋๋๊ฐ ๋ ์ค์ํฉ๋๋ค.
1๋จ๊ณ. Fact โ ๋ฐ์ดํฐ๊ฐ ๋ณด์ฌ์ฃผ๋ ์ฌ์ค
์: Furniture ์นดํ
๊ณ ๋ฆฌ๋ ๋งค์ถ์ ํฌ์ง๋ง ์ด์ต๋ฅ ์ด ๋ฎ๋ค.
2๋จ๊ณ. Why โ ์ ๊ทธ๋ด ๊ฐ๋ฅ์ฑ์ด ์๋๊ฐ
์: ํน์ ์๋ธ์นดํ
๊ณ ๋ฆฌ์์ ํ ์ธ์จ์ด ๋๊ฑฐ๋ ๋ฐฐ์ก ๋น์ฉ์ด ์ปค์ ์ด์ต์ด ๋ฎ์์ก์ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
3๋จ๊ณ. Action โ ๊ทธ๋์ ๋ฌด์์ ํ ๊ฒ์ธ๊ฐ
์: ์ด์ต๋ฅ ์ด ๋ฎ์ ์๋ธ์นดํ
๊ณ ๋ฆฌ์ ํ ์ธ ์ ์ฑ
์ ์ฌ๊ฒํ ํ๊ณ , ๊ณ ๋ง์ง ์ํ๊ตฐ ์ค์ฌ์ผ๋ก ์บ ํ์ธ์ ์ฌํธํ๋ค.
4๋จ๊ณ. Next Question โ ๋ค์์ ๋ฌด์์ ํ์ธํ ๊ฒ์ธ๊ฐ
์: ํ ์ธ์จ ๊ตฌ๊ฐ๋ณ ์ด์ต๋ฅ ์ ๋ณด๊ณ , ์์ค์ด ๋ฐ์ํ๋ ํ ์ธ ๊ธฐ์ค์ ์ ์ฐพ๋๋ค.
10. ์ด๋ณด์๊ฐ ์์ฃผ ๋งํ๋ ๋ฌธ์ ์ ํด๊ฒฐ๋ฒ
๋ฌธ์ 1. ํ๋ก์ ํธ ID๊ฐ ์ฑ ์ด๋ ์์์ ๋ฌ๋ผ์
์ ์์
๋๋ค. ํ๋ก์ ํธ ID๋ ๊ณ์ ๋ง๋ค ๋ค๋ฅด๊ฒ ์์ฑ๋ฉ๋๋ค. ์์์ dataanalysis-449703 ๊ฐ์ ๊ฐ์ ๊ทธ๋๋ก ์ฐ์ง ๋ง๊ณ , ๋ณธ์ธ์ ํ๋ก์ ํธ ID๋ก ๋ฐ๊พธ์ธ์.
FROM `๋ดํ๋ก์ ํธID.chapter1.superstore`๋ฌธ์ 2. Table not found ์๋ฌ๊ฐ ๋์
์๋๋ฅผ ํ์ธํ์ธ์.
- ํ๋ก์ ํธ ID๊ฐ ์ ํํ๊ฐ?
- ๋ฐ์ดํฐ์
์ด๋ฆ์ด
chapter1์ธ๊ฐ? - ํ
์ด๋ธ ์ด๋ฆ์ด
superstore์ธ๊ฐ? - ํ ์ด๋ธ ๊ฒฝ๋ก ์ ์ฒด๋ฅผ ๋ฐฑํฑ์ผ๋ก ๊ฐ์๋๊ฐ?
์ฌ๋ฐ๋ฅธ ํ์:
FROM `PROJECT_ID.chapter1.superstore`๋ฌธ์ 3. ์ปฌ๋ผ๋ช ๋๋ฌธ์ ์๋ฌ๊ฐ ๋์
Order ID, Sub-Category, Customer ID์ฒ๋ผ ๊ณต๋ฐฑ์ด๋ ํ์ดํ์ด ์๋ ์ปฌ๋ผ๋ช
์ ๋ฐฑํฑ์ผ๋ก ๊ฐ์ธ์ผ ํฉ๋๋ค.
SELECT `Order ID`, `Sub-Category`
FROM `PROJECT_ID.chapter1.superstore`;๋ฌธ์ 4. ๋ ์ง ํจ์์์ ์๋ฌ๊ฐ ๋์
CSV ์ ๋ก๋ ์ ๋ ์ง๊ฐ DATE๊ฐ ์๋๋ผ STRING์ผ๋ก ์กํ์ ์ ์์ต๋๋ค. GPT์๊ฒ ์ปฌ๋ผ ํ์ ๊ณผ ์๋ฌ ๋ฉ์์ง๋ฅผ ๊ฐ์ด ์ฃผ๊ณ ์์ ์์ฒญํ์ธ์.
Order Date๊ฐ STRING์ผ๋ก ์กํ ๊ฒ ๊ฐ์.
๊ฐ ์์๋ 11/8/2016์ด์ผ.
BigQuery์์ ์๋ณ ์ง๊ณ๋ฅผ ํ ์ ์๋๋ก PARSE_DATE๋ฅผ ์จ์ ์ฟผ๋ฆฌ๋ฅผ ๊ณ ์ณ์ค.๋ฌธ์ 5. GPT๊ฐ ๋ง๋ SQL์ด ๋ฐ๋ก ์คํ๋์ง ์์์
์ ์์ ๋๋ค. GPT๋ ์ด์์ ๋ง๋ค์ด์ฃผ๋ ๋๊ตฌ์ ๋๋ค. ์คํ ํ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ค์ GPT์๊ฒ ์ฃผ๋ฉด์ ๊ณ ์ณ๊ฐ๋ ๋ฐฉ์์ด ์ค๋ฌด์ ๋ ๊ฐ๊น์ต๋๋ค.
๋ถ๋ก. ์ฐธ๊ณ ๋งํฌ
- BigQuery Console: https://console.cloud.google.com/bigquery
- BigQuery Sandbox ์๋ด: https://cloud.google.com/bigquery/docs/sandbox
- BigQuery ๋ฐ์ดํฐ์ ์์ฑ ๋ฌธ์: https://cloud.google.com/bigquery/docs/datasets
- BigQuery CSV ๋ก๋ ๋ฌธ์: https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-csv
- Google Cloud Free Program: https://cloud.google.com/free/docs/free-cloud-features
- Kaggle Superstore Dataset: https://www.kaggle.com/datasets/vivek468/superstore-dataset-final
๋ง์ง๋ง ๋ฉ์์ง
๋ฐ์ดํฐ ๋ถ์์ ์ฒ์๋ถํฐ ์๋ฒฝํ๊ฒ ์ดํดํ๊ณ ์์ํ๋ ์ผ์ด ์๋๋๋ค. ์ฒ์์๋ โ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ ธ๋คโ, โ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋คโ, โ๊ฒฐ๊ณผ๋ฅผ ํด์ํ๋คโ๋ ์์ ์ฑ๊ณต ๊ฒฝํ์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค.
GPT๋ฅผ ์ ์ฐ๋ ์ฌ๋์ ์ง๋ฌธ์ ์๊ฒ ์ชผ๊ฐญ๋๋ค. ์ค๋์ ์ฒซ ์ง๋ฌธ๋ง ๋์ ธ๋ณด์ธ์.
์ด ๋ฐ์ดํฐ์์ ๋งค์ถ์ ๋์๋ฐ ์ด์ต๋ฅ ์ด ๋ฎ์ ๊ณณ์ ์ด๋์ผ?๊ทธ ์ง๋ฌธ ํ๋๊ฐ ๋ฐ์ดํฐ ๋ถ์์ ์์์ ๋๋ค.