본문 바로가기

⚠️그로스마케터 성장 보고합니다⚠️

GM. 데이터분석 개론 정리2 (Pandas 기초, 데이터로드 및 기본탐색, 데이터 정렬, 필터링, 그룹화, 그로스 마케팅 프로모션 원칙과 절차)

 

귀찮아서 안할려고 했는데 도저히 수업을 따라갈 수 없어 꾸준히 해보겠다.

문과로서 산 삶 23년. 이제는 이과머리로 바꾸겠다.

 

 


Pandas 기초

 

1. Pandas 기초

1)  Pandas란?

  • Pandas는 Python에서 데이터 분석과 조작을 쉽게 할 수 있도록 도와주는 강력한 오픈소스 라이브러리이다. 
  • Pandas는 엑셀과 유사한 데이터 구조를 제공하며, 표 형태(테이블 형식)의 데이터를 효율적으로 다룰 수 있다.
  • Pandas는 NumPy 기반으로 만들어졌으며, 데이터 정리, 변환, 분석, 시각화 등의 기능을 제공한다.

2)  Pandas 설치 및 기본 사용법

  • Pandas는 Python의 pip 패키지 관리자를 이용하여 쉽게 설치할 수 있다. 
pip install pandas
  • 설치가 완료되면, Pandas를 불러와서 사용할 수 있다. 
import pandas as pd  # 일반적으로 'pd'라는 별칭으로 사용

 

3) Pandas의 주요 데이터 구조

  • Series (1차원 데이터 구조): Series는 Pandas의 1차원 데이터 구조로, 리스트(List)와 유사하지만, 인덱스(Index)가 추가되어 데이터에 쉽게 접근할 수 있다.
import pandas as pd

# Series 생성
click_rates = pd.Series([0.05, 0.10, 0.15, 0.20], index=["A", "B", "C", "D"])

print(click_rates)


#출력결과
A    0.05
B    0.10
C    0.15
D    0.20
dtype: float64
  • DataFrame (2차원 데이터 구조): DataFrame은 엑셀의 표와 같은 2차원 데이터 구조로, 행과 열을 가집니다.
# DataFrame 생성
data = {
    "Campaign": ["봄맞이 이벤트", "여름 할인", "가을 특별전"],
    "CTR": [0.12, 0.15, 0.08],
    "CR": [0.05, 0.07, 0.03]
}

df = pd.DataFrame(data)

print(df)


#출력결과
    Campaign   CTR   CR
0  봄맞이 이벤트  0.12  0.05
1   여름 할인  0.15  0.07
2  가을 특별전  0.08  0.03

 

4) Pandas 주요 기능

  • 데이터 읽기 및 저장: Pandas는 CSV, Excel, JSON 등 다양한 형식의 데이터를 읽고 저장할 수 있다. 
df = pd.read_csv("marketing_data.csv")  # CSV 파일 불러오기

df.to_excel("output.xlsx", index=False) # 엑셀 파일로 저장
  • 데이터 조회 및 탐색
    • 데이터 로드 및 확인
    • 특정 조건 필터링
    • 기간별 조회
    • 상위 N개 데이터 조회
    • 광고비 대비 매출 비율 계산

#Colab에서 pandas dataframe을 표형식으로 출력하기 위해서는 print 대신 display를 사용한다. 

 

  • 데이터 필터링

  • 데이터 그룹화 - groupby(): 특정 열을 기준으로 데이터를 그룹화한 후, 합계, 평균, 개수 등의 집계 연산을 수행하는 기능
    • 기본 사용법: df.groupby("그룹기준열").집계함수()
    • df.groupby("카테고리")["매출액(만원)"].sum() -> 이 코드는 "카테고리" 열을 기준으로 그룹화하여 "매출액(만원)"의 합계를 계산한다.
    • 주요 기능 정리기능코드
      기능 코드
      그룹별 합계 df.groupby("카테고리")["매출액(만원)"].sum()
      그룹별 평균 df.groupby("카테고리")["매출액(만원)"].mean()
      그룹별 개수 df.groupby("카테고리")["매출액(만원)"].count()
      여러 개 그룹 기준 df.groupby(["카테고리", "지역"])["매출액(만원)"].mean()
      여러 개 집계 연산 df.groupby("카테고리").agg({"매출액(만원)": "sum", "광고비(만원)": "mean"})

 

