2022. 1. 24. 18:10ㆍ개발의 흔적/데이터분석
# 강의 수강생들 대상으로 즉문즉답 서비스 제공할 시, 가장 적절한 시간을 분석하는 의의
# 강의 수강데이터에서 수강생들이 가장 많이 강의를 끝내는 시간으로 결정

#위의 done_date 가 현재 string type -> 이를 토대로 각 년월일시분초를 pandas library를 이용해 나눠줄 것!
form = '%Y-%m-%dT%H:%M:%S.%f' #위 done_date의 형태에 맞게 각 part 지정
enroll['done_date_time'] = pan.to_datetime(enroll['done_date'], format = form)
enroll

#위 done_date_time 칼럼은 각 년월일시분초가 각 항목에 맞게 인식된다
#이제 각 요일당 강의를 끝마치는 학생수 / 각 시간 당 강의를 끝마치는 학생수를 count 할 것!
enroll['done_day_name'] = enroll['done_date_time'].dt.day_name() #done_date_time의 년월일로 day_name (요 일)을 계산해줌!
enroll['done_hour'] = enroll['done_date_time'].dt.hour #done_date_time의 시간만 불러와줌
enroll

weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekdata = enroll.groupby('done_date_time_weekday')['user_id'].count().agg(weeks)
weekdata
#요일에 순차가 없으므로 weeks라는 list로 order주고 weekdate로 요일별 수강끝낸 학생(done_data) count 해준 가공자료 만듦

hourdata = enroll.groupby('done_date_time_hour')['user_id'].count().sort_index()

hourdata
#hourdata도 위와 마찬가지로 만들어줌 (시간은 0부터 23까지 int로 저장된거니까 sort_index 해주면 정렬됨!)
#목표 과제 전에 월요일/화요일 시간별 수강자수 한번 비교해보자!
enroll_monday = enroll[enroll['done_day_name']=='Monday']
enroll_monday_final = enroll_monday.groupby('done_hour')['user_id'].count().sort_index()
enroll_monday_final
enroll_tuesday = enroll[enroll['done_day_name']=='Tuesday']
enroll_tuesday_final = enroll_tuesday.groupby('done_hour')['user_id'].count().sort_index()
enroll_tuesday_final
mt = plt.figure(figsize=(20,10))
plt.plot(enroll_monday_final.index, enroll_monday_final, label='Monday')
plt.plot(enroll_tuesday_final.index, enroll_tuesday_final, label='Tuesday')
plt.title('Monday vs Tuesday Hour students finish their lectures', size = 20)
plt.xlabel('hour')
plt.ylabel('students')
plt.xticks(np.arange(24)) #xticks에서 numpy arrange(size)로 범례지정 -> 이를 통해 x축이 1에서 23까지 1씩 증가 하며 표시됨
plt.legend() #위에 지정해준 각 plot의 label을 표시해줌
plt.show()
mt.savefig('./week03_task2.png')

#이제 찐 과제로 넘어가보자
#위의 weekdata 와 hourdata를 둘다 표시해야됨! how?
# x축에 (월~일) y축에 (0~23)들어가면 각 요일/시간에 맞는 학생수 어떻게 표시?
# -> 3차원 graph그려야지! = z축을 heatmap으로 표시하면 가시적으로 표현가능!
#일단 weekdata 와 hourdata 묵자!
#pivot_table 등장!
enroll_pivot_table= pan.pivot_table(enroll, values='user_id', aggfunc = 'count',
index=['done_date_time_weekday'], columns = ['done_date_time_hour']).agg(weeks)
#pivot_table( data이름, values = '값 넣을 column' , aggfunc = values를 할 연산, index= row, colunms = columns)
# 월화수목금토일 list대로 정렬
enroll_pivot_table

이제 table을 matplotlib 을 이용해 히트맵으로 시각화하자!
heatmap = plt.figure(figsize = (14, 5))
plt.pcolor(enroll_pivot_table) #heatmap 함수
plt.title('요일별 종료 시간 히트맵')
plt.xlabel('시간')
plt.ylabel('요일')
plt.xticks(np.arange(0.5, len(enroll_pivot_table.columns), 1), enroll_pivot_table.columns) #위 그래프 xticks에 나 타 날 위치 지정
plt.yticks(np.arange(0.5, len(enroll_pivot_table.index), 1), enroll_pivot_table.index)
plt.colorbar() # heatmap에 나타나는 color가 무슨의미인지 알려주는 칼라바
plt.show()
heatmap.savefig('./heatmap.png')

#이로써 화요일 18시경이 수강생들이 강의를 가장 많이 하는 완료하는 시간대이므로
# 화요일 19시경에 즉문즉답 시간을 제공하는 것이 적절하다고 분석 할 수 있다!
'개발의 흔적 > 데이터분석' 카테고리의 다른 글
| #04_02 [python] 주식 데이터 간 연관성 시각화 하기 (seaborn ,corr) (0) | 2022.01.31 |
|---|---|
| #04_01 [python] html, pandas_datareader로 주식 데이터 시각화 하기 (0) | 2022.01.28 |
| #03_02 [python] WorldCloud (0) | 2022.01.23 |
| #03_01 [python] DataFrame (0) | 2022.01.21 |
| #01_2 [python] pandas & matplotlib 을 이용한 데이터 가공 / 시각화 (0) | 2022.01.21 |