TIL
[멋쟁이사자처럼 부트캠프 그로스 마케팅] 데이터수집 및 전처리 : API
•ɞ•
2025. 2. 17. 23:35
학습목표
- API의 개념과 활용
- API 데이터 수집 심화
1. API (Application Programming Interface)
: 애플리케이션 간의 데이터를 주고받고 기능을 호출할 수 있도록 하는 인터페이스
API Server 생성
CREATE TABLE IF NOT EXISTS growth_marketing (
id INT AUTO_INCREMENT PRIMARY KEY, --자동 증가하는 기본 키
date DATE NOT NULL, --데이터 기록 날짜
channel VARCHAR(50) NOT NULL, --마케팅 채널 (예: Google Ads, Facebook Ads 등)
campaign VARCHAR(100) NOT NULL, --실행된 캠페인 이름
impressions INT NOT NULL, --광고 노출 수
clicks INT NOT NULL, --클릭 수
conversions INT NOT NULL, --전환 수
conversion_rate FLOAT NOT NULL, --전환율 (Conversions / Clicks) * 100
revenue FLOAT NOT NULL, --수익
cost FLOAT NOT NULL, --광고 비용
roi FLOAT GENERATED ALWAYS AS (revenue - cost) STORED --revenue - cost로 자동 계산
);
-> 각 채널에 맞는 데이터 INSERT 하기
-> 데이터를 JSON(JavaScript Object Notation)형식으로 반환하는 API를 제공하는 서버 역할의 Flask 코드 생성
from flask import Flask, jsonify, request
-- jsonify : Python 데이터를 JSON 형식으로 변환해 API 응답을 반환
import mysql.connector
-- Python에서 MySQL 또는 MariaDB에 연결하기 위한 라이브러리
app = Flask(__name__) -- Flask 객체
# MariaDB 연결 설정
db_config = {
"host": "localhost",
"user": "user",
"password": "1234",
"database": "backend"
}
# 데이터베이스 연결 함수
def get_db_connection():
return mysql.connector.connect(**db_config) --딕셔너리의 키-값을 언패킹해서 전달
# API: 모든 마케팅 데이터 조회
@app.route('/growth-marketing', methods=['GET']) --/growth-marketing 경로로 GET 요청이 오면 실행됨
def get_growth_marketing_data():
conn = get_db_connection() --데이터베이스 연결 객체
cursor = conn.cursor(dictionary=True) --SQL 실행 객체, 데이터 조회 결과를 딕셔너리 형태로 반환 (jsonify 쉽도록)
cursor.execute("SELECT * FROM growth_marketing")
data = cursor.fetchall() -- 모든 결과를 리스트로 반환
cursor.close()
conn.close()
return jsonify(data)
# API: 특정 마케팅 채널 데이터 조회
@app.route('/growth-marketing/<channel>', methods=['GET']) --<channel>는 변수
def get_marketing_by_channel(channel):
conn = get_db_connection()
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT * FROM growth_marketing WHERE channel = %s", (channel,)) --%s는 보안을 위함
data = cursor.fetchall()
cursor.close()
conn.close()
if not data:
return jsonify({"error": "해당 마케팅 채널의 데이터가 없습니다."}), 404
return jsonify(data)
if __name__ == '__main__': --스크립트가 직접 실행될 때만 작동 (다른 파일에서 import 실행 x)
app.run(host='0.0.0.0', port=5001, debug=True)
-> http://localhost:5001/growth-marketing, http://localhost:5001/growth-marketing/Facebook 등으로 호출 가능


html을 활용해 웹 형식으로 출력하도록 수정한 코드
from flask import Flask, render_template, jsonify --request 대신 render_template으로 HTML 파일을 렌더링
import mysql.connector
app = Flask(__name__)
# MariaDB 연결 설정
db_config = {
"host": "localhost",
"user": "user",
"password": "1234",
"database": "backend"
}
# 데이터베이스 연결 함수
def get_db_connection():
return mysql.connector.connect(**db_config)
# API: 모든 마케팅 데이터 조회
@app.route('/growth-marketing', methods=['GET'])
def get_growth_marketing_data():
conn = get_db_connection()
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT * FROM growth_marketing")
data = cursor.fetchall()
cursor.close()
conn.close()
return jsonify(data)
# 웹 페이지 렌더링
@app.route('/')
def index():
return render_template('index.html') --/ 경로로 접속하면 index.html 파일을 클라이언트에게 반환
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5001, debug=True)
-> templates, static 디렉토리 생성하여 각각 index.html, style.css 업로드
-> 출력 결과

