커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
5주차 7차시 수업관련 질문입니다.
undefined주차
북마크
이*희
댓글
16
추천
0
조회수
43
조회수
43
답변 완료

다섯가지 정도 질문 사항이 있는데요,

'작성한 코드 및 에러 메시지' 항목에 작성된 코드가 전체 코드이며 부분별 질문사항은 아래와 같습니다.


1.

progress_rate = list(sparta_data['progress_rate'])

위코드를 넣었을때와 넣지 않았을때의 값 차이가 없던데 왜 들어있는지 궁금합니다.


2.

cohort_data = grouping['user_id'].apply(pd.Series.nunique)

cohort_data = pd.DataFrame(cohort_data)

cohort_data.head(5)

코드에서 첫번째 줄 코드에 대해서는 강사님께서 '유저데이터별 유니크한 값으로 코드 데이터를 만들어주겠다.' 라고 설명해주셨는데 코드 이해가 잘 안 돼서

apply(pd.Series.nunique) 코드에 대해서 조금 더 구체적으로 설명해주시면 감사하겠습니다.


3.

cohort_data = cohort_data.reset_index()

cohort_data.head()

코드에서

index를 설정하지 않으면 start_week별 week와 user_id를 확인할 수 없어서 index 코드를 사용하는건가요??


4.

f=31

for i in range(6):

 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'])

 f=f+1

코드에서 두번째 줄의 i 는 이후의 코드에서 사용되지 않던데 어떤 용도인가요??


5.

for i in range(6):

 for j in range(1, 6, 1):

  retention.at[(w, j)] = retention.at[w,j] / retention.at[w,j-1]

 w=w+1


w가 31, j가 1일 때의 값을 구하려면 아래와 같은 코드를 입력해야하는데

retention.at[(31,1)] = retention.at[31,1] / retention.at[31,0]

0번째(31,0)는 있을수가 없는 값이니 첫번째(31,1)와 같은 값으로 나눠줘서 값이 1.0이 나오는건가요??

스파르타 즉문즉답



작성한 코드 및 에러 메세지

#라이브러리 불러오기

import pandas as pd

import seaborn as sns

import matplotlib.pyplot as plt

plt.rc('font', family='NanumBarunGothic')


# 한글깨짐 방지

plt.rc('font', family='NanumBarunGothic')

sparta_data = pd.read_table('파일경로',sep=',')

sparta_data.tail()


#날짜 데이터 타입 변경

format='%Y-%m-%dT%H:%M:%S.%f'

sparta_data['start_time'] = pd.to_datetime(sparta_data['created_at'], format=format,infer_datetime_format=True)

sparta_data.tail()


#시작 week 구하기

sparta_data['start_week']= sparta_data['start_time'].dt.isocalendar().week

sparta_data.tail()


#시작 주 범위 알기

category_range = set(sparta_data['start_week'])

category_range


# 범주화 하기

#번주화할 데이터 

progress_rate = list(sparta_data['progress_rate'])

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)

cuts.tail()



# 표 합치기

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()


#시작주와, 수강 주차별 기준으로 표 grouping 하기

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(10)


#각 주차별 수강한 수강생 총 합 구하기

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_data.head()



cohort_counts = cohort_data.pivot(index="start_week",

                 columns="week",

                 values="user_id")

cohort_counts


# 앞서 만든 피벗 테이블을 retention 변수에 저장하기

retention = cohort_counts

#각 주(week) 별 최초 수강생 수만 가져오기

cohort_sizes = cohort_counts.iloc[:,0]

cohort_sizes.head()


# 최초 수강생 수를 각 데이터에 나눠주기

retention = cohort_counts.divide(cohort_sizes, axis=0)

retention


#각 수치 퍼센트로 변경하기

retention.round(3)*100


#주차별 수강 전환율 구하기

w=31

for i in range(6):

 for j in range(5, 1, -1):

  retention.at[(w,j)] = retention.at[(w,j)]/retention.at[(w,j-1)]

 w=w+1



retention


#주차별 수강 전환율 히트맵 

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()



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