youtube api를 통해 각 영상별 조회수 증가폭을 보기위해서 매일 데이터를 받고 있는데, 일별로 보다 보면 그래프가 한눈에 안보인다. (물론 그냥 일주일에 한번씩 받으면 주간 데이터가 된다.ㅋㅋ )
하지만, 애초에 주어진 데이터가 일별데이터라면...
또한 시계열 데이터를 그래프로 나타내려다 보면, 일별 뿐만 아니라, 주간, 월별로 데이터를 보고싶어질때가 있다. 대표적으로 주식??
아래는 저번에 shift 함수를 이용해 일일 조회수 증가량 view_count_diff 를 추가한 데이터 의 일부입니다.
아래처럼 아무래도 데이터는 계속 추가되기 때문에 계속 일별로 그래프로 표현하기에는 한계가 있다. 그래서 주간별로 조회수 증가량을 볼 수 있도록 데이터를 전처리해보자!
# filtered_df 데이터
import datetime
import pandas as pd
new_df = filtered_df.copy() # filtered_df의 복사본 생성
new_df['down_at'] = pd.to_datetime(filtered_df['down_at'], format='%Y-%m-%d')
new_df['week_start'] = new_df['down_at'] - pd.to_timedelta(new_df['down_at'].dt.dayofweek, unit='d')
weekly_df = new_df.groupby(['video_id', 'week_start'])['view_count_diff'].sum().reset_index() # video_id 와 week_start 가 index로 가버리기 때문에 rest_index() 필요
# weekly_df['week_start'] = pd.to_datetime(weekly_df['week_start']).dt.strftime('%m-%d')
- 날짜를 이용해서 데이터를 조회하기 때문에, down_at열의 값을 datetime형식으로 변환필요
- new_df['week_start'] =
pd.to_timedelta() 함수를 사용하여 일(day) 수를 뺀 값으로 계산합니다. 이때, unit 매개변수를 사용하여 일(day)을 나타내는 문자열을 지정합니다.- video_id 와 week_start 그룹로 view_count_diff 를 집계(sum)해주면 끝!
down_at 컬럼에 pd.to_timedelta(new_df['down_at'].dt.dayofweek, unit='d') 를 빼주면 아래와 같이 해당 down_at(다운받은 날짜)의 첫 주가 기록된다.
video_id, week_start 별로 그룹해주면 끝!
이제 해당 데이터를 본인의 입맛대로 시각화 하면된다! 저는 nivo_chart를 이용했습니다.
![]() | ![]() |
---|
- datetime.now 현재 시간을 알리는 함수
- tiemdelta 날짜 차이
now = datetime.datetime.now()
#현재시간을 년-월-일 로
today = pd.to_datetime(now_time, format='%Y-%m-%d')
print(today)
> 2023-08-29 00:00:00
# datetime 타입에서 하루를 빼고싶을때?
# pd.Timedelta 를 이용하면된다.
yesterday = today - pd.Timedelta(days=1)
> 2023-08-28 00:00:00
# 물론 1주일 도 가능하다
# day 대신 weeks 를 넣어주면 된다. months 도 마찬가지겠지?
last_week = today - pd.Timedelta(weeks=1)