Bootcamp

멋사 그로스마케팅 부트캠프 Day 5 (게슈탈트 붕괴의 서막): Pandas 데이터 정렬 및 필터링

sayous 2025. 5. 14. 20:21

1. Pandas 데이터 정렬하기 (Sorting)

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

import pandas as pd

# 그로스 마케팅 데이터 예제
data = {
    "캠페인": ["봄맞이 할인", "여름 특가", "가을 이벤트", "겨울 세일"],
    "매출액": [3500000, 5000000, 2200000, 4300000],
    "클릭수": [750, 1200, 540, 980],
    "전환율": [0.045, 0.052, 0.038, 0.049]
}

df = pd.DataFrame(data)

# 매출액 기준 오름차순 정렬
df_sorted_asc = df.sort_values(by="매출액", ascending=True)
print(df_sorted_asc)

# 매출액 기준 내림차순 정렬
df_sorted_desc = df.sort_values(by="매출액", ascending=False)
print(df_sorted_desc)
  • ascending=True → 오름차순(작은 값부터 큰 값 순서)
  • ascending=False → 내림차순(큰 값부터 작은 값 순서)

여러 열 기준 정렬

# 먼저 매출액을 내림차순 정렬한 후, 동일한 매출액 내에서 클릭수를 오름차순 정렬
df_sorted_multi = df.sort_values(by=["매출액", "클릭수"], ascending=[False, True])
print(df_sorted_multi)
  • by=["매출액", "클릭수"] → 두 개의 열을 기준으로 정렬
  • ascending=[False, True] → 첫 번째 기준(매출액)은 내림차순, 두 번째 기준(클릭수)은 오름차순 정렬

 

예제 1: 특정 캠페인을 최우선 정렬

목표: 캠페인 열에서 특정 캠페인(예: "여름 특가")을 최우선으로 정렬하고, 나머지는 매출액 기준 내림차순 정렬

 

예제 2: 전환율 상위 50% 캠페인만 선택 후 정렬

목표: 전환율이 상위 50%인 데이터만 필터링 후, 클릭수 기준 내림차순 정렬

 

예제 3: 매출액과 전환율을 조합한 가중치 정렬

목표: 매출액과 전환율을 조합한 새로운 점수를 기준으로 정렬

 

예제 4: 클릭수와 전환율을 고려한 정렬

목표: 클릭수가 높으면서도 전환율이 낮은 캠페인 우선 정렬

 

예제 5: 정규화된 매출액을 기준으로 정렬

목표: 매출액을 정규화하여 상대적인 매출 기여도를 계산 후 정렬

 

2. Pandas 데이터 필터링 (Filtering)

boolean indexing: 조건을 만족하는 행만 선택해 필터링

# 클릭수가 800 이상인 캠페인만 선택
high_clicks = df[df["클릭수"] >= 800]
print(high_clicks)
  • df["클릭수"] >= 800 → True 또는 False 값을 반환
  • df[...] → True 값이 있는 행만 선택
# 클릭수가 800 이상이고 전환율이 0.05 이상인 캠페인 선택
filtered_df = df[(df["클릭수"] >= 800) & (df["전환율"] >= 0.05)]
print(filtered_df)
  • & → 두 개 이상의 조건을 모두 만족하는 데이터 선택 (AND 연산)
  • | → 두 개 이상의 조건 중 하나라도 만족하는 데이터 선택 (OR 연산)

query(): 좀 더 직관적인 방식으로 조건에 맞는 데이터 필터링

# 매출액이 400만 원 이상인 캠페인 선택
filtered_df = df.query("매출액 >= 4000000")
print(filtered_df)
# 매출액이 400만 원 이상이고 전환율이 0.05 이상인 캠페인 선택
filtered_df = df.query("매출액 >= 4000000 and 전환율 >= 0.05")
print(filtered_df)

 

isin(): 특정 값이 포함된 데이터 필터링

# 특정 캠페인만 선택
selected_campaigns = df[df["캠페인"].isin(["봄맞이 할인", "겨울 세일"])]
print(selected_campaigns)

 

str.contains(): 특정 단어가 포함된 데이터 필터링

# "할인"이 포함된 캠페인만 선택
discount_campaigns = df[df["캠페인"].str.contains("할인")]
print(discount_campaigns)

 

between(): 특정 범위 내에 있는 값 필터링

# 매출액이 300만 원에서 450만 원 사이인 캠페인 선택
filtered_df = df[df["매출액"].between(3000000, 4500000)]
print(filtered_df)

 

반응형

 

예제 1: 클릭수 상위 50% 캠페인 선택

목표: 클릭수가 데이터의 중간값보다 높은 캠페인만 선택

 

예제 2: 특정 단어가 포함된 캠페인만 필터링

목표: "할인"이라는 단어가 포함된 캠페인만 선택

 

예제 3: 매출액이 특정 범위 내에 있는 캠페인 필터링

목표: 매출액이 300만원 이상, 450만원 이하인 캠페인 선택

 

예제 4: 전환율이 높은 상위 캠페인 선택

목표: 전환율이 평균보다 높은 캠페인만 선택

 

예제 5: query()를 활용한 다중 조건 필터링

목표: 매출액이 400만원 이상이면서 클릭수 900 이상인 캠페인 선택

 

단일 열 정렬 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)]

 

3. Pandas 데이터 그룹화 및 집계

groupby():  특정 열을 기준으로 데이터를 묶고, 이를 바탕으로 다양한 통계 연산을 수행하는 기능을 제공. 캠페인별 매출 합산, 지역별 클릭 수 비교, 여러 광고 캠페인의 평균 전환율 비교분석 등의 작업에 필요.

 

