내일배움캠프_QAQC 트랙 1기/강의 요약

[내일배움캠프] 데이터 분석 종합반 3주차

hyewonnnn 2024. 12. 19. 14:08

[ 수업 목표 ]

  1. 문제 해결을 위해 가설을 세울 수 있다
  2. 가설을 데이터 기반으로 검증할 수 있다
  3. 그래프를 그려 인사이트를 쉽게 찾을 수 있다
  4. 분석한 데이터 결과를 기반으로 의사 결정을 할 수 있다

[ 데이터 분석 종합반 커리큘럼 ]

 

[ 주제 ]

게임 종합반 구매 전환률을 높여라!

[ 참고 ] 데이터 분석 순서

 1. 문제 정의 및 가설 설정하기
 2. 데이터 분석 기본 세팅하기
 3. 데이터 분석하기 (전처리하기)
 4. 분석 결과 시각화하기
 5. 최종 결론 내리기

 

[ 이야기 1 ] 

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

-> 1) 문제 정의 및 가설 설정하기

 

2) 데이터 분석 기본 세팅하기

  - pandas 사용 선언하기

      : import pandas as pd

  -  데이터 가져오기

      : sparta_data = pd.read_table('access_detail.csv', sep=',')

  - 데이터 살펴보기

      : sparta_data.()

  - 분석에 필요한 데이터 가공하기

 

3) 데이터 분석하기 (데이터 전처리)

  - 필요한 데이터 확인하기

      : "어떤" 수강생이 "언제" 주로 접속하는지에 대해 알아보아야 하니,

       접속 시간유저 ID 만 있으면 된다!

  - 시간 데이터 전처리

      : step 1) access_date의 데이터 종류 확인

                # 파이썬의 type() 함수를 쓰면, 데이터의 종류를 확인할 수 있어요

                 print(type(sparta_data['access_date'][1]))

                # sparta_data 정보에서 access_date 열에서 데이터 첫 번째 부분만 확인

        step 2)원하는 시간의 데이터 형태로 변경

                 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)

                 # to_datetime() : 괄호 안, 해당 열의 데이터를 날짜와 시간으로 변경해주는 함수

        step 3) 요일 추가하기

                 # [날짜컬럼].dt.day_name 으로 해당 날짜의 요일을 가져올 수 있어요

                 sparta_data['access_date_time_weekday'] = sparta_data['access_date_time'].dt.day_name()

                 sparta_data.tail(5)

        step 4) 요일별 접속한 수강생 수 구하기

                 # groupby('컬럼명') 를 사용하면 데이터를 특정 기준으로 그룹화하여 처리할 수 있습니다

                 # count() 을 하면 해당 데이터의 개수를 세고

                 # agg("변수") 를 이용하여 ~하면 변수 안 데이터별 합계를 구할 수 있습니다

                weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

                weekdata = sparta_data.groupby('access_date_time_weekday')['user_id'].count()

                weekdata 

                # 요일 순서대로 정렬

                weekdata = weekdata.agg(weeks)

                weekdata

        step 5) 시간별 접속한 수강생 수 전처리하기

               # [날짜컬럼].dt.hour 을 사용하면 해당 날짜의 시간 값을 가져올 수 있어요

               sparta_data['access_date_time_hour'] = sparta_data['access_date_time'].dt.hour

               hourdata = sparta_data.groupby('access_date_time_hour')['user_id'].count()

               # sort_index() 는 해당 데이터를 오름차순으로 정렬해주는 기능을 합니다

               # 만약 내림차순 하고 싶다면, sort_index(ascending=False) 으로 설정할 수 있다

               hourdata = hourdata.sort_index

               hourdata

 

4) 분석 및 시각화

  - matplotlip, numpy 사용 선언하기

      : import matplotlib.pyplot as plt

        import numpy as np

        # nump 는 데이터 연산을 빠르고 쉽게 할 수 있도록 도와주는 라이브러리

  - 요일별 수강생 수 바 그래프 그리기

      : # 그래프 사이즈

        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.bar(hourdata.index, hourdata)

        # 그래프 명

        plt.title('시간별 수강 완료 사용자 수')

        # 그래프 x축 레이블

        plt.xlabel('시간')

        # 그래프 y축 레이블

        plt.ylabel('사용자(명)')

        # x축 눈금 표시하기

        plt.xticks(np.arange(24)

        # 그래프 출력

        plt.show()

 

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

     : 히트맵(Heatmap) 이란?

      X축과 Y축을 특정하게 제한된 변수(예를 들어, 지역 성별 등)로 하고, 균일한 블록으로 나눠 각 칸에 수치형 변수를 채우는 방식

      데이터 값이 높거나 그 양이 많은 경우 진한 색을, 낮거나 적은 경우 연한 색을 사용하여 시각적 패턴을 만들어 냅니다

히트맵 예시

     : # 피벗테이블 만들기

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

 

5) 결론

  - 수강생들의 접속 일자 및 시간을 살펴보면, 일주일 중 "화요일" 그리고 "일요일"에 수강 이 많이 이뤄졌고,

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

  - 일별 접속 시간의 추이를 살펴보면, 저녁시간쯤인 18시대에 접속이 폭발적으로 많았고, 밤 21시쯤에 감소하는 추세를 보였습니다.

  - 요일별, 시간대별로 살펴보니 역시 화요일 18시에 가장 많은 접속자가 있다는 것을 확인할 수 있었습니다.

 

  - 그리하여,

  고객 관리 문자는

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

  가장 수강을 적게 한 금요일, 수요일 오전 시간에 동기부여 문자를 보내는 것은 어떨까요?