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 (댓글 감성 분석)
댓글에서 긍정적, 중립적, 부정적 감성의 비율.

 
 


 
 

마케팅 보고서 잘 쓰고 싶은데 어렵다..
연습 많이 해봐야 할 듯 💪