온보딩 주차

Chapter.0 온보딩 주차(3)

devjjun 2026. 3. 24. 11:21

TIL(Today I Learned)


1️⃣ 데이터 분석 종합반 강의 5주차

  • 실전 데이터를 활용한 분석
  • 실습문제: 코호트차트를 만들어서 문제점 찾기
  • 문제 설명: 목표한 만큼 강의 컨텐츠를 모두 수강 완료하는 것에 도움을 주려면
    콘텐츠가 충분히 흥미있고 유익해야 합니다. 8월 즈음 컨텐츠 개편이 완료되어 적용된 상태입니다.
    하지만 8월의 완주율이 저조해졌습니다. 가설을 세우고 증명해봅시다.
  • 가설: 8월 둘째 주 부터 변경된 3주 차 강의의 완주율이 현저히 떨어졌을 것이다.

 

#라이브러리 및 데이터 불러오기
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
plt.rc('font', family='NanumBarunGothic')
sparta_data = pd.read_table('/content/cohort_data.csv',sep=',')

#날짜 데이터 타입 변경
format='%Y-%m-%dT%H:%M:%S.%f'
sparta_data['start_time'] = pd.to_datetime(sparta_data['created_at'], errors='coerce')

#시작 week 구하기
sparta_data['start_week']= sparta_data['start_time'].dt.isocalendar().week

#시작 주 범위 알기
category_range = set(sparta_data['start_week'])

# 범주화 하기
# 범주화할 데이터
progress_rate = list(sparta_data['progress_rate'])

#범주를 구분하는 기준 bins
bins = [0,4.11,26.03,41.10,61.64,80.82,100]

#구분한 범주의 라벨 labels
labes=[0,1,2,3,4,5]

#범주화에 사용하는 함수 pd.cut
cuts = pd.cut(progress_rate,bins, right=True,include_lowest=True, labels=labes)
cuts
cuts = pd.DataFrame(cuts)

# 표 합치기
sparta_data = pd.concat([sparta_data,cuts],axis=1, join='inner')

#표 인덱스 변경하기
sparta_data.columns=['created_at','user_id','name','progress_rate','start_time','start_week',"week"]

#시작주와, 수강 주차별 기준으로 표 grouping 하기
grouping = sparta_data.groupby(['start_week','week'])

#시작주와, 수강 주차별에 해당하는 수강생 수 구하기
cohort_data = grouping['user_id'].apply(pd.Series.nunique)
cohort_data = pd.DataFrame(cohort_data)

#각 주차별 수강한 수강생 총 합 구하기
k=31
for i in range(6):
  for j in range(5, 0, -1):
    cohort_data.at[(k,j-1), 'user_id'] = int(cohort_data.at[(k,j),'user_id']) +  int(cohort_data.at[(k,j-1),'user_id'])
  k=k+1
cohort_data = cohort_data.reset_index()

cohort_counts = cohort_data.pivot(index="start_week",
                                  columns="week",
                                  values="user_id")

# 앞서 만든 피벗 테이블을 retention 변수에 저장하기
retention = cohort_counts
#각 주(week) 별 최초 수강생 수만 가져오기
cohort_sizes = cohort_counts.iloc[:,0]

# 최초 수강생 수를 각 데이터에 나눠주기
retention = cohort_counts.divide(cohort_sizes, axis=0)

#각 수치 퍼센트로 변경하기
retention.round(3)*100

#주차별 수강 전환율 구하기
w = 31 #강의 시작주차
for i in range(6): #개강일 주차
    for j in range(1, 6): #강의별 주차
        if retention.at[w, j-1] != 0: #이전주차가 0일 때 발생하는 오류 방지
            retention.at[w, j] = retention.at[w, j] / retention.at[w, j-1] #이번주/이전주
    w = w + 1 #시작주차 증가 후 반복문 대입

#주차별 수강 전환율 히트맵
plt.figure(figsize=(10,8))

sns.heatmap(data=retention,
           annot=True,
           fmt='.0%',
           vmin=0,
           vmax=1,
           cmap="BuGn")

plt.title('개강일별 주차 간 전환율', fontsize=20)
plt.xlabel('주차', fontsize=14,labelpad=30)
plt.ylabel('개강일', fontsize=14,rotation=360,labelpad=30)
plt.yticks(rotation=360)

#그래프 출력하기
plt.show()

*그림 2: 개강일별 주차 간 전환율을 보면 4주 차 컬럼에서만 떨어진 것이 아니라 전체적으로 떨어진 것을 볼 수 있습니다.

  • 가설검증: 그래프를 통해 4주차 컬럼에서만 수강율이 감소한 것이 아니라 전체적인 구간별 감소를 확인할 수 있기 때문에 컨텐츠 개편이 아닌 다른 요인에 의해 감소했음을 유추할 수 있습니다.

2️⃣ Python 문법 강의 수강 및 복습

1. 변수 선언과 자료형

  • 변수 선언: 변수명 = 값
  • 주요 자료형:
    • 정수: int → num = 10
    • 실수: float → pi = 3.14
    • 문자열: str → name = "Alice"
    • 불리언: bool → flag = True

2. 문자열 다루기

  • 연결: "Hello " + "World"
  • 반복: "Hi! " * 3
  • 길이: len("Hello")
  • 인덱싱: "Hello"[0] → 'H'
  • 슬라이싱: "Hello"[1:4] → 'ell'

3. 리스트와 딕셔너리

  • 리스트: 순서 있는 자료 저장
  •  
    fruits = ["apple", "banana", "cherry"]
    fruits.append("orange")
     
  • 딕셔너리: 키-값 쌍 저장
  •  
    person = {"name": "Alice", "age": 25}
    print(person["name"])
     

4. 조건문5. 반복문

  • for: 반복 횟수 지정 가능
  •  
    for i in range(5):
    print(i)
     
  • while: 조건 만족할 때까지 반복
  •  
    while count < 5:
    print(count)
    count += 1
  •  

💡 느낀점

  • 강의를 통해 데이터 전처리 과정과 필요 데이터를 추출하는 것을 숙달할 수 있었고, 평소 2차원적 그래프를 자주 활용하던 저에게 히트맵을 활용한 데이터 시각화가 특히 인상적이었습니다. 단순히 값만 보는 것이 아니라, 데이터의 분포와 패턴을 한눈에 파악할 수 있는 방식이 신선하게 다가왔습니다. 기본 문법과 라이브러리 등을 더욱 체계적으로 공부해서 데이터 분석에 적극 활용하고 싶다는 생각이 들었습니다. Kaggle통한 다양한 데이터 분석 사례를 접하고, 직접 가설 및 검증을 시행해보며 현업에서의 데이터 분석을 숙달해야겠다고 느꼈습니다.

'온보딩 주차' 카테고리의 다른 글

Chapter.0 온보딩 주차(6)  (0) 2026.03.24
Chapter.0 온보딩 주차(5)  (0) 2026.03.24
Chapter.0 온보딩 주차(4)  (0) 2026.03.24
Chapter.0 온보딩 주차(2)  (1) 2026.03.24
Chapter.0 온보딩 주차 (1)  (0) 2026.03.24