import pandas as pd

# 그로스 마케팅 데이터 예제
data = {
    "캠페인": ["봄맞이 할인", "여름 특가", "가을 이벤트", "겨울 세일", 
            "봄맞이 할인", "여름 특가", "가을 이벤트", "겨울 세일"],
    "지역": ["서울", "서울", "부산", "부산", "대구", "대구", "광주", "광주"],
    "매출액": [3500000, 5000000, 2200000, 4300000, 
            3200000, 4700000, 2000000, 4000000],
    "클릭수": [750, 1200, 540, 980, 720, 1150, 520, 950],
    "전환율": [0.045, 0.052, 0.038, 0.049, 0.042, 0.050, 0.035, 0.048]
}

# 데이터프레임 생성
df = pd.DataFrame(data)

# 데이터프레임 출력
print("=== 원본 데이터 ===")
print(df)

# CSV 파일로 저장
df.to_csv("marketing_data.csv", index=False, encoding="utf-8-sig")

# 저장된 CSV 파일 불러오기
df_loaded = pd.read_csv("marketing_data.csv", encoding="utf-8-sig")

print("\\n=== CSV 파일에서 로드한 데이터 ===")
print(df_loaded)

 

 

예제 1: 캠페인별 매출 합산

목표: 같은 캠페인명을 기준으로 데이터를 묶고 매출액 합산 (단일 column 기준으로)

 

예제 2: 캠페인별 평균 클릭수

목표: 각 캠페인의 평균 클릭수 계산 (단일 column 기준으로)

 

예제 3: 캠페인과 지역별 매출 합계

목표: 캠페인별, 지역별로 그룹화한 후 매출액 합산 (여러 column 기준으로 그룹화)

 

예제 4: 캠페인과 지역별 클릭수 평균

목표: 캠페인별, 지역별로 그룹화한 후 평균 클릭수 계산 (여러 column 기준으로 그룹화)

 

예제 5: 캠페인별 매출액과 클릭수에 대한 집계연산

목표: agg()를 사용해 sum, mean 두 개의 연산 적용 (그룹화된 데이터에서 여러개의 집계연산 적용)

 

예제 6: 매출액 합계가 700만원 이상인 캠페인만 선택

목표: df.groupby("캠페인")["매출액"].sum()으로 그룹화한 후 700만원 이상인 데이터만 필터링 (그룹화된 데이터 필터링)

 


 

파이썬을 이틀만에 끝내고 Pandas로 넘어갔는데, 아직 파이썬 함수나 클래스 개념은 제대로 숙지도 안 되었고 Pandas는 예제는 대충 풀 수는 있는데 개념적인 게 전혀 와닿지가 않아서 멘탈이 좀 많이 나갔다. 나처럼 코딩이나 이런 데이터 쪽 베이스가 없는 수강생들이 어려움을 많이 토로했는지 매주 금요일에 리뷰타임도 가진다고 하고 야간 보충수업도 운영한다고 함...

 

멋쟁이사자처럼 그로스마케팅 부트캠프 2기, 아직 제대로 수업을 시작한지 1주가 겨우 지났지만 우려했던 것보다 더 빡센 커리큘럼에 좀 정신적 데미지가 크다. 사실 신청하기 전부터 이 부분이 제일 걱정이긴 했는데, 커리큘럼에 선택과 집중이 없다.

 

멋쟁이사자처럼과 스파르타코딩클럽 두 곳의 부트캠프 간 고민했는데 멋사가 그래도 교육기간이 좀 더 짧아 9월 출국 일정에 차질이 없고, 프로젝트도 2개나 하고 내용도 좀 더 좋아보여서 여기로 정했다. 근데 교육기간이 짧은 반면 다루는 주제는 파이썬부터 SQL, MariaDB, Looker Studio, Tableau, 머신러닝 등등 너무 광범위하고 어려운 것들만 조합해둔 느낌이다. 

 

노트북 대여해줘서 훨씬 수월하게 실습하는 중

 

 

물론 실무단에서 desirable한 스킬셋을 많이 습득하는건 좋지만, 내가 데이터 분석가나 마케팅 애널리스트 쪽으로 바로 이직하기엔 현실적인 어려움이 있다보니 과연 여기서 배우는 것들을 내가 써먹게 될까, 취업에 유리하게 작용하긴 할까 하는 의문이 생겼다. 사실 SQL 하나만 해도 마케팅 현업에서 쓰이는 정도까지 익히려면 몇 개월은 걸릴 텐데, 거기에 파이썬이랑 Pandas랑 머신러닝까지... 내년에 영국 취업 준비할 때가 되면 과연 얼마나 기억을 할 수 있을지도 모르겠고;

 

물론 혼자 SQL, 파이썬 등 깔짝이다 패션 자격증 한두개 따고 출국하는 것보단 이렇게 맨땅 헤딩 느낌으로 실무적인 툴들에 어떻게든 몸을 담가보고 가는게 도움이 되긴 할 것이다. 그런데 그냥 커리큘럼의 양과 난이도, 그리고 페이스가 비전공자 노베이스 문과인에겐 좀 말이 안되는 수준이라 생각한다.

 

그렇다고 해서 뭐 시간을 되돌려 퇴사를 무르고 싶다는 건 아니지만 그냥 이런저런 생각이 많이 들었고 스트레스도 꽤 크다. (그래서 개즉흥 방콕 여행 다녀옴... 그리고 결석진도 때문에 더 크나큰 절망의 수렁에 빠져 허우적대는 중) 이런 IT 쪽 비전공자라면, 국비지원 부트캠프라고 절대 만만히 보지 마시길