본문 바로가기
Python/PANDAS

Time Series Data - 날짜, 시간 datetime

by 하니__ 2024. 4. 19.
chicago_df['Date'].head()
 

 
 
 
 
 

chicago_df['Date'] = pd.to_datetime(chicago_df['Date'], format ='%m/%d/%Y %H:%M:%S %p')

 
pd.to_datetime()으로 위의 문자열 형식인 Date콜럼을 datetime형식으로 바꿔준다
format은 지금 적혀 있는 숫자들이 월/일/연도 시간:분:초 AM/PM인것을 컴퓨터에게 알려주고
컴퓨터가 알아듣는 방식으로(datetime 형식으로) 바꾸라는 의미다
 
이렇게 바꿔줌으로써 할 수 있는 것들이 많아진다

 

 
chicago_df['Date'].head()
 

그렇게 해서 바꿔진게 이런 모습이고 이런 모습을 ISO 포맷이라고 하며
국제적으로 널리 사용되는 날짜 및 시간 표현 방법이다
 

이 밖에도 이러한 형식들이 있지만 아무래도 위의 방식을 보편적으로 사용한다

 
형식 지정자형식
%m/%d/%Y mm/dd/yyyy 02/21/2018
%m/%d/%y mm/dd/yy 02/21/18
%d/%m/%Y dd/mm/yyyy 21/02/2018
%d/%m/%y dd/mm/yy 21/02/18
%d-%m-%Y dd-mm-yyyy 21-02-2018
%d-%m-%y dd-mm-yy 21-02-18
%m-%d-%Y mm-dd-yyyy 02-21-2018
%m-%d-%y mm-dd-yy 02-21-18
%Y-%m-%d yyyy-mm-dd 2018-02-21
%f/%e/%Y m/d/yyyy 2/21/2018
%f/%e/%y m/d/yy 2/21/18
%e/%f/%Y d/m/yyyy 21/2/2018
%e/%f/%y d/m/yy 21/2/18
%f-%e-%Y m-d-yyyy 2-21-2018
%f-%e-%y m-d-yy 2-21-18
%e-%f-%Y d-m-yyyy 21-2-2018
%e-%f-%y d-m-yy 21-2-18
%b %e, %Y Mth d, yyyy Feb 21, 2018
%B %e, %Y Month d, yyyy February 21, 2018
%b %d, %Y Mth d, yyyy Feb 21, 2018
%B %d, %Y Month d, yyyy February 21, 2018
%Y-%m-%d %H:%M:%S yyyy-mm-dd hh:mm:ss 2018-02-21 12:00:00
%H:%M:%S hh:mm:ss 12:00:00
%Y-%m-%d %I:%M:%S %p yyyy-mm-dd HH:MM:SS tt 2018-10-29 10:02:48 AM
%Y-%m-%d %I:%M:%S %p yyyy-mm-dd HH:MM:SS tt 2018-10-29 07:30:20 PM


 

chicago_df.iloc[0,1]
Timestamp('2006-04-02 13:00:00')

 
 
그래서 이런 날짜를 가져왔는데 해당 날짜의 요일을 알 수 있을까?
 
파이썬 표준 라이브러리 datetime의 weekday를 사용하면 알 수 있다

chicago_df.iloc[0,1].weekday()
6

 
해당 방식은 0부터 월요일이다
암호같이 숫자로 말고 바로 알려주는건 없을까?

chicago_df['day_name'] = chicago_df['Date'].dt.day_name()
chicago_df['day_name'].value_counts()

 

 
 
이번엔 판다스라이브러리의 속성 중 하나인 dt.day_name()를 사용하면
암호처럼 숫자가 아니라 문자로 알려준다
 
 

resample(  )

 
각 년도별 몇개의 범죄 데이터를 가지고 있는지 확인하려 한다
 
이럴때는 resample 함수를 사용 하면 좋다 그리고 
resample 함수를 사용하려면 인덱스가 datetime 이어야 한다

chicago_df.set_index('Date', inplace=True)
chicago_df.resample('Y').size()
chicago_df.resample('YS').size()

 

 
resample( ) 파라미터 안에 문자열
Y를 넣어주면 좌측처럼 나오게 되고
YS를 넣어주면 우측처럼 나오게 된다
Y는 Year를 뜻하며
S 는 Start를 뜻한다
 
 
 
 
 

범죄 발생 건수를 예측하고 싶다

 

범죄 발생 건수에 대한 콜럼은 없다
 
그렇다면 해당하는 콜럼부터 만들어야 한다
 
 

df_prophet = chicago_df.resample('D').size().to_frame().reset_index().rename(columns = { 'Date' : 'ds', 0 : 'y' } )

 
 
resample( )을 이용하여 D Day 날짜별로 리샘플링을 한뒤에
.size( )를 이용하여 각 날짜별로 발생한 데이터의 수를 구하고
to_frame( )을 이용하여 데이터프레임으로 변환시켜준 뒤에
reset_index( )를 이용하여 인덱스로 내려가있던 날짜와 시간을 콜럼으로 다시 올려주고
Prophet는 콜럼의 이름을 ds와 y로 설정해야 하니까
rename(columns = { 'Date': 'ds', 0: 'y' })를 통해서 콜럼의 이름을 ds와 y로 바꿔주자
 
 
 
 

prophet = Prophet()
prophet.fit(df_prophet)
prophet.make_future_dataframe( periods = 365 )

 

 

future = prophet.make_future_dataframe( periods = 365,freq = 'd' )
forecast = prophet.predict(future)
prophet.plot(forecast)
plt.show()

 

prophet.plot_components(forecast)
plt.show()