
* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
안녕하세요 튜터님,
피벗 테이블을 만들었을 때 강의 영상과는 다르게 분포값이 고르지 않아요.
챕쳐 이미지를 보시면 붉은 색으로 표시한 것이 제가 만든 피벗테이블이고 파란 색으로 표시한 것이 강의 영상이에요.
제가 만든 것은 값이 31주차에 모두 몰려있어요.
어떤 부분을 수정해야할지 확인해주시면 감사하겠습니다!

#라이브러리 불러오기
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
plt.rc('font', family='NanumBarunGothic')
sparta_data=pd.read_csv("/content/cohort_data.csv")
sparta_data.head()
format='%Y. %m. %d'
sparta_data['start_time'] = pd.to_datetime(sparta_data['created_at'], format=format)
sparta_data.tail()
#수강 시작 주 구하기
sparta_data['start_week']= sparta_data['start_time'].dt.isocalendar().week
sparta_data.tail()
#이전에 배웠듯이 set()은 set안의 데이터는 순서가 정해져있지 않고, 중복되지 않는 고유한 요소를 가져옵니다!
category_range = set(sparta_data['start_week'])
category_range
progress_rate = list(sparta_data['progress_rate'])
progress_rate
#범주를 구분하는 기준 bins 처음(0)과 끝(100) 잊지 말고 기입 해주세요!
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)
cuts.head()
#concat() 함수를 이용하여, sparta_data 테이블과, cuts 테이블 병합 할수 있습니다 :)
sparta_data = pd.concat([sparta_data,cuts],axis=1, join='inner')
sparta_data.head()
#그래서, 귀찮더라도, 우리가 원하는 컬럼의 이름을 다 작성해 줍시다!
sparta_data.columns=['created_at','user_id','name','progress_rate','start_time','start_week',"week"]
sparta_data.head()
#기종 테이블을 start_week과 week로 묶어주기
grouping=sparta_data.groupby(['start_week','week'])
grouping.head()
cohort_data = grouping['user_id'].apply(pd.Series.nunique)
cohort_data = pd.DataFrame(cohort_data)
cohort_data.head(20)
#수강주차별 총 인원 구하기
#첫 주가 31주이므로 변수 만들기
f=31
#처음 수강 시작한 주의 범위가 {31,32,33,34,35,36}이니 range6
for i in range(6):
#5주차 강의가 마지막이고 0주차까지이니 시작은 5에서 시작해 1씩 0까지 감소 시킬 수 있음
for j in range(5,0,-1):
cohort_data.at[(f,j-1), 'user_id']=int(cohort_data.at[(f,j),'user_id'])+int(cohort_data.at[(f,j-1),'user_id']) + int(cohort_data.at[(f,j-1),'user_id'])
#주차는(31부터 32 33..) 1씩 늘어나죠?
#주차는(31부터 32,33..) 1 씩 늘어나므로
f=f+1
cohort_data = cohort_data.reset_index()
cohort_data.head()
cohort_counts = cohort_data.pivot(index="start_week",
columns="week",
values="user_id")
cohort_counts
