iloc은 컴퓨터가 읽기 쉬운 조건으로 행이나 칼럼의 순서를 나타내는 정수로 특정값을 추출한다.

loc은  사람이 읽기 쉬운 조건으로 칼럼명을 적거나 특정 조건으로 데이터에 접근할 수 있다.

 

❗️iloc 사용법 

df.iloc["행 인덱스","열 인덱스"]

 

❗️loc 사용법 

df.loc["행 인덱싱 값","열 인덱싱 값"]

 

 

〰️테스트 데이터

 

 

〰️iloc 데이터

본문이라는 컬럼(4:)의 모든 행(:)을 가져와줘.

〰️loc 데이터

본문이라는 컬럼("본문")의 모든 행(:)을 가져와줘.

 

'Study > data analysis' 카테고리의 다른 글

버블 정렬 프로그램(백준 - 1377번)  (1) 2024.01.21

 

1. 분석 데이터 준비

# ── 1. 데이터 불러오기 ─────────────────────────────────────────

ecom_data = {
    '성별': [
        '여성', '남성', '여성', '여성', '남성',
        '남성', '여성', '여성', '남성', '여성',
        '여성', '남성', '여성', '남성', '여성',
        '여성', '남성', '여성', '남성', '여성',
        '남성', '여성', '남성', '여성', '남성',
        '여성', '여성', '남성', '여성', '남성'
    ],
    '연령대': [
        '30대', '20대', '40대', '30대', '20대',
        '50대 이상', '30대', '20대', '40대', '30대',
        '20대', '30대', '50대 이상', '40대', '30대',
        '30대', '20대', '40대', '50대 이상', '30대',
        '20대', '30대', '40대', '30대', '20대',
        '40대', '30대', '20대', '30대', '50대 이상'
    ],
    '회원등급': [
        'VIP', '일반', '실버', 'VIP', '일반',
        '골드', 'VIP', '일반', '실버', 'VIP',
        '일반', '골드', '일반', '실버', '골드',
        'VIP', '일반', '실버', '일반', 'VIP',
        '일반', '골드', '실버', 'VIP', '일반',
        '실버', 'VIP', '일반', '골드', '일반'
    ],
    '선호카테고리': [
        '뷰티', '전자제품', '패션', '뷰티', '식품',
        '전자제품', '뷰티', '식품', '패션', '뷰티',
        '식품', '스포츠', '식품', '전자제품', '스포츠',
        '뷰티', '식품', '패션', '식품', '뷰티',
        '전자제품', '스포츠', '전자제품', '뷰티', '식품',
        '패션', '뷰티', '식품', '스포츠', '전자제품'
    ],
    '월평균구매횟수': [
        9, 1, 4, 11, 2,
        7, 12, 1, 5, 10,
        2, 6, 1, 4, 7,
        13, 2, 3, 1, 10,
        2, 8, 5, 11, 1,
        4, 9, 1, 6, 2
    ],
    '월평균구매금액': [
        420000, 28000, 95000, 480000, 35000,
        180000, 510000, 22000, 110000, 390000,
        31000, 160000, 19000, 87000, 175000,
        540000, 41000, 78000, 24000, 410000,
        33000, 195000, 105000, 460000, 27000,
        92000, 430000, 18000, 155000, 38000
    ],
    '최근구매일_일전': [
        3, 72, 28, 5, 60,
        15, 2, 85, 22, 7,
        68, 18, 79, 31, 14,
        4, 55, 35, 82, 6,
        63, 12, 25, 4, 71,
        29, 3, 88, 17, 65
    ],
    '장바구니담기': [
        1, 0, 1, 1, 0,
        1, 1, 0, 1, 1,
        0, 1, 0, 0, 1,
        1, 0, 0, 0, 1,
        0, 1, 1, 1, 0,
        1, 1, 0, 1, 0
    ],
    '리뷰작성': [
        1, 0, 0, 1, 0,
        1, 1, 0, 0, 1,
        0, 0, 0, 0, 1,
        1, 0, 0, 0, 1,
        0, 1, 0, 1, 0,
        0, 1, 0, 1, 0
    ],
    '쿠폰사용': [
        1, 1, 1, 0, 1,
        0, 0, 1, 1, 1,
        1, 0, 1, 1, 0,
        0, 1, 1, 1, 1,
        1, 0, 1, 0, 1,
        1, 1, 1, 0, 1
    ],
    '앱설치': [
        1, 0, 1, 1, 0,
        1, 1, 0, 1, 1,
        0, 1, 0, 0, 1,
        1, 0, 1, 0, 1,
        0, 1, 1, 1, 0,
        1, 1, 0, 1, 0
    ],
    '재구매': [
        1, 0, 1, 1, 0,
        1, 1, 0, 0, 1,
        0, 1, 0, 0, 1,
        1, 0, 0, 0, 1,
        0, 1, 1, 1, 0,
        0, 1, 0, 1, 0
    ]
}