5) Pandas 활용 예제

    • 제조업체를 위한 그로스 마케팅 예

 

 

2. Pandas 데이터 로드 및 기본 탐색 

1) Pandas 데이터 로드 (Data Loading)

파일 형식  메서드
CSV (Comma Separated Values) pd.read_csv()
Excel (XLSX) pd.read_excel()
JSON (JavaScript Object Notation) pd.read_json()
SQL 데이터베이스 pd.read_sql()
Parquet pd.read_parquet()

 

  • CSV 파일 로드:  Pandas의 read_csv() 함수
    • encoding="utf-8" → 한글 데이터가 포함된 경우 encoding="cp949"을 사용할 수도 있음.
    • delimiter="," → 데이터가 ,가 아닌 ;로 구분된 경우 delimiter=";"을 지정.
    • 컬럼명을 지정하여 불러오기
      • names=[] → 파일의 첫 번째 행이 컬럼명이 아닌 경우, 수동으로 컬럼명을 지정.
      • header=0 → 첫 번째 행을 컬럼명으로 설정 (기본값).
import pandas as pd

# CSV 파일 불러오기
df = pd.read_csv("marketing_data.csv", encoding="utf-8", delimiter=",")

# 데이터 확인
print(df.head())  # 상위 5개 행 출력

 

df = pd.read_csv("marketing_data.csv", names=["Campaign", "Sales", "Clicks", "Conversions", "Region"], header=0)
  • Excel 파일 로드: read_excel() 메서드를 사용
    • sheet_name="Sheet1" → 여러 개의 시트가 있는 경우 특정 시트 선택.
df = pd.read_excel("marketing_data.xlsx", sheet_name="Sheet1")
print(df.head())
  • SON 파일 로드: read_json()을 사용
df = pd.read_json("marketing_data.json")
print(df.head())
    • SQL 데이터베이스에서 불러오기
import sqlite3

# 데이터베이스 연결
conn = sqlite3.connect("marketing.db")

# SQL 쿼리를 이용해 데이터 가져오기
df = pd.read_sql("SELECT * FROM marketing_campaigns", conn)

# 데이터 출력
print(df.head())

 

2) 데이터 기본 탐색 (Basic Exploration)

  • 데이터 크기 확인: print(df.shape)  - (행 개수, 열 개수)를 반환.
  • 컬럼명 확인: print(df.columns)
  • 데이터 정보 출력: print(df.info())  - 데이터 타입, 컬럼별 결측값 개수 등을 확인 가능.
  • 데이터 타입 확인: print(df.dtypes)  - 숫자가 아닌 열(예: object)을 변환할 필요가 있는지 점검.
  • 데이터의 상위 및 하위 행 조회: print(df.head()) # 상위 5개 행 출력 / print(df.tail()) # 하위 5개 행 출력
  • 기초 통계 요약: print(df.describe())  - count, mean, std(표준편차), min(최솟값), max(최댓값), 25%/50%/75%(사분위수) 등 제공.
  • 결측값 확인: print(df.isnull().sum())

 

3.데이터 요약 정리

  • 데이터 크기 확인 → .shape
  • 컬럼명 확인 → .columns
  • 데이터 정보 출력 → .info()
  • 데이터 타입 확인 → .dtypes
  • 데이터 샘플 확인 → .head(), .tail()
  • 기초 통계 분석 → .describe()
  • 고유값 확인 → .unique(), .value_counts()
    • df["방문자수"].unique() # "카테고리" 열의 고유값 조회
  • 결측값 확인 → .isnull().sum()

 


데이터 정렬과 필터링

 

1. Pandas 데이터 정렬 (단일/여러 열 기준 정렬)

1) sort_values()를 활용한 단일 열 정렬

  • ascending=True → 오름차순(작은 값부터 큰 값 순서)
  • ascending=False → 내림차순(큰 값부터 작은 값 순서)

 