2. API 데이터 수집 항목
- Google Analytics
1) 사용자 행동 분석
Sessions (세션 수)
|
사용자가 사이트를 방문한 횟수. 세션은 30분 동안 활동이 없으면 종료됨.
|
Users (사용자 수)
|
특정 기간 동안 웹사이트를 방문한 고유 사용자 수.
|
New Users (신규 사용자 수)
|
처음 방문한 사용자 수.
|
Pageviews (페이지뷰 수)
|
웹사이트에서 조회된 페이지의 총 수.
|
Pages per Session (세션당 페이지뷰)
|
방문자가 한 세션 동안 조회한 평균 페이지 수.
|
=> 세션 수 및 페이지뷰 변화, 신규 사용자 비율, 세션당 평균 페이지뷰 등 분석
2) 트래픽 소스 분석
Traffic Source (트래픽 소스)
|
사용자가 웹사이트에 들어온 경로(Google, Facebook, Naver, Direct 등).
|
Referral (추천 트래픽)
|
다른 웹사이트에서 링크를 통해 들어온 방문자 수.
|
Organic Search (유기적 검색 트래픽)
|
Google, Bing 등 검색엔진에서 검색을 통해 유입된 방문자 수.
|
Direct (직접 트래픽)
|
URL을 직접 입력하거나 북마크를 통해 방문한 사용자 수.
|
Social (소셜 트래픽)
|
Facebook, Twitter, Instagram 등 소셜 미디어에서 유입된 사용자 수.
|
Paid Search (유료 검색 트래픽)
|
Google Ads 등 광고를 통해 유입된 방문자 수.
|
3) 전환(Conversion) 분석
Conversion Rate (전환율)
|
특정 목표를 달성한 세션의 비율(전환 수 / 방문 수 × 100).
|
Goal Completions (목표 달성 수)
|
사용자가 설정된 목표(예: 결제 완료, 회원가입)를 완료한 횟수.
|
E-commerce Transactions (전자상거래 트랜잭션 수)
|
구매가 완료된 주문 수.
|
Revenue (매출)
|
전자상거래 사이트에서 발생한 총 매출.
|
Cart Abandonment Rate (장바구니 이탈율)
|
장바구니에 상품을 담았지만 결제를 완료하지 않은 비율.
|
4) 사용자 행동 흐름 분석
Landing Page (랜딩 페이지)
|
사용자가 처음 방문한 페이지.
|
Exit Page (종료 페이지)
|
사용자가 사이트를 떠난 마지막 페이지.
|
Bounce Rate (이탈률)
|
한 페이지만 보고 사이트를 떠난 방문자의 비율.
|
Average Session Duration (평균 세션 지속 시간)
|
방문자가 웹사이트에서 머문 평균 시간.
|
5) 장치 및 지역 분석
Device Category (기기 유형)
|
데스크톱, 모바일, 태블릿 등 방문자가 사용한 기기 유형.
|
Operating System (운영 체제)
|
방문자가 사용한 OS(Android, iOS, Windows 등).
|
Geolocation (위치 정보)
|
방문자의 국가 및 지역.
|
Language (언어 설정)
|
방문자의 브라우저 언어.
|
- Meta (Facebook)
1) 광고 성과 분석
Impressions (노출 수)
|
광고가 사용자에게 표시된 총 횟수.
|
Reach (도달 수)
|
광고를 본 고유 사용자 수.
|
CTR (클릭률, Click-Through Rate)
|
광고를 클릭한 비율(클릭 수 / 노출 수 × 100).
|
CPC (클릭당 비용, Cost Per Click)
|
한 번의 클릭을 얻기 위해 지출한 평균 비용.
|
CPM (1000회 노출당 비용, Cost Per Mille)
|
광고가 1000번 노출될 때의 평균 비용.
|
Ad Frequency (광고 빈도)
|
사용자가 같은 광고를 평균적으로 본 횟수.
|
Engagement (참여도)
|
광고 클릭, 좋아요, 댓글, 공유 등을 포함한 총 사용자 활동 수.
|
2) 전환 분석
Rate (전환율)
|
광고를 본 후 특정 목표를 완료한 비율(전환 수 / 클릭 수 × 100).
|
Leads (리드 수)
|
광고를 통해 수집된 연락처(예: 이메일 가입, 문의 양식 제출).
|
Purchases (구매 수)
|
광고를 통해 유입된 사용자가 실제로 상품을 구매한 횟수.
|
ROAS (광고비 대비 매출, Return on Ad Spend)
|
광고 비용 대비 발생한 총 매출(매출 / 광고비).
|
Add to Cart (장바구니 추가 수)
|
사용자가 제품을 장바구니에 추가한 횟수.
|
3) 타겟팅 및 오디언스 분석
Demographics (연령/성별 분석)
|
광고를 본 사용자의 연령대 및 성별.
|
Location (지역 분석)
|
광고가 노출된 사용자의 국가 및 도시.
|
Device Type (기기 유형 분석)
|
광고를 본 사용자의 기기 유형(모바일, 데스크톱, 태블릿 등).
|
Interests (관심사 분석)
|
광고 대상 그룹이 관심을 보이는 주요 주제(예: 스포츠, 여행, 금융 등).
|
4) 페이지 및 콘텐츠 성과 분석
Page Likes (페이지 좋아요 수)
|
특정 기간 동안 페이지를 좋아요한 사용자 수.
|
Post Engagement (게시물 참여도)
|
게시물에 대한 좋아요, 댓글, 공유 등의 총 수.
|
Video Views (동영상 조회 수)
|
3초 이상 재생된 동영상의 조회 수.
|
Avg Watch Time (평균 시청 시간)
|
동영상 콘텐츠의 평균 시청 시간.
|
Post Reach (게시물 도달 수)
|
게시물을 본 고유 사용자 수.
|
5) 메시징 및 커뮤니케이션 분석
Messages Sent (보낸 메시지 수)
|
페이지에서 고객에게 보낸 메시지 수.
|
Messages Received (받은 메시지 수)
|
사용자가 페이지에 보낸 메시지 수.
|
Response Time (응답 시간)
|
메시지에 대한 평균 응답 시간.
|
Comment Sentiment (댓글 감성 분석)
|
댓글에서 긍정적, 중립적, 부정적 감성의 비율.
|
마케팅 보고서 잘 쓰고 싶은데 어렵다..
연습 많이 해봐야 할 듯 💪