#데이터 출력해보기
df_ecom = pd.DataFrame(ecom_data)
print("데이터 불러오기 완료")
print(f"크기: {df_ecom.shape[0]}행 x {df_ecom.shape[1]}열")
print()
print(df_ecom.head(5))

 

강사님이 주신 더미 데이터를 활용해서 클러스터링 분석을 진행하였습니다.

 

2. 데이터 탐색

# ── 2. 데이터 탐색 ─────────────────────────────────────────────

print()
print("수치형 컬럼 기초 통계:")
#✏️ 수치형 데이터의 요약 통계량 확인
print(df_ecom.describe())

print()
print("회원등급 분포:")
#✏️ 범주형 데이터의 빈도 확인
print(df_ecom['회원등급'].value_counts())

 

df_ecom.describe()를 사용하여 수치형 데이터의 통계를 전체적으로 살펴봅니다.

이때 여기에서 살펴 볼 수 있는 것은 월평균 구매 금액에서 max와 75%에서 금액 차이가 난다는 것을 볼 수 있고,

쿠폰 사용 평균이 0.7로 쿠폰 사용이 많다는 걸 의미합니다.

(장바구니담기, 리뷰작성, 쿠폰사용 등과 같이 0과 1로 된 값의 경우에는 mean 값을 살펴보길 권장합니다.)

 

3. 전처리 

# ── 3. 전처리 ──────────────────────────────────────────────────

df_ecom_proc = df_ecom.copy()

#✏️ 범주형 컬럼 인코딩 (문자열 -> 숫자)
cat_cols = ['성별', '연령대', '회원등급', '선호카테고리']
le = LabelEncoder()
for col in cat_cols:
    #✏️ 각 컬럼별로 LabelEncoding 적용
    df_ecom_proc[col] = le.fit_transform(df_ecom_proc[col])

# 분석에 사용할 수치형 특성들 정의
feature_cols = ['성별', '연령대', '회원등급', '선호카테고리', '월평균구매횟수',
                '월평균구매금액', '최근구매일_일전', '장바구니담기', '리뷰작성', '쿠폰사용', '앱설치', '재구매']

#✏️ 데이터 스케일링 (거리 기반 모델인 K-Means 필수 과정)
X = df_ecom_proc[feature_cols]
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

print()
print("전처리(인코딩 + 스케일링) 완료")

성별, 연령대, 회원등급, 선호카테고리의 경우에는 범주형 데이터입니다. 

클러스터링을 진행하기 위해서는 범주형 데이터를 수치형 데이터를 변환해야 합니다. 

LabelEncoder를 적용하여 수치형 데이터들로 바꿔줍니다.

 

4. 엘보우 방법 적용

# ── 4. 엘보우 방법 ─────────────────────────────────────────────

#✏️ 클러스터 내 오차제곱합(Inertia) 저장 리스트
inertia_list = []

for k in range(1, 11):
    #✏️ KMeans 모델 생성 및 학습
    km = KMeans(n_clusters=k, random_state=42, n_init=10)
    km.fit(X_scaled)
    inertia_list.append(km.inertia_)


