2021. 7. 17. 17:01ㆍSoft_Ware/Python
오늘은 필자가 수강중인 코딩클럽에서 수강자들이 왜 강의를 수강 도중 포기하는가 그리고 어떤 부분이 문제인가를 파악하기 위해서 강의에 따른 수강완료 수의 합계 그리고 요일에 따른 수강완료 수의 합계에 대한 데이터를 추출하였다.
여느때와 같이 Pandas와 Matplotlib을 사용하였다.
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Malgun Gothic'
enroll = pd.read_csv('./data/enrolleds_detail.csv')
enroll_detail = enroll.groupby('lecture_id')['user_id'].count()
lectures=pd.read_csv('./data/lectures.csv')
lecture_count = pd.DataFrame(enroll_detail)
lecture_count = lecture_count.reset_index()
lecture_count = lecture_count.rename(columns={'user_id' : 'count'})
lectures = lectures.set_index('lecture_id')
full_lecture = lecture_count.join(lectures, on= 'lecture_id')
plt.figure(figsize= (22,5))
plt.bar(full_lecture['title'], full_lecture['count'])
plt.title('강의에 따른 수강완료 수의 합계')
plt.xlabel('강의 제목')
plt.xticks(rotation = -90)
plt.show()
지난 블로그에서 소개했던 코드들과 거의 유사하다.
여기서 눈에 띄는것은
lecture_count = lecture_count.rename(columns = {'user_id' : 'count'} 인데,
이는 lecture_count 데이터 프레임의 user_id 칼럼을 count로 바꾸겠다는 의미이다.
결과적으로 위와 같은 그래프가 출력되고 '웹개발 3주차 오늘 배울 것'이라는 강의에서 많은 수강생들이 수강완료하지 못하는 모습을 보인다.
다음으로 요일별 수강 완료 수강생 수를 시각화 해보았다.
sparta_data = pd.read_csv('./data/enrolleds_detail.csv')
format = '%Y-%m-%dT%H:%M:%S.%f'
sparta_data['done_date_time'] = pd.to_datetime(sparta_data['done_date'], format = format)
sparta_data['done_date_time_weekday'] = sparta_data['done_date_time'].dt.day_name()
weekdata = sparta_data.groupby('done_date_time_weekday')['user_id'].count()
weeks = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
weekdata = weekdata.agg(weeks)
plt.figure(figsize=(8,5))
plt.bar(weekdata.index, weekdata)
plt.title('요일별 수강 완료 수강생 수')
plt.xlabel('요일')
plt.ylabel('수강생(명)')
plt.xticks(rotation = 45)
plt.show()
크게 살펴볼 것은
- format
- pd.to_datetime(sparta_data['done_date'], format = format)
- dt.day_name()
- weekdata.agg(weeks)
네가지로 format부터 살펴보면,
format에 '%Y-%m-%dT%H:%M:%S.%f'은 년월일 시분초.밀리초를 나타낸다
%Y :년도
#m :달
%D :일
%H :시간
%M :분
%S :초
%f :밀리 초
여기서 중간에 T은 Tab을 의미하며 한탭을 띄운다는 의미이다.
두번째로 pd.to_datetime(sparta_data['done_date'], format = format)는
데이터 프레임의 열을 날짜 데이터 타입으로 변환하는 메소드이다.
즉, 데이터 타입이 int64 --> datetime64 인 것이다.
dt.day_name은 날짜 데이터 타입으로 변환한 데이터를 요일로 출력한다.
weekdata.agg(weeks)는 weekdata를 weeks의 방식으로 정렬한다.
결과적으로 위와 같이 출력된다.
위와 같은 방식으로 시간 별 수강 완료 수강생 수를 hour_data에 그룹객체로 저장하고 요일별 종류 시간을 히트맵 형식으로 저장하는 실습을 하였다.
히트맵은 숫자가 많은 곳에 눈에 띄도록 맵핑하는 형식이다.
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
sparta_data_pivot_table = pd.pivot_table(sparta_data, values = 'user_id', aggfunc='count',
index = ['done_date_time_weekday'],
columns = ['done_date_time_hour']).agg(weeks)
plt.figure(figsize=(14,5))
plt.pcolor(sparta_data_pivot_table)
plt.title('요일별 종료 시간 히트맵')
plt.xlabel('시간')
plt.ylabel('요일')
plt.xticks(np.arange(0.5,len(sparta_data_pivot_table.columns),1), sparta_data_pivot_table.columns)
plt.yticks(np.arange(0.5,len(sparta_data_pivot_table.index),1), sparta_data_pivot_table.index)
plt.colorbar()
plt.show()
데이터 재구조화를 하는 함수로 aggfunc는 데이터 축약시 사용될 함수이다.mean, sum, count 등이 사용된다.
- numpy.arange(Start, Stop, Step)
Start를 시작으로 Step간격으로 Stop까지 반환하는 함수
결과는 다음과 같고 화요일 18시 부근에 수강완료 시간이 가장 많은 것을 확인할 수 있다.
'Soft_Ware > Python' 카테고리의 다른 글
Python 데이터 분석(4) (0) | 2021.08.02 |
---|---|
Python 데이터 분석(2) (0) | 2021.07.17 |
Python 데이터분석(1) (0) | 2021.07.05 |
Python 기초 문법 (0) | 2021.07.03 |