Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

나의 기록

[TIL/Today I Learned] 수강생들이 가장 많이 혹은 가장 적게 듣는 시간과 요일을 데이터 분석으로 찾기 본문

개발일지/TIL

[TIL/Today I Learned] 수강생들이 가장 많이 혹은 가장 적게 듣는 시간과 요일을 데이터 분석으로 찾기

리베린 2023. 12. 22. 19:51

 

 

수강생들이 가장 많이 혹은 가장 적게 듣는 시간과 요일을 데이터 분석으로 찾기

 

[과제] 수강생들이 가장 많이 혹은 가장 적게 듣는 시간과 요일을 데이터 분석으로 찾기

import pandas as pd
#분석할 데이터 불러 오기
sparta_data= pd.read_table('/content/access_detail.csv', sep=',')
#데이터 살펴보기. (head를 통해 상위 데이터 5개 확인 가능)
sparta_data.head()
#파이썬의 type()함수를 쓰면, 데이터의 종류를 확인 할수 있어요 :)
print(type(sparta_data['access_date'][1]))
#sparta_date 정보에서 access_date 열에서 데이터 첫번째 부분만 확인 하면 되겠죠?
# access_date는 날짜 및 시간이 아닌 "문자열"로 나타남
#날짜 원하는 형태로 지정하기
# to_datetime() 은 괄호 안, 해당 열의 데이터를 날짜와 시간 데이터로 변경해줌
format='%Y-%m-%dT%H:%M:%S.%f'
sparta_data['access_date_time'] = pd.to_datetime(sparta_data['access_date'], format=format)
sparta_data.tail(5)
#[날짜 컬럼].dt.day_name 으로 해당 날짜의 요일을 가져 올 수 있음.
sparta_data['access_date_time_weekday'] = sparta_data['access_date_time'].dt.day_name()
sparta_data['access_date_time_hour'] = sparta_data['access_date_time'].dt.hour
sparta_data.tail(5)
weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekdata = sparta_data.groupby('access_date_time_weekday')['user_id'].count()
weekdata = weekdata.agg(weeks)
#week의 리스트에 따라 데이터들을 다시 한 번 재배열 할수 있음.
# [날짜 컬럼].dt.hour 을 사용하면 해당 날짜의 시간 값을 가져 올 수 있음.
# sort_index()는 데이터를 오름차순으로 정렬해줌.
# 내림차순은 sort_index(ascending=False)
hourdata = sparta_data.groupby('access_date_time_hour')['user_id'].count()
hourdata = hourdata.sort_index()
hourdata

이어서 가장 적절한 고객 관리 타이밍은?_ 분석 및 시각화

#matplotlib, numpy 사용 선언
import matplotlib.pyplot as plt
import numpy as np
#그래프 사이즈
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()

그 다음, 시간 별 접속 하는 수강생 수의 라인 그래프 그리기

#그래프 사이즈 변경
plt.figure(figsize=(10,5))
#그래프 x축 y축
plt.plot(hourdata.index, hourdata)
#그래프 명
plt.title('시간별 수강 완료 사용자 수')
#그래프 x축 레이블
plt.xlabel('시간')
#그래프 y축 레이블
plt.ylabel('사용자(명)')
#x축 눈금 표시 하기,np.arange: 괄호에 명시된 간격으로 배열 생성
plt.xticks(np.arange(24))
#그래프 출력
plt.show()

한글 폰트 깨질 때

!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
plt.rc('font', family='NanumBarunGothic')

요일 별 접속 시간 살펴보기 그리고 히트맵으로 나타내기

#피벗테이블 만들기
#values : 열에 들어 가는 부분
#index : 행에 들어가는 부분
#aggfunc : 데이터 축약시 사용할 함수
sparta_data_pivot_table = pd.pivot_table(sparta_data, values='user_id',
index=['access_date_time_weekday'],
columns=['access_date_time_hour'],
aggfunc="count").agg(weeks)
sparta_data_pivot_table

#그래프 사이즈 변경
plt.figure(figsize=(14,5))
#pcolor를 이용하여 heatmap 그리기
plt.pcolor(sparta_data_pivot_table)
#히트맵에서의 x축
plt.xticks(np.arange(0.5, len(sparta_data_pivot_table.columns), 1), sparta_data_pivot_table.columns)
#히트맵에서의 y축
plt.yticks(np.arange(0.5, len(sparta_data_pivot_table.index), 1), sparta_data_pivot_table.index)
#그래프 명
plt.title('요일별 종료 시간 히트맵')
#그래프 x축 레이블
plt.xlabel('시간')
#그래프 y축 레이블
plt.ylabel('요일')
#plt.colorbar() 명령어를 추가하면 그래프 옆에 숫자별 색상값을 나타내는 컬러바를 보여 줍니다
plt.colorbar()
plt.show()