plt.figure(figsize=(8, 5))
plt.plot(range(1, 11), inertia_list, 'bo-', linewidth=2, markersize=8)
plt.title('엘보우 방법 - 이커머스 고객 데이터', fontsize=13, fontweight='bold')
plt.xlabel('K (클러스터 수)')
plt.ylabel('Inertia')
plt.xticks(range(1, 11))
plt.grid(True, alpha=0.3)
plt.axvline(x=3, color='red', linestyle='--', linewidth=1.5, label='권장 K=3')
plt.tight_layout()
plt.show()

완만한 지점이 최적의 군집 개수 지점입니다.

너무 많이 분류하게 되면 세분화가 과하게 진행되어, 군집을 나누는 의미가 없어집니다.

즉 클러스터링을 하게 되는 의미가 없어지게 되는데, 이때 inertia 시각화를 하여 완만한 지점을 찾게 되면 그 지점이 최적의 군집 개수 입니다.

 

5. 모델 학습

# ── 5. 모델 학습 ───────────────────────────────────────────────

#✏️ 엘보우 그래프를 보고 적절한 K 선택 (통상 3으로 설정)
K = 3
kmeans = KMeans(n_clusters=K, random_state=42, n_init=10)
kmeans.fit(X_scaled)

#✏️ 결과 레이블을 원본 데이터프레임에 추가
df_ecom['클러스터'] = kmeans.labels_

print()
print(f"K={K} 군집 분석 완료")
print("클러스터별 인원 수:")
print(df_ecom['클러스터'].value_counts().sort_index())

 

6. 시각화

# ── 6. 시각화 ──────────────────────────────────────────────────
#✏️ 고차원 데이터를 2차원으로 축소 (시각화용)
pca = PCA(n_components=2, random_state=42)
X_2d = pca.fit_transform(X_scaled)

colors = ['#E05C5C', '#4A90D9', '#52A97A'] # 클러스터 수 K=3에 맞춰 색상 준비

plt.figure(figsize=(9, 6))
#✏️ 각 클러스터별로 산점도 그리기
for i in range(K):
    mask = df_ecom['클러스터'] == i
    plt.scatter(X_2d[mask, 0], X_2d[mask, 1],
                c=colors[i], label=f'클러스터 {i}',
                alpha=0.8, s=100, edgecolors='white')

plt.title('이커머스 고객 군집 분석 결과 (PCA)', fontsize=14, fontweight='bold')
plt.xlabel('주성분 1(가장 많은 정보를 담은 축)')
plt.ylabel('주성분 2(두 번째로 많은 정보를 담은 축)')
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

같은 색의 점들이 뭉쳐져서 멀리 떨어져 있을 수록 잘 군집화된 것입니다.

 

 

7. 각 클러스터별 페르소나 설정 

# 분석할 클러스터 개수 설정 (앞서 학습한 K값과 동일하게)
K = 3

print(" 각 클러스터별 대표 페르소나 분석 ")
print("=" * 50)

for cluster_id in range(K):
    # 해당 클러스터에 속하는 데이터만 필터링
    group = df_ecom[df_ecom['클러스터'] == cluster_id]

    print(f"[클러스터 {cluster_id}] (인원: {len(group)}명)")

    # 범주형 데이터의 최빈값(mode) 추출
    # mode()는 Series를 반환하므로 [0]을 통해 가장 빈도가 높은 첫 번째 값을 가져옴
    print(f"1. 주요 성별      : {group['성별'].mode()[0]}")
    print(f"2. 주요 연령대    : {group['연령대'].mode()[0]}")
    print(f"3. 주요 등급      : {group['회원등급'].mode()[0]}")
    print(f"4. 선호 카테고리  : {group['선호카테고리'].mode()[0]}")

    # 수치형 데이터는 평균(mean)을 사용하는 것이 더 직관적일 수 있습니다
    print(f"5. 평균 구매 금액 : {int(group['월평균구매금액'].mean()):,}원")
    print(f"6. 평균 구매 횟수 : {group['월평균구매횟수'].mean():.1f}회")

    print("-" * 50)

 

 각 클러스터별로 성별, 연령대, 회원등급, 선호카테고리에서 최빈값을 구하여 분석을 진행합니다.

 

