세조목

심화프로젝트 7일차(시간별/요일별 사용자수 히트맵)(24.02.12) 본문

데이터 분석 공부/프로젝트

심화프로젝트 7일차(시간별/요일별 사용자수 히트맵)(24.02.12)

세조목 2024. 2. 12. 22:32

시간별/요일별 사용자수 히트맵

1. UNIX타임스탬프를 일반시간으로 변경하고 컬럼으로 추가

visitStartTime_UTC = pd.to_datetime(train_df2['visitStartTime'], unit='s')
train_df2['visitStartTime_UTC'] = visitStartTime_UTC

(좌) 변경 전 / (우) 변경 후

2. 시간 구하기

train_df2['hour'] = train_df2['visitStartTime_UTC'].dt.hour

 

3. 요일 구하기

train_df2['day_of_the_week'] = train_df2['date'].dt.weekday

 

4. 코호트 차트 만들기

grouping = train_df2.groupby(['day_of_the_week', 'hour'])

cohort_data = grouping['fullVisitorId'].apply(pd.Series.nunique)
cohort_data = pd.DataFrame(cohort_data)
cohort_data.head(5)

 

# 인덱스(day_of_the_week)를 컬럼으로 올리기
cohort_data = cohort_data.reset_index()
cohort_data.head()

 

5. 피벗테이블 만들기

cohort_counts = cohort_data.pivot(index='day_of_the_week', columns = 'hour', values = 'fullVisitorId')

 

6. 요일별 총 사용자수 계산해서 피벗 테이블 內 속성값들의 비율 구하기

# 요일별 총 사용자수 계산
weekly_sum = cohort_data.groupby('day_of_the_week')['fullVisitorId'].sum()

# 비율 구하기
retention = cohort_counts.divide(weekly_sum, axis=0)
retention = retention*100

피벗테이블 內 속성값들은 모두 사용자수로

각각의 수치들이 전체에서 차지하는 비중을 확인하기위해

요일별 총 사용자수를 계산하고 그 값으로 피벗테이블 내 값들을 나눠준다.

 

7. 히트맵 그리기

plt.figure(figsize=(20,5))

sns.heatmap(data=retention, annot=True, vmin=0, vmax=6, cmap='OrRd')

plt.title('Hour & Day_of_the_week Cohort Analysis', fontsize=20, pad=30)
plt.xlabel('Hour', fontsize=10, labelpad=10)
plt.ylabel('Day_of_the_week', fontsize=10, labelpad=50, rotation=360)
plt.yticks(rotation=360)
plt.show()