PM 트랙_강의/데이터 분석
파이썬(Python) 실습하기 - 수강생들이 강의 듣는 시간과 요일 분석
은하_carol
2025. 1. 8. 20:46
데이터 전처리
1. 라이브러리 사용 선언
import pandas as pd
2. 파일 읽어오기 및 확인
- 파일 우측 ⋮ 클릭 후 [경로 복사]를 선택하면 파일 경로가 복사되어 사용 가능
sparta_date = pd.read_table('/content/access_detail.csv', sep = ',')
sparta_date.head()
- 컬럼 정보
- lecture_id: 수강 강의 Id
- access_date: 접속 시간 날짜 및 시간
- user_id: 유저 Id
3. 데이터 전처리
- 현재 데이터 분석에 필요한 정보는 user_id(유저 Id)와 access_date(접속 시각 날짜 및 시간)
- type() 함수는 데이터 타입을 확인하는 함수
# 작성 코드
print(type(sparta_data["access_date"][1]))
# 실행 결과
<class 'str'>
- 문자열을 날짜 형태로 변경 시 to_datetime() 함수 사용
- 날짜 형식으로 변경된 데이터가 들어갈 컬럼명 지정
sparta_data['access_date_time'] = pd.to_datetime(sparta_data['access_date'], format = 'mixed')
- 날짜 형식의 데이터로 구성된 추가 컬럼의 데이터 타입 확인
# 작성 코드
print(type(sparta_data['access_date_time'][0]))
# 실행 결과
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
- dt.day_name() 함수는 날짜의 요일 확인 가능
sparta_data['access_date_time_weekday'] = sparta_data['access_date_time'].dt.day_name()
sparta_data.tail(5)
- dt.hour는 시간 확인 가능 (괄호 작성하지 않음)
sparta_data['access_date_time_hour'] = sparta_data['access_date_time'].dt.hour
sparta_data.tail(5)
4. 데이터 그룹화하여 확인
- 요일로 그룹화하여 각 요일별 접속 수강생 수 구하기
weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekdata = sparta_data.groupby('access_date_time_weekday')['user_id'].count()
weekdata
- 시간으로 그룹화하여 시간별 접속 수강생 수 구하기 (단, 시간 오름차순 정렬)
- sort_index() 함수는 순서 정렬 시 사용 (기본 값 오름차순, 내림차순 시 sort_index(ascending = False) 사용)
hourdata = sparta_data.groupby('access_date_time_hour')['user_id'].count()
hourdata = hourdata.sort_index()
hourdata
데이터 시각화
0. 한글 깨짐 현상 해결
- matplotlib을 활용하여 데이터 시각화 시 한글 표현할 때 깨짐 현상이 발생할 수 있다.
- 해결하는 방법은 간단하다. 아래 코드를 실행해 주면 끝이다.
!pip install koreanize-matplotlib
1. 라이브러리 사용 선언
import matplotlib.pyplot as plt
import numpy as np
2. 그래프 생성
- 요일별 수강 완료 수강생 수
# 그래프 사이즈
plt.figure(figsize = (10, 5))
# 그래프 x축, y축
plt.bar(weekdata.index, weekdata)
# 그래프명
plt.title('요일별 수강 완료 수강생 수')
# 그래프 x축 레이블
plt.xlabel('요일')
# 그래프 y축 레이블
plt.ylabel('수강생(명)')
# x축 레이블을 90도로 변환 (45 입력 시 대각선 방향)
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(숫자)는 0부터 입력한 숫자까지의 나열)
plt.xticks(np.arange(24))
# 그래프 출력
plt.show()
3. 히트맵 생성
- 히트맵(heatmap): 열을 뜻하는 히트(heat)와 지도를 뜻하는 맵(map)을 결합시킨 단어로, 데이터의 값을 컬러로 변환시켜 열 분포 형태로 보여 주어 시각적인 분석을 가능하게 하는 데이터 시각화 기법
- 히트맵 생성 전 피벗 테이블이 필요한데, 이때 pivot_tabel() 함수 사용
- 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
- pcolor() 함수는 히트맵을 그려 주는 함수
- np.arange(시작 숫자, 종료 숫자, 증가분) 함수는 시작 숫자부터 종료 숫자까지 증가분 차이만큼 나열
# 그래프 사이즈 변경
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()
4. 결론
- 일주일 중 "화요일"과 "일요일에 수강생이 가장 많았고, "금요일"과 "수요일"에 가장 적었다.
- 하루 중 18시대에 가장 접속률이 높았고, 21시부터 감소 추세를 보인다.
- 요일별, 시간대별로 확인 결과 화요일 18시에 가장 많은 접속자가 있다는 것을 확인할 수 있다.