내일배움캠프

[본캠프] 데이터기반 QA/QC 부트캠프 3일차

min0jun 2026. 5. 13. 15:06

1. 오늘 학습 목표

- 데이터 분석 집중 훈련하기

 

2. 오늘 학습 한 내용

히트맵으로 데이터 나타내기

  • 데이터 전처리
#시간데이터 전처리 해주기
#1)pandas 버전 업데이트로 인해 fomat 지정 방식이 엄격해졌습니다. 강의 코드 보다 더 정확한 형식 지정이 필요합니다.
format='%Y-%m-%d %H:%M:%S'
sparta_data['access_date_time'] = pd.to_datetime(sparta_data['access_date_time'], format=format, errors='coerce')

#2)fomat을 지정하지 않아도 처리가 되도록 변경 되었습니다.
#따라서 아래 코드도 정상 동작합니다.
#sparta_data['access_date_time'] = pd.to_datetime(sparta_data['access_date_time'], errors='coerce')

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의 리스트에 따라 데이터들을 다시한번 재배열 할수 있어요!

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

 

  • 데이터 시각화
import pandas as pd

#시간데이터 전처리 해주기
#1)pandas 버전 업데이트로 인해 fomat 지정 방식이 엄격해졌습니다. 강의 코드 보다 더 정확한 형식 지정이 필요합니다.
format='%Y-%m-%d %H:%M:%S'
sparta_data['access_date_time'] = pd.to_datetime(sparta_data['access_date_time'], format=format, errors='coerce')

#2)fomat을 지정하지 않아도 처리가 되도록 변경 되었습니다.
#따라서 아래 코드도 정상 동작합니다.
#sparta_data['access_date_time'] = pd.to_datetime(sparta_data['access_date_time'], errors='coerce')

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의 리스트에 따라 데이터들을 다시한번 재배열 할수 있어요!

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.rc('font', family='NanumGothic')
plt.rcParams['axes.unicode_minus'] = False


##요일별 접속하는 수강생 수 라인 그래프
#그래프 사이즈
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()

#피벗테이블 만들기
#columns : 열에 들어 가는 부분
#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()

결과 그래프
결과 히트맵

 

 

 

Tip. 한글이 깨진다면 폰트 문제! 폰트를 다운받고 폰트지정 코드로 오류 해결 가능

 

3. 오늘의 과제 - 최적의 즉문즉답 시간대를 찾아라!

📖 스파르타코딩클럽은

튜터님들이 실시간으로 질문에 답변을 해주는 “즉문즉답”을 운영하고 있습니다.

우리는 수강생의 즉문즉답의 수요가 많은 요일을 알아내서

튜터님의 수를 요일에 따라 적절히 배치하고 싶은데요.

즉문 즉답은 궁금한 점을 튜터님께 질문하고 답을 얻는 시간이기 때문에,

많은 수강생들의 수강이 완료되는 시점을 아는 것이 중요합니다!

팀장님께서

“수강생들의 수업 완료 시간대는 주로 한가한 주말일 것이다” 라는 가설을 세웠습니다.

이 가설을 증명을 해봅시다.
import pandas as pd

sparta_data = pd.read_table('/content/done_detail.csv',sep=',')

format = '%Y-%m-%d %H:%M:%S'
sparta_data['done_date_time'] = pd.to_datetime(sparta_data['done_date'], format=format, errors='coerce')
sparta_data['done_date_time_weekday'] = sparta_data['done_date_time'].dt.day_name()

weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekdata = sparta_data.groupby('done_date_time_weekday')['user_id'].count()
weekdata = weekdata.agg(weeks)
weekdata

#matplotlib 사용 선언하기
import matplotlib.pyplot as plt
plt.rc('font', family='NanumBarunGothic') #한글 깨짐을 방지시켜줘요!

#요일 별 수강완료 수강생 수 라인 그래프 그리기
#그래프 사이즈
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()

결과 그래프

 

 

 

나의 간단 소감

- 날짜 포맷이랑 파일위치 지정안해줘서 오류가 있었고, 몇개 라인이 없어서 오류가 난것도 있었다. 이번 회차는 오류가 많이 떴었는데 팀원분의 도움도 받고 지피티 도움을 받으니 쉽게 해결이 되었다.
아직도 뭐가 뭔지 정확히는 모르겠지만 그래도 이제 대충 느낌은 잡은 것 같다.