커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
5주차 숙제 '(각 주차별 완주수강생수)/(직전주차 완주수강생수)' 나누는 계산 다른 방식으로 구현 결과
undefined주차
북마크
정*아
댓글
12
추천
0
조회수
23
조회수
23
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


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) 단축키로 코드를 한 번에 선택할 수 있어요!




취소
 공유
취소
댓글 0
댓글 알림
나의얼굴