# 분석에 사용할 클러스터 개수 (앞서 설정한 K값)
K = 3

print(" 각 클러스터별 상세 특징 분석 (Profiling) ")
print("=" * 60)

for cluster_id in range(K):
    # 1. 원본 데이터와 전처리 데이터를 클러스터별로 필터링
    # (원본 df_ecom에 '클러스터' 레이블이 포함되어 있어야 합니다)
    group = df_ecom[df_ecom['클러스터'] == cluster_id]

    print(f"▶ [클러스터 {cluster_id}] 분석 결과 (인원: {len(group)}명)")

    # 2. 범주형 데이터 최빈값 (가장 대표적인 특징)
    mode_gender = group['성별'].mode()[0]
    mode_age = group['연령대'].mode()[0]
    mode_grade = group['회원등급'].mode()[0]
    mode_cat = group['선호카테고리'].mode()[0]

    # 3. 수치형 데이터 평균 (주요 지표)
    avg_spend = group['월평균구매금액'].mean()
    avg_count = group['월평균구매횟수'].mean()
    avg_recency = group['최근구매일_일전'].mean()

    # 4. 행동 지표 비율 (평균값이 곧 수행 비율)
    app_rate = group['앱설치'].mean() * 100
    coupon_rate = group['쿠폰사용'].mean() * 100
    revisit_rate = group['재구매'].mean() * 100

    # 출력 부분
    print(f"  - 대표 페르소나  : {mode_age} {mode_gender} ({mode_grade} 등급)")
    print(f"  - 선호 카테고리  : {mode_cat}")
    print(f"  - 평균 구매력    : 월 {int(avg_spend):,}원 / {avg_count:.1f}회")
    print(f"  - 평균 방문 주기 : 최근 {avg_recency:.1f}일 전 방문")
    print(f"  - 주요 행동 패턴 : 앱설치({app_rate:.0f}%), 쿠폰사용({coupon_rate:.0f}%), 재구매({revisit_rate:.0f}%)")
    print("-" * 60)

상세 특징을 보니 VIP 여성의 경우 뷰티를 선호하며, 다른 페르소나에 비해 많은 돈을 쓰고 있습니다. 재구매도 100퍼센트이며 7일 전에 방문한 점을 보아 놓쳐서 안되는 고객임을 알 수 있습니다.

40대 남성의 경우 실버 등급으로 11만 7천원을 쓰는 고객으로 VIP 등급으로 상승시킬 마케팅 전략을 수립해야함을 알 수 있습니다.

이제 나머지 일반 등급의 경우에는 쿠폰사용이 100퍼센트이고 재구매가 0퍼센트로 쿠폰 사용만 하는 체리피커로 볼 수 있습니다. 체리피커의 경우에는 재구매를 유도하는 방식의 전략이 중요하다고 볼 수 있습니다.

하지만 이 모든 마케팅 전략을 수립하기에 자원이 한정적일 수 있으니, 우선순위를 정해야 해야합니다.

VIP 고객 -> 실버 등급의 40대 남성 -> 일반 (20대 남성)

위와 같이 순서를 정하여 마케팅 전략을 수립하고자 합니다.

 

 

8. 마케팅 후속 액션

 

클러스터 0: "성장 가능성이 높은 실버 그룹" (Target: 40대 남성)

앱도 설치했고 구매력도 중간 수준(11만 원)이지만, 재구매율이 57%로 살짝 애매합니다. 패션 카테고리는 유행에 민감하므로 이탈을 막는 것이 중요합니다.

마케팅 전략: [업셀링(Up-selling) 및 리마인드]

카테고리 확장: 패션 외에 연관된 잡화나 시계 등 단가가 높은 품목을 추천하여 구매 금액을 높이세요.

재방문 트리거: 방문 주기가 24일로 늘어지는 시점에 "찜해둔 상품의 재고가 얼마 남지 않았습니다"와 같은 앱 푸시 알림을 보내세요.

