Skip to Content
시작하기데이터 구조 이해

데이터 구조 이해

📦 데이터셋 다운로드 (BigQuery 세팅 가이드)

이 Cookbook에서 사용하는 데이터셋의 구조와 관계를 이해합니다.

데이터셋 개요

이 Cookbook은 가상의 이커머스 회사 데이터를 기반으로 합니다. Google BigQuery의 thelook_ecommerce 공개 데이터셋을 확장하여 CS 티켓, 마케팅 캠페인, 외부 시장 데이터 등을 추가했습니다.

데이터 모델 (ERD)

┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ src_users │ │ src_orders │ │ src_order_items │ ├─────────────────┤ ├─────────────────┤ ├─────────────────┤ │ user_id (PK) │──────▶│ order_id (PK) │◀──────│ order_id (FK) │ │ first_name │ │ user_id (FK) │ │ product_id (FK) │ │ last_name │ │ created_at │ │ sale_price │ │ email │ │ status │ │ returned_at │ │ gender │ │ num_of_item │ │ shipped_at │ │ age │ └─────────────────┘ │ delivered_at │ │ country │ └────────┬────────┘ │ state │ │ │ created_at │ │ └─────────────────┘ ▼ ┌─────────────────┐ ┌─────────────────┐ │ src_products │ │ src_events │ ├─────────────────┤ ├─────────────────┤ │ product_id (PK) │ │ id (PK) │ │ category │ │ user_id (FK) │ │ brand │ │ session_id │ │ department │ │ sequence_number │ │ name │ │ created_at │ │ retail_price │ │ ip_address │ │ cost │ └─────────────────┘ └─────────────────┘

테이블 상세 설명

1. 핵심 테이블 (이커머스)

src_users - 고객 정보

컬럼타입설명
user_idINT64고객 고유 식별자 (PK)
first_nameSTRING이름
last_nameSTRING
emailSTRING이메일 주소
genderSTRING성별 (M/F)
ageINT64나이
countrySTRING국가
stateSTRING주/지역
created_atTIMESTAMP가입일시
ℹ️
데이터 규모

약 100,000명의 고객 데이터가 포함되어 있습니다.

src_orders - 주문 정보

컬럼타입설명
order_idINT64주문 고유 식별자 (PK)
user_idINT64고객 ID (FK)
created_atTIMESTAMP주문일시
statusSTRING주문 상태 (Shipped, Complete, Cancelled 등)
num_of_itemINT64주문 상품 수

주문 상태 값:

  • Shipped: 배송 중
  • Complete: 배송 완료
  • Cancelled: 취소됨
  • Returned: 반품됨
  • Processing: 처리 중

src_order_items - 주문 상품 상세

컬럼타입설명
order_idINT64주문 ID (FK)
product_idINT64상품 ID (FK)
sale_priceFLOAT64판매가격
returned_atTIMESTAMP반품일시 (NULL 가능)
shipped_atTIMESTAMP배송시작일시
delivered_atTIMESTAMP배송완료일시
💡
복합키

order_idproduct_id의 조합이 이 테이블의 복합 기본키입니다.

src_products - 상품 정보

컬럼타입설명
product_idINT64상품 고유 식별자 (PK)
categorySTRING카테고리
brandSTRING브랜드
departmentSTRING부서 (Men/Women)
nameSTRING상품명
retail_priceFLOAT64정가
costFLOAT64원가
skuSTRINGSKU 코드
distribution_center_idINT64물류센터 ID

주요 카테고리:

  • Accessories, Active, Blazers & Jackets, Clothing Sets
  • Dresses, Fashion Hoodies & Sweatshirts, Jeans
  • Leggings, Maternity, Outerwear & Coats, Pants
  • Pants & Capris, Plus, Shorts, Skirts, Sleep & Lounge
  • Socks, Socks & Hosiery, Suits, Suits & Sport Coats
  • Sweaters, Swim, Tops & Tees, Underwear

src_events - 웹 이벤트 로그

컬럼타입설명
idINT64이벤트 ID (PK)
user_idINT64고객 ID (FK, NULL 가능)
session_idSTRING세션 ID
sequence_numberINT64세션 내 이벤트 순서
created_atTIMESTAMP이벤트 발생 시간
ip_addressSTRINGIP 주소

2. 증강 데이터 (세션 분석용)

events_augmented - 세션 단위 집계

컬럼타입설명
session_idSTRING세션 ID (PK)
user_idINT64고객 ID
session_start_atTIMESTAMP세션 시작 시간
session_dateDATE세션 날짜
events_in_sessionINT64세션 내 이벤트 수
channel_keySTRING유입 채널
device_keySTRING디바이스 유형
landing_pageSTRING랜딩 페이지 URL
pageviews_estINT64추정 페이지뷰 수
add_to_cart_estINT64추정 장바구니 추가 수

