Prompt file imported from minicoohei/ai-agent-camp (
.cursor/commands/lesson/start-8-2.md). Copyright stays with the author.
ð Lesson 8-2: EDAïŒæ¢çŽ¢çããŒã¿åæïŒã®å®è¡
ð ãã®ã»ãã·ã§ã³ã§ããããš
Lesson 8-2: BigQueryã§EDA ãžããããïŒ
| é ç® | å 容 |
|---|---|
| ãŽãŒã« | GA4ãµã³ãã«ããŒã¿ã§æ¢çŽ¢çããŒã¿åæïŒEDAïŒãè¡ããåºæ¬çµ±èšã»æ¬ æå€ã»ååžãææ¡ãã |
| æèŠæé | çŽ30å |
| 䜿ãã¹ãã« | data-analyst, BigQuery |
| åææ¡ä»¶ | Lesson 8-1 å®äºãBigQueryæ¥ç¶æžã¿ |
| ææããŒãž | Module 8: ããŒã¿åæ ã䞊è¡åç § |
ãã®ã»ãã·ã§ã³ã®æµã:
- ããŒã¿ã»ããã®æŠèŠææ¡
- åºæ¬çµ±èšéã»æ¬ æå€ã®ç¢ºèª
- ååžã®å¯èŠå
ã»ãã·ã§ã³çµäºæã«ã¯ãBigQueryããŒã¿ã®æ¢çŽ¢ãã§ããããã«ãªã£ãŠããŸãã
ð¡ ãã³ã: AIã®å¿çãéäžã§æ¢ãŸã£ãå Žåã¯ãç¶ãã衚瀺ããŠããæ¢ãŸã£ãŠããããšå ¥åãããšåéããŸããããã¯Cursorã®ä»æ§ã§ãæ éã§ã¯ãããŸããã
ð¯ æºåãã§ãã¯
ãŸãã¯æºåãæŽã£ãŠããã確èªããŸãããã
AskQuestionã®èšå®:
{
"title": "ð¯ ã»ãã·ã§ã³éå§åã®ç¢ºèª",
"questions": [{
"id": "readiness",
"prompt": "æºåã¯ã§ããŠããŸããïŒ",
"options": [
{"id": "ready", "label": "æºåOKïŒå§ããŸããã"},
{"id": "check_prereq", "label": "åææ¡ä»¶ã確èªããã"},
{"id": "view_html", "label": "å
ã«ææããŒãžãèŠãã"},
{"id": "different_lesson", "label": "å¥ã®ã¬ãã¹ã³ã«ç§»åããã"}
]
}]
}
(ready â Step 1ãž) (check_prereq â åææ¡ä»¶ã®ç¢ºèªãå®è¡) (view_html â ææããŒãžã®ãã¹ãæ¡å ) (different_lesson â ã¢ãžã¥ãŒã«äžèЧã衚瀺)
ð Step 1: ããŒãã«ã¹ããŒãã®ç¢ºèª
AskUserQuestionïŒAskQuestionïŒã§ããã®ãŸãŸé²ãã / äŸã ãç¢ºèª / ã¹ãããããéžã¹ãŸãã
AskQuestionã®èšå®äŸ:
{
"title": "ð Step 1: ããŒãã«ã¹ããŒãã®ç¢ºèª",
"questions": [{
"id": "step_action",
"prompt": "ãã®ã¹ããããã©ãããŸããïŒ",
"options": [
{"id": "practice", "label": "ãã®ãŸãŸé²ãã"},
{"id": "review", "label": "äŸã ã確èªãã"},
{"id": "skip", "label": "ã¹ããããã"}
]
}]
}
éžæåŸã®æ¡å ïŒäŸïŒ: å ¥åå 容:
BigQueryå
¬éããŒã¿ã»ããã®GA4ããŒãã«æ§é ã確èªããŠãã ããã
ããŒãã«: bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_20210101
衚瀺ããæ
å ±:
- ããŒãã«ã®è¡æ°
- ã«ã©ã æ°
- åã«ã©ã ã®ååãããŒã¿åã説æ
äž»èŠãªã«ã©ã ïŒevent_timestamp, event_name, user_pseudo_id,
geo.country, device.browser, ecommerceïŒã«ã€ããŠè©³ãã説æããŠãã ããã
æåŸ ãããçµæ: ããŒãã«ã®ã¹ããŒãæ å ±ãæŽçãããŠè¡šç€ºãããŸãã
ð Step 2: åºæ¬çµ±èšéã®èšç®
ããŒã¿ã®åºæ¬çµ±èšéãç®åºããŸãïŒ
AskUserQuestionïŒAskQuestionïŒã§ããã®ãŸãŸé²ãã / äŸã ãç¢ºèª / ã¹ãããããéžã¹ãŸãã
AskQuestionã®èšå®äŸ:
{
"title": "ð Step 2: åºæ¬çµ±èšéã®èšç®",
"questions": [{
"id": "step_action",
"prompt": "ãã®ã¹ããããã©ãããŸããïŒ",
"options": [
{"id": "practice", "label": "ãã®ãŸãŸé²ãã"},
{"id": "review", "label": "äŸã ã確èªãã"},
{"id": "skip", "label": "ã¹ããããã"}
]
}]
}
éžæåŸã®æ¡å ïŒäŸïŒ: å ¥åå 容:
GA4ãµã³ãã«ããŒã¿ã®åºæ¬çµ±èšéãèšç®ããŠãã ããã
æé: 2021-01-01 ãã 2021-01-03
èšç®ããçµ±èš:
- ç·ã€ãã³ãæ°
- ãŠããŒã¯ãŠãŒã¶ãŒæ°
- ã»ãã·ã§ã³æ°
- æãäžè¬çãªã€ãã³ã
- æåãšæåŸã®ã€ãã³ãæå»
çµæããããããã衚瀺ããŠãã ããã
æåŸ ãããçµæ: åºæ¬çµ±èšéãããŒãã«åœ¢åŒã§è¡šç€ºãããŸãã
ð Step 3: æ¬ æå€ã®ç¢ºèª
ããŒã¿å質ããã§ãã¯ããããã«æ¬ æå€ã確èªããŸãïŒ
AskUserQuestionïŒAskQuestionïŒã§ããã®ãŸãŸé²ãã / äŸã ãç¢ºèª / ã¹ãããããéžã¹ãŸãã
AskQuestionã®èšå®äŸ:
{
"title": "ð Step 3: æ¬ æå€ã®ç¢ºèª",
"questions": [{
"id": "step_action",
"prompt": "ãã®ã¹ããããã©ãããŸããïŒ",
"options": [
{"id": "practice", "label": "ãã®ãŸãŸé²ãã"},
{"id": "review", "label": "äŸã ã確èªãã"},
{"id": "skip", "label": "ã¹ããããã"}
]
}]
}
éžæåŸã®æ¡å ïŒäŸïŒ: å ¥åå 容:
GA4ããŒã¿ã®æ¬ æå€ã確èªããŠãã ããã
察象æ¥: 2021-01-01
確èªããã«ã©ã :
- user_pseudo_id
- event_name
- geo.country
- device.browser
- ecommerce.purchase_revenue
åã«ã©ã ã®æ¬ ææ°ãšæ¬ æçãèšç®ãã
ããŒã¿å質ã«ã€ããŠèå¯ããŠãã ããã
æåŸ ãããçµæ: åã«ã©ã ã®æ¬ æçãšãããŒã¿å質ã«é¢ããèå¯ã衚瀺ãããŸãã
ð Step 4: ã«ããŽãªã«ã«ããŒã¿ã®ååžç¢ºèª
ã€ãã³ããå°åã®ååžã確èªããŸãïŒ
AskUserQuestionïŒAskQuestionïŒã§ããã®ãŸãŸé²ãã / äŸã ãç¢ºèª / ã¹ãããããéžã¹ãŸãã
AskQuestionã®èšå®äŸ:
{
"title": "ð Step 4: ã«ããŽãªã«ã«ããŒã¿ã®ååžç¢ºèª",
"questions": [{
"id": "step_action",
"prompt": "ãã®ã¹ããããã©ãããŸããïŒ",
"options": [
{"id": "practice", "label": "ãã®ãŸãŸé²ãã"},
{"id": "review", "label": "äŸã ã確èªãã"},
{"id": "skip", "label": "ã¹ããããã"}
]
}]
}
éžæåŸã®æ¡å ïŒäŸïŒ: å ¥åå 容:
GA4ããŒã¿ã®ã«ããŽãªã«ã«å€æ°ã®ååžãåæããŠãã ããã
1. ã€ãã³ãçš®å¥ã®ååžïŒTOP 15ïŒ
- ã€ãã³ãåãä»¶æ°ããŠããŒã¯ãŠãŒã¶ãŒæ°ãå²å
2. åœå¥ãŠãŒã¶ãŒååžïŒTOP 10ïŒ
- åœåãã€ãã³ãæ°ããŠããŒã¯ãŠãŒã¶ãŒæ°ãå¹³å売äž
3. ãã©ãŠã¶çš®å¥ã®äœ¿çšç¶æ³ïŒTOP 10ïŒ
- ãã©ãŠã¶åãã€ãã³ãæ°ãå²å
ååæçµæãããŒãã«åœ¢åŒã§è¡šç€ºããŠãã ããã
æåŸ ãããçµæ: åã«ããŽãªã®ååžãæŽçãããããŒãã«ã§è¡šç€ºãããŸãã
ð Step 5: æç³»ååæ
æ¥å¥ã»æéå¥ã®ãã¬ã³ããåæããŸãïŒ
AskUserQuestionïŒAskQuestionïŒã§ããã®ãŸãŸé²ãã / äŸã ãç¢ºèª / ã¹ãããããéžã¹ãŸãã
AskQuestionã®èšå®äŸ:
{
"title": "ð Step 5: æç³»ååæ",
"questions": [{
"id": "step_action",
"prompt": "ãã®ã¹ããããã©ãããŸããïŒ",
"options": [
{"id": "practice", "label": "ãã®ãŸãŸé²ãã"},
{"id": "review", "label": "äŸã ã確èªãã"},
{"id": "skip", "label": "ã¹ããããã"}
]
}]
}
éžæåŸã®æ¡å ïŒäŸïŒ: å ¥åå 容:
GA4ããŒã¿ã®æç³»ååæãè¡ã£ãŠãã ããã
æé: 2021-01-01 ãã 2021-01-10
åæå
容:
1. æ¥å¥éèš
- æ¥ä»ãç·ã€ãã³ãæ°ããŠããŒã¯ãŠãŒã¶ãŒæ°ãã»ãã·ã§ã³æ°ã売äž
2. æé垯å¥ã®åŸå
- æé垯ïŒ0-23æïŒããšã®ã€ãã³ãæ°ãšãŠãŒã¶ãŒæ°
çµæã衚瀺ãããã¬ã³ãã«ã€ããŠèå¯ããŠãã ããã
æåŸ ãããçµæ: æç³»åããŒã¿ãšåŸåã®èå¯ã衚瀺ãããŸãã
â ïž ãããããã©ãã«ãšè§£æ±ºæ¹æ³
AskUserQuestionïŒAskQuestionïŒã§ãã©ãã«å 容ãéžãã§ããããæŒãã ãã§æ¡å ããŸãã
AskQuestionã®èšå®äŸ:
{
"title": "ãã©ãã«å
容ãéžæ",
"questions": [{
"id": "trouble",
"prompt": "åœãŠã¯ãŸãå
容ã1ã€éžãã§ãã ãã",
"options": [
{"id": "trouble_1", "label": "ã¯ãšãªãã¿ã€ã ã¢ãŠããã"},
{"id": "trouble_2", "label": "Quota exceeded ãšã©ãŒ"},
{"id": "trouble_3", "label": "NULLã®æ±ãæ¹ãããããªã"},
{"id": "trouble_4", "label": "ãã¹ããããã«ã©ã ã«ã¢ã¯ã»ã¹ã§ããªã"}
]
}]
}
ãã©ãã«1: ãã¯ãšãªãã¿ã€ã ã¢ãŠãããã
åå : ããŒã¿éã倧ãããã 解決ããã³ãã:
ã¯ãšãªã®ããã©ãŒãã³ã¹ãæ¹åããŠãã ããã
以äžã®æ¹æ³ãæ€èš:
- æ¥ä»ç¯å²ãçµã
- LIMITå¥ã远å
- ãµã³ããªã³ã°ã䜿çš
ãã©ãã«2: ãQuota exceeded ãšã©ãŒã
åå : BigQueryã®ã¯ã©ãŒã¿ãè¶ é 解決ããã³ãã:
BigQueryã®ã¯ã©ãŒã¿ãšã©ãŒãçºçããŸããã
ã¯ãšãªã³ã¹ããæããæ¹æ³ãæããŠãã ããã
ãŸããçŸåšã®ã¯ã©ãŒã¿äœ¿çšç¶æ³ã確èªããæ¹æ³ãæããŠãã ããã
ãã©ãã«3: ãNULLã®æ±ãæ¹ãããããªãã
åå : NULLå€ã®éèšæ¹æ³ãäžæ 解決ããã³ãã:
BigQueryã§NULLå€ãæ±ãæ¹æ³ãæããŠãã ããã
- COUNTIF ã§NULLãã«ãŠã³ã
- COALESCE ã§NULLã眮æ
- NULLIF ã§NULLã«å€æ
ãã©ãã«4: ããã¹ããããã«ã©ã ã«ã¢ã¯ã»ã¹ã§ããªãã
åå : STRUCTåãARRAYåã®æ§æãããããªã 解決ããã³ãã:
BigQueryã®ãã¹ããããã«ã©ã ïŒSTRUCTåïŒãžã®
ã¢ã¯ã»ã¹æ¹æ³ãæããŠãã ããã
äŸ: geo.country, device.browser, ecommerce.purchase_revenue
â ãã§ãã¯ãã€ã³ã
- ããŒãã«ã¹ããŒãã確èªã§ãã
- åºæ¬çµ±èšéãç®åºã§ãã
- æ¬ æå€ã確èªã§ãã
- ã«ããŽãªã«ã«ããŒã¿ã®ååžã確èªã§ãã
- æç³»åããŒã¿ãåæã§ãã
- eã³ããŒã¹ããŒã¿ã®ç¹åŸŽãçè§£ã§ãã
ð EDAã§ãã䜿ããã¿ãŒã³
ååžã®ç¢ºèª
SELECT column_name, COUNT(*) as count
FROM table
GROUP BY column_name
ORDER BY count DESC
æç³»åãã¬ã³ã
SELECT DATE(timestamp) as date, COUNT(*) as count
FROM table
GROUP BY date
ORDER BY date
çžé¢åæã®æºå
SELECT column_a, column_b, COUNT(*) as count
FROM table
GROUP BY column_a, column_b
ð ææç©ãã¬ãã¥ãŒ
ãã®ã¬ãã¹ã³ã®ææç©ã¯ã¿ãŒããã«åºåã§ãã
æåŸ ãããåºåäŸ
âââââââââââââââââââââââââââââââââââââââ
â ã³ãã³ãå®è¡çµæ â
â ã¹ããŒã¿ã¹: â
æå â
â åŠçä»¶æ°: Nä»¶ â
âââââââââââââââââââââââââââââââââââââââ
ð¡ åºåããã¡ã€ã«ã«ä¿åããã«ã¯ãã³ãã³ãæ«å°Ÿã«
> output/result.txtã远å
â å®äºãã§ãã¯
以äžãCursorã®ãã£ããã«è²Œãä»ããŠãå®äºç¶æ³ã確èªããŠãã ãã:
# å®äºç¢ºèª: output/ ãã©ã«ãã«æåŸ
ãããåºåãã¡ã€ã«ãçæãããŠããã確èªããŠãã ããã
æåŸ ãããçµæ: å®äº/æªå®ã®å€å®ãšäžè¶³é ç®ã衚瀺ãããŸãã
â¡ïž 次ã®ã¹ããã
ããã§ãã®ã»ã¯ã·ã§ã³ã¯å®äºã§ããæ¬¡ã®ã»ã¯ã·ã§ã³ãå§ããããæ°ãããŠã£ã³ããŠãéããŠãæ°ããã»ã¯ã·ã§ã³ãéå§ããŠãã ããã
AskUserQuestionïŒAskQuestionïŒã§éžã¹ãŸãã
AskQuestionã®èšå®äŸ:
{
"title": "次ã®ã¹ããããéžæ",
"questions": [{
"id": "next_step",
"prompt": "次ã«é²ãæäœãéžãã§ãã ãã",
"options": [
{"id": "next_auto", "label": "次ã®ã»ã¯ã·ã§ã³ãéå§ïŒ/next_lessonïŒ"},
{"id": "next_window", "label": "æ°ãããŠã£ã³ããŠã§éå§ïŒ/start-8-3ïŒ"},
{"id": "finish", "label": "ããã§çµäºãã"}
]
}]
}
éžæåŸã®æ¡å ïŒäŸïŒ:
- next_auto â /next_lesson
- next_window â æ°ãããŠã£ã³ããŠã§ /start-8-3
- finish â çµäº