회원 등급 업그레이드 예고: "구매 2회만 더 하시면 골드 등급 혜택을 드립니다"와 같은 챌린지를 부여하세요.

클러스터 1: "쿠폰 사냥꾼 및 이탈 위기군" (Target: 20대 남성)

구매 금액이 낮고, 앱 설치도 안 했으며, 방문 주기가 68일로 매우 깁니다. 하지만 쿠폰 사용률은 100%입니다. 즉, 혜택이 없으면 절대 사지 않는 그룹입니다.

마케팅 전략: [앱 설치 유도 및 효율적 관리]

앱 전용 초저가 딜: "앱 설치 시에만 식품 카테고리 990원" 같은 파격적인 조건을 걸어 일단 앱으로 끌어들여야 합니다. (이후 푸시 알림 타겟팅을 위해)

첫 재구매 유도: 재구매율이 0%입니다. 첫 구매 후 3일 이내에 사용할 수 있는 '감사 쿠폰'을 발행해 두 번째 구매 경험을 강제로 만들어주세요.

리소스 배분: 만약 마케팅 예산이 한정적이라면, 이 그룹에 대한 무차별적인 광고보다는 클러스터 2와 0에 집중하는 것이 매출 기여도 측면에서 훨씬 유리합니다.

클러스터 2: "우리의 보물, 로열 VIP" (Target: 30대 여성)

가장 높은 구매력과 재구매율(100%)을 가진 핵심 그룹입니다. 특징은 쿠폰 사용률이 낮다(36%)는 점인데, 이는 가격보다 브랜드 가치나 편의성을 중시한다는 증거입니다.

마케팅 전략: [락인(Lock-in) 및 VIP 대우]

프라이빗 혜택: 쿠폰 뿌리기보다는 '무료 배송', 'VIP 전용 상담 라인', '신제품 우선 구매권' 같은 특별 대우를 제공하세요.

리뷰 리워드 강화: 이들은 재구매가 활발하므로, 양질의 리뷰를 쓸 확률도 높습니다. 리뷰 작성 시 포인트를 두 배로 주어 커뮤니티 활성화를 유도하세요.

구독 모델 제안: 구매 주기가 7일로 매우 짧으므로 정기 구독 서비스를 제안하기 최적입니다.

[SQL 실무] 데이터 분석 리포팅과 고급 문법 정복 (JOIN, 서브쿼리, 윈도우 함수)

안녕하세요! 오늘은 데이터 분석가와 마케터라면 반드시 알아야 할 SQL 실무 활용법을 정리해 보려고 합니다. 단순한 문법 공부를 넘어, 실제 광고 성과와 유저 데이터를 어떻게 분석하고 의사결정에 활용하는지 그 과정을 담았습니다.

1. 마케팅 채널 성과 분석 (ROI, CPA, CTR)

데이터 분석의 첫걸음은 "어떤 채널이 효율적인가?"를 판단하는 것입니다. 이를 위해 ROI, CPA, CTR 같은 핵심 지표를 SQL로 집계해 보았습니다.

  • 핵심 포인트: 집계된 결과에 조건을 걸 때는 WHERE가 아닌 HAVING을 사용해야 합니다.
  • 의사결정: CPA(전환 단가)가 낮은 채널은 예산을 증액하고, ROI가 떨어지는 채널은 캠페인 개선 우선순위로 둡니다.

-- ROICPA 기준 채널별 성과 집계
SELECT channel,
SUM(budget) AS total_budget,
SUM(conversions) AS total_conv,
ROUND(((SUM(conversions) * 9900 - SUM(budget)) / SUM(budget)) * 100, 2) AS roi_pct,
SUM(budget) / SUM(conversions) AS cpa
FROM ad_campaigns
GROUP BY channel
HAVING total_conv >= 1500 ORDER BY roi_pct DESC;

2. CASE WHEN을 활용한 유료 전환율 분석

