
* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
5주차 숙제 '(각 주차별 완주수강생수)/(직전주차 완주수강생수)' 나누는 계산 다른 방식으로 구현 결과가 의도대로 나오지 않습니다.
숙제에서 피벗테이블에서 각 주차별 전환율을 직전주차 전환율로 나누는 방식을 모범답안으로 제시해주셨는데요,
저같은 경우 피벗테이블 만들기 전, 완주수강생 총인원 계산 단계 다음에서 이를 계산하려고 했습니다.
아래 이미지에서 'comparedto_previous_class'컬럼을 추가해주는 방식으로 코드를 짰는데요,
보시면 똑같은 숫자로 계산이 되는데 제가 짠 코드에 어떤 문제가 있어서 그런건지 봐주실 수 있으실까요?

작성한 코드 및 에러 메세지
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 = ',')
print(type(sparta_data['created_at'][0]))
#1-1. 날짜타입 변환
format = '%Y.%m.%d'
sparta_data['start_time'] = pd.to_datetime(sparta_data['created_at'],
format=format,
infer_datetime_format=True)
#1-2. start_time > 주차 정보 반환
sparta_data['start_week']= sparta_data['start_time'].dt.isocalendar().week
#처음 수강 시작한 주 범위 확인하기
category_range = set(sparta_data['start_week'])
category_range
#1-3. progress_rate > 커리큘럼 번호 반환
#a. 범주화할 데이터 리스트로 만들기
progress_rate = list(sparta_data['progress_rate'])
progress_rate
#b. 범주를 구분하는 기준 및 라벨(수강 주차) 만들기
bins = [0,4.11,26.03,41.10,61.64,80.82,100]
labels = [0,1,2,3,4,5]
#c. 범주화하기: 범주화에 사용하는 함수 pd.cut
cuts = pd.cut(progress_rate,
bins,
right=True,
include_lowest=True,
labels=labels)
cuts
#d. 범주화 결과물을 테이블로 변경하기
cuts = pd.DataFrame(cuts)
cuts.tail()
#e. 기존테이블에 현재 수강주차 테이블 합치기
sparta_data = pd.concat([sparta_data, cuts],
axis=1,
join='inner')
sparta_data.head()
#f. 테이블 컬럼 이름 변경하기
sparta_data.columns = ['created_at','user_id','name','progress_rate','start_time','start_week','class_week']
sparta_data.head()
#2-1. 개강반주차별/현재수강주차별 테이블 구성
grouping = sparta_data.groupby(['start_week','class_week'])
grouping.head()
cohort_data = grouping['user_id'].apply(pd.Series.nunique)
cohort_data = pd.DataFrame(cohort_data)
cohort_data.head(20)
#2-2. 완주한 수강생 총인원 계산
s=31
for i in range(6):
for c in range(5, 0, -1):
cohort_data.at[(s,c-1),'user_id'] = cohort_data.at[(s,c-1),'user_id'] + cohort_data.at[(s,c),'user_id']
s += 1
#★숙제: 직전주차를 분모로: (현재커리큘럼의 완주수강생수)/(직전커리큘럼의 완주수강생수)
s=31
for i in range(6):
for c in range(5, 0, -1):
if i == 0:
cohort_data['comparedto_previous_class'] = (cohort_data.at[(s,c),'user_id'])/(cohort_data.at[(s,c),'user_id'])
else:
cohort_data['comparedto_previous_class'] = (cohort_data.at[(s,c),'user_id'])/(cohort_data.at[(s,c-1),'user_id'])
s += 1
cohort_data
Tip 1) </> 아이콘을 눌러 코드박스를 만들어 보세요.
Tip 2) Ctrl+A(맥의 경우 Command+A) 단축키로 코드를 한 번에 선택할 수 있어요!