독려 메세지의 가장 적절한 타이밍을 찾기 위해 수강생들의 접속 일자 및 시간을 살펴봄/

먼저 요일을 살펴보자면 아래 보시는 것과 같이,

일주일 중 “화요일” 그리고 "일요일”"에 수강이 많이 이뤄졌고,

“금요일” 과 "수요일"에 수강 하는 인원이 가장 적었습니다.

이어서, 일별 접속 시간의 추이

저녁시간 쯤인 18시대에 접속이 폭발적으로 많았고,

밤 21시쯤에 감소하는 추세

요일 별, 시간대별로도 살펴보았더니 역시

화요일 18시에 가장 많은 접속자가 있다는 것을 확인할 수 있었습니다.

그리하여, 고객 관리 문자는

가장 수강을 많이 한 화요일, 일요일 저녁시간쯤에 독려 문자

가장 수강을 적게 한 금요일, 수요일 오전시간에 동기부여 문자를 보내보는 것이 적절.

# 전체 코드

 

import pandas as pd
sparta_data= pd.read_table('/content/access_detail.csv', sep=',')
sparta_data.head()
print(type(sparta_data['access_date'][1]))
format='%Y-%m-%dT%H:%M:%S.%f'
sparta_data['access_date_time'] = pd.to_datetime(sparta_data['access_date'], format=format)
sparta_data.tail(5)
sparta_data['access_date_time_weekday'] = sparta_data['access_date_time'].dt.day_name()
sparta_data['access_date_time_hour'] = sparta_data['access_date_time'].dt.hour
sparta_data.tail(5)
weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekdata = sparta_data.groupby('access_date_time_weekday')['user_id'].count()
weekdata = weekdata.agg(weeks)
hourdata = sparta_data.groupby('access_date_time_hour')['user_id'].count()
hourdata = hourdata.sort_index()
hourdata
import matplotlib.pyplot as plt
import numpy as np
#그래프 사이즈
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()
#그래프 사이즈 변경
plt.figure(figsize=(10,5))
#그래프 x축 y축
plt.plot(hourdata.index, hourdata)
#그래프 명
plt.title('시간별 수강 완료 사용자 수')
#그래프 x축 레이블
plt.xlabel('시간')
#그래프 y축 레이블
plt.ylabel('사용자(명)')
#x축 눈금 표시 하기
plt.xticks(np.arange(24))
#그래프 출력
plt.show()
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
plt.rc('font', family='NanumBarunGothic')
sparta_data_pivot_table = pd.pivot_table(sparta_data, values='user_id',
index=['access_date_time_weekday'],
columns=['access_date_time_hour'],
aggfunc="count").agg(weeks)
sparta_data_pivot_table
#그래프 사이즈 변경
plt.figure(figsize=(14,5))
#pcolor를 이용하여 heatmap 그리기
plt.pcolor(sparta_data_pivot_table)
#히트맵에서의 x축
plt.xticks(np.arange(0.5, len(sparta_data_pivot_table.columns), 1), sparta_data_pivot_table.columns)
#히트맵에서의 y축
plt.yticks(np.arange(0.5, len(sparta_data_pivot_table.index), 1), sparta_data_pivot_table.index)
#그래프 명
plt.title('요일별 종료 시간 히트맵')
#그래프 x축 레이블
plt.xlabel('시간')
#그래프 y축 레이블
plt.ylabel('요일')
#plt.colorbar() 명령어를 추가하면 그래프 옆에 숫자별 색상값을 나타내는 컬러바를 보여 줍니다
plt.colorbar()
plt.show()

'개발일지 > TIL' 카테고리의 다른 글

[TIL / Today I Learned] 20231227_groupby 질문  (0) 2023.12.27
[TIL/ Today I Learned] 20231226  (1) 2023.12.27
[TIL / Today I Learned] Day3  (0) 2023.12.21
[TIL/Today I Learned] DAY2  (1) 2023.12.20
[TIL / Today I Learned] Day 1  (0) 2023.12.19