Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

나의 기록

[Python] 03 가장 적절한 고객 관리 타이밍은?_ 분석 및 시각화(바그래프, 라인 그래프, 히트맵 만들기 본문

개발일지/Python

[Python] 03 가장 적절한 고객 관리 타이밍은?_ 분석 및 시각화(바그래프, 라인 그래프, 히트맵 만들기

리베린 2024. 1. 17. 20:39
import pandas as pd
sparta_data = pd.read_table('/content/access_detail (1).csv',sep=',')

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

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)

#[날짜 컬럼].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

 

이전 것 이어서 분석 및 시각화 하기 

 

 

1. matplotlib, numpy 사용 선언하기

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도로 변환
plt.xticks(rotation=90)

#그래프 출력
plt.show()

 

 

2. 시간 별 접속 하는 수강생 수의 라인 그래프 그리기

#그래프 사이즈 변경
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()

 

 

 

* np.arange() : 괄호에 명시된 간격으로 배열을 생성

 

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

 

#피벗테이블 만들기

#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

 

* values는 user_id의 갯수를 보겠다. '행'에 들어가는 부분은 weekdays

'열'에 들어가는 부분은 hours. 각 행과 열이 만날 때마다 user_id를 보겠다. 

aggfunc = user_id들이 모이면 갯수를 세기 

 

- aggfunc 사실 이해가 안 감...

 

#그래프 사이즈 변경
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()

 

 

* np.arrange() 이해하기 

=> ex) np.arrange(1, 100, 3) : 1부터 100까지 숫자를 출력할건데 3칸씩 이동시켜줘. 

plt.xticks(np.arange(0.5, len(sparta_data_pivot_table.columns), 1), sparta_data_pivot_table.columns)

=> 0.5부터 ' sparta_data_pivot_table.columns' 길이만큼 숫자를 출력할건데 1칸씩 이동시켜줘.