2) 여러 열 기준 정렬

  • by=["매출액", "클릭수"] → 두 개의 열을 기준으로 정렬
  • ascending=[False, True] → 첫 번째 기준(매출액)은 내림차순, 두 번째 기준(클릭수)은 오름차순 정렬

 

 

2. Pandas 데이터 필터링 (Filtering) - boolean indexingquery()

1) boolean indexing을 활용한 필터링: 조건을 만족하는 행만 선택

  • df["클릭수"] >= 800 → True 또는 False 값을 반환
  • df[...] → True 값이 있는 행만 선택

 

2) query()를 활용한 필터링: 직관적인 방식으로 필터링을 수행

  • and → 두 개 이상의 조건을 동시에 만족하는 데이터 선택
  • or → 두 개 이상의 조건 중 하나라도 만족하는 데이터 선택

 

3) 특정 값이 포함된 데이터 필터링: isin()을 사용하면 특정 목록에 포함된 값을 가진 행만 선택할 수 있다. 

  • isin(["봄맞이 할인", "겨울 세일"]) → 두 개의 캠페인만 포함하는 데이터 선택

 

4) 문자열을 포함하는 데이터 필터링: str.contains()를 활용하면 특정 단어가 포함된 데이터를 찾을 수 있다. 

 

5) 특정 범위에 있는 데이터 필터링: between()을 사용하면 특정 범위 내에 있는 값을 필터링할 수 있다. 

  • between(3000000, 4500000) → 300만 원 이상, 450만 원 이하의 데이터 선택

 

 

3. 데이터 정렬과 필터링을 결합하기

  • 매출액이 평균 이상인 캠페인 중, 클릭수 기준 오름차순 정렬
# 매출액 평균 계산
mean_revenue = df["매출액"].mean()

# 매출액이 평균 이상인 데이터 선택 후 클릭수 기준 오름차순 정렬
filtered_sorted_df = df[df["매출액"] >= mean_revenue].sort_values(by="클릭수", ascending=True)
print(filtered_sorted_df)
  • 전환율이 특정 범위 내에 있는 캠페인 중, 클릭수 내림차순 정렬
# 전환율이 0.04 이상 0.05 이하인 캠페인 선택 후 클릭수 내림차순 정렬
filtered_sorted_df = df[df["전환율"].between(0.04, 0.05)].sort_values(by="클릭수", ascending=False)
print(filtered_sorted_df)
    • query()를 활용하여 다중 조건 필터링 후, 정렬
# query()를 활용한 다중 조건 필터링 후 클릭수 기준 내림차순 정렬
filtered_sorted_df = df.query("매출액 >= 3000000 and 전환율 >= 0.045").sort_values(by="클릭수", ascending=False)
print(filtered_sorted_df)

 

 

4. 정리

기능사용 예제
단일 열 정렬 df.sort_values(by="매출액", ascending=False)
여러 열 기준 정렬 df.sort_values(by=["매출액", "클릭수"], ascending=[False, True])
특정 조건 필터링 df[df["클릭수"] >= 800]
여러 조건 필터링 df[(df["클릭수"] >= 800) & (df["전환율"] >= 0.05)]
query() 활용 df.query("매출액 >= 4000000 and 전환율 >= 0.05")
특정 값 포함 필터링 df[df["캠페인"].isin(["봄맞이 할인", "겨울 세일"])]
특정 단어 포함 필터링 df[df["캠페인"].str.contains("할인")]
특정 범위 필터링 df[df["매출액"].between(3000000, 4500000)]

 

 


데이터 그룹화 및 집계

 

1. 데이터 그룹화란?

  • groupby()는 특정 열을 기준으로 데이터를 묶고, 이를 바탕으로 다양한 통계 연산을 수행하는 기능을 제공한다.
  • 이를 활용하면 다음과 같은 분석이 가능하다.
    • 캠페인별 매출 합산: 특정 마케팅 캠페인의 총 매출을 계산할 수 있다.
    • 지역별 클릭 수 비교: 특정 지역에서 가장 많은 클릭 수를 기록한 캠페인을 파악할 수 있다.
    • 전환율 평균 분석: 여러 광고 캠페인의 평균 전환율을 비교할 수 있다.

 