"어떤 경로로 들어온 유저가 실제로 결제를 많이 할까?"를 알기 위해 CASE WHEN 문법을 활용합니다. 특정 조건을 만족하는 데이터에 1과 0의 플래그를 주어 합산하면, 복잡한 조건 집계도 간단해집니다.

특히 COUNT(DISTINCT ...)를 함께 사용하면 유저 한 명이 여러 번 이벤트를 발생시켜 데이터가 뻥튀기되는 '과대 집계'를 방지할 수 있어 실무에서 필수적입니다.


3. 데이터의 연결고리: JOIN과 ERD

데이터가 여러 테이블에 흩어져 있을 때는 JOIN이 구원투수가 됩니다. 이번 실습에서는 사용자 정보, 행동 로그(Event), 친구 추천(Referral) 데이터를 연결해 보았습니다.

  • INNER JOIN: 활동 기록이 있는 '활성 유저'만 보고 싶을 때
  • LEFT JOIN: 가입은 했지만 활동이 없는 유저(휴면 타겟)를 추출할 때 유용합니다. WHERE event_id IS NULL 패턴을 활용하면 미활동 유저만 쏙 골라낼 수 있죠.

4. 효율을 높이는 서브쿼리 (Subquery)

서브쿼리는 "쿼리 안의 쿼리"입니다. 예를 들어 "평균 이상의 예산을 쓴 캠페인"을 찾을 때, 평균값을 수동으로 입력하지 않아도 서브쿼리가 알아서 계산해 줍니다.

또한 LIMIT 1은 동점자가 있을 때 데이터가 누락될 위험이 있지만, 서브쿼리로 MAX값을 구하면 동점인 데이터까지 모두 안전하게 추출할 수 있습니다.

-- 업그레이드를 한 번도 안 한 무료 유저 추출 (리마케팅용)
SELECT user_id, username
FROM users
WHERE plan = 'free'
AND user_id NOT IN ( SELECT DISTINCT user_id FROM user_events WHERE event_type = 'upgrade' );

5. 분석의 꽃: 윈도우 함수 (Window Function)

행의 개수를 유지하면서 순위나 누적 합계를 구할 때 사용하는 함수입니다.

  • RANK vs DENSE_RANK: 동점자 처리 방식의 차이를 이해하는 것이 핵심입니다.
  • LAG / LEAD: 어제와 오늘의 매출을 한 행에서 비교할 수 있게 해줍니다. 전일 대비 증감률을 구할 때 이보다 편한 방법은 없죠.
함수
특징
RANK()
동점 시 같은 순위, 다음 순위는 건너뜀 (1, 2, 2, 4)
SUM() OVER
행을 유지하며 순차적인 누적 합계 계산
LAG()
이전 행의 값을 현재 행으로 가져옴

마치며

오늘 실습을 통해 SQL 문법으로 분석을 진행하면서 마케팅 분석을 어떤 식으로 하면 되는지 알아가는 시간이었습니다.

앞으로는 AI가 SQL을 다 작성해줄 수 있겠죠. ㅎㅎ

분석된 내용을 통해 병목 지점을 어떤 식으로 해결할 것인지가 중요한 능력인 거 같습니다.

그게 창의성이고요.

창의성이 앞으로의 과제 같네요.

다음 시간에는 더 발전된 모습으로 돌아오겠습니다.

 

제 본가인 송천리를 소개합니다.

서울에서 자취를 하다가 본가에 들어와 살게 되었는데 벚꽃이 만개했더군요.

날씨와 공기가 좋아서 하늘도 예쁘고, 돗자리 펴고 벚꽃 나들이를 즐기는 사람들이 많더라고요.

석촌호수 공원에 굉장히 많은 인파가 몰려 움직이기도 즐기기도 힘들다고 들었어요.

틈새 공략으로 저희 마을과 같이 벚꽃이 만개한 곳을 찾아서 즐기는 것도 좋겠다는 생각이 들더라고요.

저희 마을에 예쁜 카페도 많으니 차와 시간적 여유가 있다면 다양한 공간을 찾아서 즐기는 것도 좋을 거 같아요.

 

