[참고 게시글]
[IT 교육/데이터 분석] - 데이터분석 | 가장 적절한 고객 관리 타이밍 | 제품 수요가 많은 지역 찾기
>> 위 게시글과 이어지는 실습
0. 가설 설정
▶ 가설: 수강생들의 수업 완료 시간대는 주로 한가한 주말일 것이다.
즉문즉답이란, 튜터님들이 수강생들의 질문에 실시간으로 답변해주는 시스템
우리는 수강생들의 즉문즉답 수요가 많은 요일을 알아내서 튜터님들의 수를 요일에 따라 적절히 배치하고 싶음. 수강생들은 한 강의를 다 들은 뒤에 질문을 하러 옴. 수강생들의 수강 완료 시점을 아는 것이 중요!
1. 분석할 데이터 가져오기
▶ 라이브러리 가져오기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
▶ done_detail 데이터 읽어오기
ask_data = pd.read_table('/content/done_detail.csv', sep = ',')
- lecture_id : 강의 id
- done_date : 수강 완료일
- user_id : 수강생 id
2. 데이터 전처리하기
2-1) done_date(수강 완료일)을 날짜 타입으로 포맷 정해서 바꿔주기
▶done_date(수강 완료일)의 데이터 타입 알아보기
: str(문자형) 데이터임
print(type(ask_data['done_date'][0]))
▶ 포맷 지정해주기
: pd.to_datetime(바꿀 데이터, format = )
format0 = '%Y-%m-%dT%H:%M:%S.%f'
ask_data['done_date_time'] = pd.to_datetime(ask_data['done_date'], format = format0)
▶ done_date_time (수강 완료 시간)의 데이터 타입 알아보기
: timestamps(날짜시간) 타입으로 바뀜
print(type(ask_data['done_date_time'][0]))
2-2) done_date_time (수강 완료 시간)에서 요일 뽑아내기
▶ done_date_time_weekday (수강 완료 요일) 만들기
: .dt.day_name()으로 시간에서 요일 뽑아내기
ask_data['done_date_time_weekday'] = ask_data['done_date_time'].dt.day_name()
[참고 게시글]
https://steadiness-193.tistory.com/227
3. 데이터 분석하기
3-1) 요일 별 접속한 수강생 수 구하기
▶ 요일 별 수강생 수 구하기
: group_by로 done_date_time_weekday (수강 완료 요일)을 묶고, 그 요일에 해당하는 user_id (수강생 id) 세주기
weekdata = ask_data.groupby(ask_data['done_date_time_weekday'])['user_id'].count()
▶ 원하는 순서대로 모아서 출력하기
: week로 agg(모아서) weekdata라는 변수에 다시 담아주기
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekdata = weekdata.agg(week)
>> 뒤죽박죽이던 목록이 week 순서대로 정렬됨
3-2) 시간 별 접속한 수강생 수 구하기
▶ done_date_time (수강 완료 시간)에서 hour 뽑아내기
: .dt.hour
ask_data['done_date_time_hour'] = ask_data['done_date_time'].dt.hour
▶ 시간 별 수강생 수 구하기
: group_by로 done_date_time_hour (수강 완료 시간)을 묶고, 그 시간에 해당하는 user_id (수강생 id) 세주기
: .sort_index(ascending = ) 으로 인덱스 값 정렬해주기
→ ascending을 안 적어주면 기본값인 오름차순으로 정렬됨.
→ ascending = False 는 내림차순 정렬
hourdata = ask_data.groupby('done_date_time_hour')['user_id'].count()
hourdata = hourdata.sort_index(ascending = False)
4. 데이터 시각화하기
4-1) 막대 그래프 그리기
▶ 요일 별 수강 완료 수강생 수 그래프
#그래프 사이즈
plt.figure(figsize=(10,5))
#그래프 x축 y축
plt.bar(weekdata.index, weekdata)
#그래프 명
plt.title('요일별 수강 완료 수강생 수')
#그래프 x축 레이블
plt.xlabel('요일')
#그래프 y축 레이블
plt.ylabel('수강생(명)')
#x축 레이블을 90도로 변환
plt.xticks(rotation=90)
#그래프 출력
plt.show()
>> 요일 별 수강 완료 수강생 수는 화요일이 제일 많고, 그 다음은 일요일, 월요일 순임
4-2) 히트맵 그리기
▶ 요일 별, 시간(hour) 별 피벗 테이블 만들기
- values : 열에 들어 가는 부분
- index : 행에 들어가는 부분
- aggfunc : 데이터 축약시 사용할 함수
ask_data_pivot_table = pd.pivot_table(ask_data, values='user_id',
index=['done_date_time_weekday'],
columns=['done_date_time_hour'],
aggfunc="count").agg(weeks)
ask_data_pivot_table
▶ 히트맵 그리기
#그래프 사이즈 변경
plt.figure(figsize=(14,5))
#pcolor를 이용하여 heatmap 그리기
plt.pcolor(ask_data_pivot_table)
#히트맵에서의 x축 # np.arage(시작, 끝, 간격)
plt.xticks(np.arange(0.5, len(ask_data_pivot_table.columns), 1), ask_data_pivot_table.columns)
#히트맵에서의 y축
plt.yticks(np.arange(0.5, len(ask_data_pivot_table.index), 1), ask_data_pivot_table.index)
#그래프 명
plt.title('요일별 종료 시간 히트맵')
#그래프 x축 레이블
plt.xlabel('시간')
#그래프 y축 레이블
plt.ylabel('요일')
#plt.colorbar() 명령어를 추가하면 그래프 옆에 숫자별 색상값을 나타내는 컬러바를 보여 줍니다
plt.colorbar()
plt.show()
>> 화요일 18시가 수강생들이 가장 많이 수강 완료하는 시점임
>> 일요일 13시가 그 다음 많은 수강 완료 시점이고, 그리고 일요일 16시, 20-21시, 월요일 20~22시 순으로 이어짐
5. 최종 결론
▶ 결론
수강 완료 수강생 수가 제일 많은 요일은 화요일, 그 다음이 일요일, 월요일임
화요일의 경우 18시 경이 제일 수강 완료 수강생이 많았고, 일요일은 13시 경에 많았음
따라서, 결론적으로 튜터님들을 추가 배치하여야 하는 날은
수강생들이 수강을 많이 완료한 시점인 화요일의 다음 날인 수요일일 것으로 봄
'데이터분석 과정 > 데이터 분석' 카테고리의 다른 글
데이터분석 실습 | 주차 간 전환율로 리텐션 테이블, 히트맵 만들기 (1) | 2024.01.22 |
---|---|
데이터분석 실습 | 할인율이 높을수록 결제전환율이 올라갈까? (1) | 2024.01.22 |
데이터분석 실습 | 당뇨병에 가장 영향을 미치는 요인은 무엇일까? (0) | 2024.01.21 |
데이터분석 | 완주율을 높이는 요인 | 적절한 타겟 설정 | 프로덕트 개선 (1) | 2024.01.15 |
데이터분석 | 광고 효율이 나지 않는 매체 찾기 | 패키지 상품 기획하기 (0) | 2024.01.15 |
댓글