2. 예제 데이터 생성

  • 그로스 마케팅 데이터를 활용하여 캠페인별 매출, 클릭 수, 전환율 등의 정보를 포함하는 데이터셋을 생성한다.

 

3. 단일 열 기준으로 데이터 그룹화

1) 캠페인별 매출 합산

  • 같은 캠페인명을 기준으로 데이터를 묶고, 매출액을 합산하였다.

 

2) 캠페인별 평균 클릭 수

  • 각 캠페인의 평균 클릭 수를 계산하였다.

 

4. 여러 개의 열을 기준으로 그룹화

1) 캠페인과 지역별 매출 합계

  • ["캠페인", "지역"]을 기준으로 데이터를 묶고 매출액을 합산하였다.

2) 캠페인과 지역별 클릭수 평균

  • 캠페인별, 지역별로 그룹화한 후 평균 클릭수를 계산하였다.

 

 

5. 그룹화된 데이터에서 여러 개의 집계 연산 적용하기

1) 캠페인별 매출액과 클릭수에 대한 집계 연산 적용

  • agg()를 사용하여 sum과 mean 두 개의 연산을 적용하였다.

 

 

6. 그룹화된 데이터 필터링

1) 매출액 합계가 700만 원 이상인 캠페인만 선택

  • df.groupby("캠페인")["매출액"].sum()으로 그룹화한 후, 700만 원 이상인 데이터만 필터링하였다.

 


데이터 분석을 활용한 그로스 마케팅 프로모션 원칙과 절차

 

1. 그로스 마케팅 프로모션의 핵심 원칙

: 그로스 마케팅(Growth Marketing)은 데이터 기반 최적화, 지속적인 실험, 고객 행동 분석을 통해 빠르게 성장할 수 있는 전략을 찾는 과정이다

  • 타겟 고객 세분화(Segmentation)
    • 다양한 고객층을 분석하여 소비 패턴이 유사한 그룹으로 나누고 맞춤형 프로모션을 실행
    • 예: 외출이 적은 1인 가구 vs. 직장인 vs. 커뮤니케이션이 적은 소비층
  • 데이터 기반 실험(Experimentation)
    • 가설을 세우고 A/B 테스트 또는 소규모 프로모션을 실행한 후 반응을 데이터로 측정하여 최적화
    • 예: "월 정기 배송 50% 할인" vs. "첫 구매 5천 원 할인" 중 더 높은 전환율을 확인
  • 맞춤형 개인화(Personalization)
    • 고객 데이터를 활용하여 개별 맞춤형 프로모션 제공
    • 예: OTT 소비량이 높은 지역에는 넷플릭스 구독 프로모션, 직장인 밀집 지역에는 야간 배달 프로모션
  • 바이럴 요소 활용(Viral Growth)
    • SNS 공유, 친구 추천 리워드, 입소문 유도 등 유저 기반 성장 전략 적용
    • 예: "친구 추천 시 1개월 무료", "소셜미디어 인증 시 추가 할인"
  • 성장 지표 측정(Tracking & Optimization)
    • 프로모션 이후 구매 전환율, 고객 유지율, CAC(고객 획득 비용) 등 주요 지표를 측정하여 최적화
    • 예: "재구매율 20% 증가 vs. 신규 유입 30% 증가 중 어느 것이 효과적인가?"

 

2. 그로스 마케팅 프로모션 절차 예시

  • 1단계: 데이터 분석을 통한 고객 타겟팅
    • 먼저 데이터를 기반으로 타겟 고객을 세분화하고, 각 그룹별 소비 패턴과 니즈를 파악
    • 결과 해석:
      • 1인 가구 비율이 높은 지역에서는 배달 서비스, 무인 상점, 정기 구독 서비스의 수요가 높을 가능성이 큼
      • 이 데이터를 바탕으로 특정 지역에서 실험적인 프로모션을 실행 가능
