데이터분석 실습 | 최적의 즉문즉답 시간대 찾기

    728x90

     

     

    [참고 게시글]  

    [IT 교육/데이터 분석] - 데이터분석 | 가장 적절한 고객 관리 타이밍 | 제품 수요가 많은 지역 찾기

     

    데이터분석 | 가장 적절한 고객 관리 타이밍 | 제품 수요가 많은 지역 찾기

    0. 가설 설정하기 ▶ 가설1 : 가장 적절한 고객관리 타이밍은? 강의 완주율 개선을 위한 고객관리 메시지를 보낼 최적의 시간대 찾기 온라인 강의를 수강생들이 가장 많이 혹은 가장 적게 듣는 요

    nasena.tistory.com

    >> 위 게시글과 이어지는 실습


    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 = ',')

    ask_data.head()

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

    ask_data.head()

     

    ▶ 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

     

    판다스 - datetime : dt 연산자 활용

    데이터 불러오기 자료형이 datetime인 datetime 컬럼을 만들어 데이터프레임으로 만들어줬다. https://steadiness-193.tistory.com/171 판다스 - to_datetime : format, dt to_datetime 메서드를 사용하면 Date 형식의 자료

    steadiness-193.tistory.com

    ask_data.head()


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

    weekdata

     

    ▶ 원하는 순서대로 모아서 출력하기

    : week로 agg(모아서) weekdata라는 변수에 다시 담아주기

    week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
    weekdata = weekdata.agg(week)

    weekdata

    >> 뒤죽박죽이던 목록이 week 순서대로 정렬됨


    3-2) 시간 별 접속한 수강생 수 구하기

    ▶ done_date_time (수강 완료 시간)에서 hour 뽑아내기

    : .dt.hour

    ask_data['done_date_time_hour'] = ask_data['done_date_time'].dt.hour

    ask_data.head()

     

    ▶ 시간 별 수강생 수 구하기

    : 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시 경에 많았음

    따라서, 결론적으로 튜터님들을 추가 배치하여야 하는 날

    수강생들이 수강을 많이 완료한 시점인 화요일의 다음 날수요일일 것으로 봄

    728x90

    댓글