채널 유형:

  • organic: 자연 검색
  • paid_search: 유료 검색 광고
  • paid_social: 유료 소셜 광고
  • display: 디스플레이 광고
  • email: 이메일 마케팅
  • referral: 추천/제휴
  • direct: 직접 방문

3. 고객 서비스 데이터

cs_tickets_dummy - CS 티켓

컬럼타입설명
ticket_idSTRING티켓 ID (PK)
user_idINT64고객 ID (FK)
opened_atTIMESTAMP티켓 생성 시간
first_response_atTIMESTAMP첫 응답 시간
resolved_atTIMESTAMP해결 시간
statusSTRING상태 (open, pending, solved, escalated)
prioritySTRING우선순위 (low, normal, high, urgent)
channelSTRING접수 채널 (email, chat, phone)
issue_typeSTRING이슈 유형
agent_idSTRING담당 상담원 ID
country_nameSTRING고객 국가
categorySTRING관련 상품 카테고리
satisfaction_scoreINT64만족도 점수 (1-5)
commentSTRING고객 코멘트

이슈 유형:

  • size: 사이즈 문의
  • quality: 품질 문제
  • shipping: 배송 관련
  • payment: 결제 문제
  • refund: 환불 요청

survey_cs_dummy - 고객 만족도 설문

컬럼타입설명
survey_idSTRING설문 ID (PK)
user_idINT64고객 ID
sent_atTIMESTAMP설문 발송 시간
completed_atTIMESTAMP설문 완료 시간
nps_scoreINT64NPS 점수 (0-10)
csat_scoreINT64CSAT 점수 (1-5)
free_textSTRING자유 응답
related_ticket_idSTRING관련 티켓 ID

4. 마케팅 데이터

mkt_campaigns_dummy - 캠페인 메타데이터

컬럼타입설명
campaign_idSTRING캠페인 ID (PK)
campaign_nameSTRING캠페인명
channel_keySTRING채널
start_dateDATE시작일
end_dateDATE종료일
target_categorySTRING타겟 카테고리
target_countrySTRING타겟 국가
objectiveSTRING목표 (awareness, traffic, conversion 등)
kpiSTRINGKPI (CTR, CVR, ROAS, LTV)
budgetFLOAT64예산

mkt_channel_spend_dummy - 채널별 광고 집행

컬럼타입설명
dateDATE날짜
channel_keySTRING채널
campaign_idSTRING캠페인 ID
impressionsINT64노출 수
clicksINT64클릭 수
spendFLOAT64지출 금액
landing_pageSTRING랜딩 페이지
country_nameSTRING국가
device_keySTRING디바이스

5. 외부 데이터

컬럼타입설명
weekDATE주 시작일
keywordSTRING키워드
region_codeSTRING지역 코드
scoreINT64트렌드 점수 (0-100)

ext_competitive_signal - 경쟁 신호

컬럼타입설명
periodDATE기간 (월)
topicSTRING주제
region_codeSTRING지역 코드
signalFLOAT64신호 강도
sourceSTRING소스 (patent, news, social)

데이터 관계 활용

기본 조인 패턴

-- 주문과 고객 정보 조인 SELECT o.order_id, o.created_at, u.country, u.age FROM src_orders o JOIN src_users u ON o.user_id = u.user_id -- 주문 상세와 상품 정보 조인 SELECT oi.order_id, oi.sale_price, p.category, p.brand FROM src_order_items oi JOIN src_products p ON oi.product_id = p.product_id -- 전체 조인 (주문 → 상품 → 고객) SELECT o.order_id, o.created_at, u.country, p.category, oi.sale_price FROM src_orders o JOIN src_users u ON o.user_id = u.user_id JOIN src_order_items oi ON o.order_id = oi.order_id JOIN src_products p ON oi.product_id = p.product_id

Pandas 동등 코드

# 데이터 로드 orders = pd.read_csv('src_orders.csv') users = pd.read_csv('src_users.csv') order_items = pd.read_csv('src_order_items.csv') products = pd.read_csv('src_products.csv') # 주문과 고객 정보 조인 orders_with_users = orders.merge(users, on='user_id') # 주문 상세와 상품 정보 조인 items_with_products = order_items.merge(products, on='product_id') # 전체 조인 full_data = (orders .merge(users, on='user_id') .merge(order_items, on='order_id') .merge(products, on='product_id'))

다음 단계

데이터 구조를 이해했으니, 이제 본격적인 분석을 시작할 준비가 되었습니다:

Last updated on

🤖AI 모의면접실전처럼 연습하기