3주차-3 (명령어 오류 있음)
미션 : 가장 적절한 고객 관리 타이밍은?
sparta_data=pd.read_table('/content/access_detail.csv',sep=',')
필요한 데이터 확인하기
1) sparta_data.head() 로 확인 (access_date, user_id 만 필요함)
lecture_id access_date user_id
8123 5f36558829f38171335a890a 2020-09-03 22:37:33 6da398d852411234
8124 5f36558829f38171335a890a 2020-08-29 11:09:58 6da398d852411235
8125 5f36558829f38171335a890a 2020-09-06 12:25:25 6da398d852411236
8126 5f36558829f38171335a890a 2020-09-07 22:11:20 6da398d852411237
8127 5f36558829f38171335a890a 2020-08-22 21:12:23 6da398d852411238
2) 시간 데이터 전처리 해주기
2-1) print(type(ad["access_date"][0])) 로 접속 시간 데이터가 문자형인지 정수형인지 확인
* <class 'str'> 문자형
2-2) 문자형으로 확인되니 정수형 변경 명령어 입력
format='%Y-%m-%d %H:%M:%S'
sparta_data['access_date_time'] = pd.to_datetime(sparta_data['access_date'], format=format, errors='coerce')
sparta_data.tail(5)
포맷은 이런 형식으로 이루어질거야
악세스 데이트 타임 열을 추가할건데 이건 판다스를 이용한 데이트 타임이야 이 데이트 타임은 악세스 데이트의
폼과 같다 대신 악세스 데이트 형식을 format='%Y-%m-%d %H:%M:%S'으로 바꿀거야
자, 다시 스파르타 데이터 밑 5행 보여줘
lecture_id access_date user_id access_date_time
8123 5f36558829f38171335a890a 2020-09-03 22:37:33 6da398d852411234 2020-09-03 22:37:33
8124 5f36558829f38171335a890a 2020-08-29 11:09:58 6da398d852411235 2020-08-29 11:09:58
8125 5f36558829f38171335a890a 2020-09-06 12:25:25 6da398d852411236 2020-09-06 12:25:25
8126 5f36558829f38171335a890a 2020-09-07 22:11:20 6da398d852411237 2020-09-07 22:11:20
8127 5f36558829f38171335a890a 2020-08-22 21:12:23 6da398d852411238 2020-08-22 21:12:23
* print(type(sparta_data["access_date_time"][0])) 바뀐 내용 정수형인지 문자형인지 알려줘
<class 'str'>에서 <class 'pandas._libs.tslibs.timestamps.Timestamp'> 타임 스탬프 형식으로 바뀜
3) 요일 추가
3-1) sparta_data['access_date_time_weekday'] = sparta_data['access_date_time'].dt.day_name()
sparta_data.tail(5)
접속_날짜_시간_요일 라는 도표를 만들건데 스파르타 데이터 접속_날짜_시간의 도표를 참고해서 요일을 붙일거야
밑 5행을 출력해봐
lecture_id access_date user_id access_date_time access_date_time_weekday
8123 5f36558829f38171335a890a 2020-09-03 22:37:33 6da398d852411234 2020-09-03 22:37:33 Thursday
8124 5f36558829f38171335a890a 2020-08-29 11:09:58 6da398d852411235 2020-08-29 11:09:58 Saturday
8125 5f36558829f38171335a890a 2020-09-06 12:25:25 6da398d852411236 2020-09-06 12:25:25 Sunday
8126 5f36558829f38171335a890a 2020-09-07 22:11:20 6da398d852411237 2020-09-07 22:11:20 Monday
8127 5f36558829f38171335a890a 2020-08-22 21:12:23 6da398d852411238 2020-08-22 21:12:23 Saturday
* sparta_data['access_date_time_hour'] = sparta_data['access_date_time'].dt.hour ~시간을 붙일거야
lecture_id access_date user_id access_date_time access_date_time_weekday access_date_time_hour
8123 5f36558829f38171335a890a 2020-09-03 22:37:33 6da398d852411234 2020-09-03 22:37:33 Thursday 22.0
8124 5f36558829f38171335a890a 2020-08-29 11:09:58 6da398d852411235 2020-08-29 11:09:58 Saturday 11.0
8125 5f36558829f38171335a890a 2020-09-06 12:25:25 6da398d852411236 2020-09-06 12:25:25 Sunday 12.0
8126 5f36558829f38171335a890a 2020-09-07 22:11:20 6da398d852411237 2020-09-07 22:11:20 Monday 22.0
8127 5f36558829f38171335a890a 2020-08-22 21:12:23 6da398d852411238 2020-08-22 21:12:23 Saturday 21.0
4) 요일 별 접속한 수강생 수 구하기
4-1) weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekdata = sparta_data.groupby('access_date_time_weekday')['user_id'].count()
weekdata
월화수목금으로 접속한 유저 수 구해줘
user_id
access_date_time_weekday
Friday 859
Monday 1353
Saturday 925
Sunday 1539
Thursday 937
Tuesday 1624
Wednesday 887
dtype: int64
* weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekdata = sparta_data.groupby('access_date_time_weekday')['user_id'].count()
weekdata = weekdata.agg(weeks)
weekdata
요일별 순서대로 유저 수 구해줘
user_id
Monday 1353
Tuesday 1624
Wednesday 887
Thursday 937
Friday 859
Saturday 925
Sunday 1539
dtype: int64
5) 시간 별 접속한 수강생 수 전처리 하기
5-1) hourdata = sparta_data.groupby('access_date_time_hour')['user_id'].count()
hourdata = hourdata.sort_index()
hourdata
* sort_index 값들을 오름차순 정리 / sort_index(ascending=False)를 입력하면 내림차순 정리
user_id
access_date_time_hour
0.0 342
1.0 197
2.0 144
3.0 123
4.0 65
5.0 50
6.0 62
7.0 84
8.0 126
9.0 216
10.0 297
11.0 279
12.0 258
13.0 361
14.0 387
15.0 477
16.0 523
17.0 471
18.0 1114
19.0 445
20.0 516
21.0 581
22.0 580
23.0 426
dtype: int64
user_id
access_date_time_hour
23.0 426
22.0 580
21.0 581
20.0 516
19.0 445
18.0 1114
17.0 471
16.0 523
15.0 477
14.0 387
13.0 361
12.0 258
11.0 279
10.0 297
9.0 216
8.0 126
7.0 84
6.0 62
5.0 50
4.0 65
3.0 123
2.0 144
1.0 197
0.0 342
dtype: int64
3주차-4
미션 : 가장 적절한 고객 관리 타이밍은?
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()
********여기서 잠깐! 앗! 한글이 깨진다면?
Step 1) 나눔 폰트 설치 하기
⇒ colab 파일을 연 뒤, 첫번 째 cell에 아래 코드를 붙여 넣고 실행 합니다.
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
Step 2) Colab의 런타임을 재시작 합니다.
Step3) matplotlib의 폰트를 Nanum 폰트로 지정합니다.
plt.rc('font', family='NanumBarunGothic')
3) 시간 별 접속 하는 수강생 수의 라인 그래프 그리기
#그래프 사이즈 변경
plt.figure(figsize=(10,5))
#그래프 x축 y축
plt.plot(hourdata.index, hourdata)
* plot 꺾은선
#그래프 명
plt.title('시간별 수강 완료 사용자 수')
#그래프 x축 레이블
plt.xlabel('시간')
#그래프 y축 레이블
plt.ylabel('사용자(명)')
#x축 눈금 표시 하기
plt.xticks(np.arange(24))
* np.arange(24) -> 1~24를 나열해라
#그래프 출력
plt.show()
4) 요일 별 접속 시간 살펴보기 그리고 히트맵으로 나타내기
(1) 히트맵(Heatmap)이란?
x축과 y축을 특정하게 제한된 변수(예를 들어, 지역 성별 등등)로 하고, 균일한 블록으로 나누어
각 칸에 수치형 변수를 채우는 방식
데이터 값이 높거나 그 양이 많은 경우 진한 색을,
낮거나 적은 경우 연한 색을 사용하여 시각적 패턴을 만듦.
ex) 나라 지도 띄워놓고 인구 분포도 만드는데 인구가 밀집된 곳은 빨갛게 표시한 그림
#피벗테이블 만들기
#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
유저 아이디의 갯수를 보겠다
행에 들어가는 내용은
열에 들어가는 내용은
각 행과 열이 만나는 곳에 유저 아이디를 보겠다
그렇게 모인 곳에 갯수를 적어라
access_date_time_hour 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 ... 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0 22.0 23.0
Monday 66 31 30 27 3 5 19 14 28 22 ... 62 55 101 84 68 86 119 117 118 86
Tuesday 51 27 17 12 6 3 6 14 20 26 ... 41 56 68 34 713 56 66 97 92 86
Wednesday 47 19 12 8 10 15 14 3 22 20 ... 34 68 40 68 80 71 56 75 82 52
Thursday 39 30 10 15 14 2 5 11 10 18 ... 46 69 80 60 61 61 70 62 94 65
Friday 72 36 20 9 5 1 5 2 10 34 ... 44 61 57 70 67 51 45 45 47 33
Saturday 31 17 10 22 7 4 4 19 9 51 ... 72 78 66 82 54 26 47 70 52 37
Sunday 36 37 45 30 20 20 9 21 27 45 ... 88 90 111 73 71 94 113 115 95 67
7 rows × 24 columns
#그래프 사이즈 변경
plt.figure(figsize=(14,5))
#pcolor를 이용하여 heatmap 그리기
plt.pcolor(sparta_data_pivot_table)
*플롯을 찍을건데 pcolor-> 히트맵 그리기 위한 함수
#히트맵에서의 x축
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칸씩 이동시켜줘
* np.arange(1,100,3) 1부터 100까지 숫자 출력할건데 3칸씩 이동시켜줘 -> 1,4,7,10,13.....97
* 0.5부터 시작하는것은 격자가 가운데로 오기 위해서임 (까먹으면 강의 자료봐라)
#히트맵에서의 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()
목표 1일 5강 수료 실패
원인
1. 복습하는데 1시간 소요
2. 강의 자료가 올바르지 않아 올바른 자료 찾고 이해하는데 시간 소요
3. 빠른 강의 수강 보단 하나하나 이해, 정리하며 진행하려는 욕심 때문에 짧은 강의 시간임에도 불구하고
수업 밀도를 스스로 높여버림
해결법
1. 복습함에 익숙해지자
2. 로또를 뽑자(다음부턴 자료가 올바르길 빌자)
3. 메모장 정리하고 블로그에 또 정리하지 말고 바로 블로그에 작성하여 시간을 단축하자
*개인적인 욕심
내가 글을 읽더라도 다른 자료를 추가 참고 없이 바로 이해할 수 있는 글을 작성해보자
'사전 캠프 TIL' 카테고리의 다른 글
12월 11일 TIL (0) | 2024.12.11 |
---|---|
12월9일 TIL (4) | 2024.12.09 |
12월 5일 TIL (2) | 2024.12.05 |
12월4일 TIL (4) | 2024.12.04 |
12월 3일 TIL (3) | 2024.12.03 |