df_new["1인가구_비율"] = (df_new["1인가구수"] / df_new["총인구"]) * 100
one_person_ratio = df_new.groupby("자치구")["1인가구_비율"].mean().sort_values(ascending=False)
print(one_person_ratio.head(5))

 

  • 2단계: 가장 적합한 상품 선정
    • 각 고객 그룹별로 가장 잘 팔릴 상품을 선정하고, 맞춤형 프로모션 전략을 수립
    • 예제 코드 (외출이 적은 지역에서 배달 서비스 수요 분석)
    • 결과 해석:
      • 외출이 적은 지역에서는 간편식, 신선식품 정기 배송, 온라인 쇼핑 관련 프로모션이 효과적일 가능성이 큼
df_new["외출_적은_비율"] = (df_new["평일_외출이_적은_집단"] + df_new["휴일_외출이_적은_집단"]) / df_new["총인구"] * 100
low_outdoor_areas = df_new.groupby("자치구")["외출_적은_비율"].mean().sort_values(ascending=False)
print(low_outdoor_areas.head(5))

 

  • 3단계: 프로모션 전략 수립 및 실험 (A/B 테스트)
    • 최적의 프로모션 방식을 찾기 위해 A/B 테스트를 실행하여 성과를 비교
    • A/B 테스트 예제
      • A안: "첫 구매 시 5천 원 할인"
      • B안: "정기 배송 첫 달 50% 할인"
    • 예제 코드 (직장인이 많은 지역에서 헬스케어 및 건강식품 수요 분석)
    • 결과 해석:
      • 직장인 비율이 높은 지역에서는 야간 헬스장 쿠폰, 단백질 보충제 할인, 건강식 배달 서비스 프로모션이 효과적일 가능성이 높음
df_new["직장인_비율"] = (df_new["출근소요시간_및_근무시간이_많은_집단"] / df_new["총인구"]) * 100
high_work_areas = df_new.groupby("자치구")["직장인_비율"].mean().sort_values(ascending=False)
print(high_work_areas.head(5))
  • 4단계: 프로모션 실행 및 바이럴 마케팅 적용
    • 최적의 프로모션을 실행하고, SNS, 친구 추천, 인플루언서 마케팅 등 바이럴 요소를 포함해야 합니다.
    • SNS 마케팅 예제
      • "구매 후 SNS 인증 시 추가 할인 제공"
      • "친구 추천 시 1개월 무료 구독"
    • 예제 코드 (동영상 서비스 이용이 많은 지역에서 OTT 및 스마트 기기 판매 분석)
    • 결과 해석:
      • 동영상 소비가 많은 지역에서는 넷플릭스, 웨이브 같은 OTT 서비스 할인, 스마트 TV 프로모션이 효과적일 가능성이 큼
df_new["동영상_이용_비율"] = (df_new["동영상서비스_이용이_많은_집단"] / df_new["총인구"]) * 100
video_usage_areas = df_new.groupby("자치구")["동영상_이용_비율"].mean().sort_values(ascending=False)
print(video_usage_areas.head(5))
  • 5단계: 프로모션 성과 분석 및 최적화
    • 실행한 프로모션의 효과를 측정하고 구매 전환율, 재구매율, CAC(고객 획득 비용) 등을 비교하여 최적화합니다.
    • 측정해야 할 지표
      • 전환율 (Conversion Rate): 프로모션을 본 후 실제 구매한 고객 비율
      • 재구매율 (Retention Rate): 한 번 구매 후 다시 구매하는 고객 비율
      • 고객 획득 비용 (CAC): 한 명의 신규 고객을 확보하는 데 드는 마케팅 비용
  • 6단계: 반복 최적화 및 확장
    • 가장 효과적인 프로모션 전략을 확인한 후, 더 많은 지역과 채널로 확장해야 한다.
      • A/B 테스트 결과 전환율이 높은 프로모션을 전국적으로 확대
      • 데이터 기반으로 새로운 고객 세그먼트 추가 분석 및 공략
      • 기존 고객을 대상으로 추가 상품 크로스셀링(Cross-selling) 진행
    데이터 기반으로 소비자 패턴을 분석 → 최적의 상품을 선정 → A/B 테스트를 실행 → 최적화하는 절차를 적용하면 성공적인 그로스 마케팅 프로모션을 운영할 수 있다.