저희 집에서 편의점 가는 길입니당~

길이 예뻐서 휴대폰 없이 심심하지 않게 산책했네요.

 

하늘이 좀 어두워졌을 때 벚꽃의 모습입니다.

보랏빛 하늘이 벚꽃과 어루러져서 환상적인 모습을 자아내네요.

앞으로 저희 동네에 숨겨진 다양한 카페들을 소개해보겠습니다.

제 블로그 오셔서 예쁜 공간 알아가시면 좋겠습니다.

 

장개울교

경기도 남양주시 수동면 송천리

 

 

오늘은 mysql db 환경 설정과 SQL 문법을 배웠습니다.

배운 내용을 기반으로 실습을 진행하였는데요.

 

https://www.notion.so/8-SQL-33c3d0c3c2d880398639dfcfffa0e529?showMoveTo=true&saveParent=true

 

8조 - SQL 실습 | Notion

BeatWave는 2024년 상반기(3~6월) 동안 총 7개 채널에 7,600,000원의 광고 예산을 집행하였으며, 총 16,410건의 전환을 달성했습니다. 채널별 성과 편차가 크게 나타났으며, ROI와 CPA 기준 최고 성과 채널과

www.notion.so

 

오늘이 4월 8일이기에 발표가 걸렸지만 시간이 부족하여 다른 팀으로 발표가 넘어가게 되었습니다.

다른 팀도 저희와 마찬가지로 시간이 없었지만 AI를 활용하여 시각화와 분석을 잘 진행하였더군요.

이번 실습의 핵심은 얼마나 빠르고, 의미있게 분석 결과를 내놓느냐였던 거 같습니다.

마케팅에서 많은 업무를 하는 만큼 빠른 업무 속도를 빼놓 수 없기 때문이겠죠.

이번에 완벽주의 성향으로 발표 기회를 놓쳤지만 다음번에는 고민하지 말고 도전해보고자 합니다.

 

GTM(Google Tag Manager) 설치 및 실습

 

1) GTM 설치

 

태그 관리자 페이지에서 새로운 계정을 만들어줍니다.

참고로 전 제 블로그 url로 실습을 진행합니다.

 

만들고 들어가면 세가지 탭이 보이게 됩니다.

 

관리자 페이지에 Google 태그 관리 설치가 있는데 클릭하면 설치 방법이 나오게 됩니다.(tistory css와 html 설정할 수 있는 곳으로 들어가서 설치를 진행하면 됩니다.)

 

2) 실습

처음에 google initialization 태그를 만들어준 뒤에 나머지 태그들을 만들었습니다.

 

출처 gemini

 

초반에 화면을 잠시 로드했다가 바로 나가는 사용자를 방문자로 카운트할 것인지 카운트하기 위해  초반에 google initialization 태그를 만드나봅니다.

 

initialization 태그를 처음에 설치해야 되는 이유 중에 하나가 이벤트 추적의 불발이 있었는데요.

저 이유는 이해가 안가는 부분이 있었습니다.

 

google 태그가 실행되지 않는다면 서버로 보낼 주소 id는 알고 있지만 그 데이터를 보내줄 배달원이 없는 것과 같은 상황인 것입니다.

 

그 다음은 트리거입니다. 트리거가 tag를 작동시킬 장치로 꼭 만들어줘야 합니다.

 

미리보기로 작동시킨 후 초반에 위 스크린샷과 같이 로그가 찍히게 됩니다.

 


후기

오늘 실습을 진행하면서 기본적인 html과 css를 알고 있으면 좋겠다는 생각이 들었다. 물론 ai llm에게 명령해서 코드를 짤 수는 있지만 적어도 읽을 줄이라도 알고 있으면 문제 상황이 발생했을 때 좀 더 능동적이고 효율적으로 해결할 수 있지 않을까.

매일 8시간씩 수업을 듣는게 피곤하지만 위와 같은 결과물을 만들어내고 나면 뿌듯하다.

 

 

+ Recent posts