[Python.TimeSeries] Date와 DateTime
2021. 2. 22. 05:00ㆍPython과 머신러닝/TimeSeries & DateTime
1. Date와 DateTime이란?
- Data 분석의 핵심적인 요소는 시간이다.
- 예를 들어 한 기업의 주가를 예측하는 데이터 모델을 만든다고 했을 때, 지난달의 주가는 어떻게 움직였는지를 볼 필요가 있고, 작년 동기에는 어떻게 바뀌었는지 확인이 필요하다.
- 이 외에도 동기대비와 같이 시간을 기반으로 데이터를 분석하고 비교하려는 수요가 많기 때문에, Pandas는 Date와 DateTime이라는 class를 통해서 날짜/시간 관련 특화 기능을 제공한다.
- 즉, Date/DateTime은 Pandas가 제공하는 Python class이고, 이는 날짜/시간 관련 연산에 최적화된 기능을 제공한다.
2. Date 예제
In [1]:from datetime import datetime
date_str='180919'
date_object=datetime.strptime(date_str, '%y%m%d').date()
print(type(date_object))
print(date_object)
Out[1]:<class 'datetime.date'>
2018-09-19
- date_object=datetime.strptime(date_str, '%y%m%d').date()
- strptime : '180919'라는 string을 %y%m%d 형태로 간주하여 DateTime으로 변환한다.
- Year = 2018, Month = 09, Date = 19로 들어가게 된다.
- .date() : 변환된 DateTime 객체는 Date에 대한 정보와 Time에 대한 정보를 전부 가지고 있으니, 이 중 Date 정보만 추출해서 date_object 변수에 담아준다.
- strptime : '180919'라는 string을 %y%m%d 형태로 간주하여 DateTime으로 변환한다.
- 그 결과 date_object의 type은 datetime.date로 나오고
- 출력 결과 기대한 대로 2018년 9월 19일이라는 값이 나오게 된다.
In [2]:print(date_object.month)
print(date_object.day)
print(date_object.weekday()) # wednesday
Out[2]:9
19
2
- date_object는 year/month/day라는 member variable을 갖고 있어서 .month 등으로 접근 가능하고,
출력 값도 확인할 수 있다. - . weekday() 함수는 해당 날짜의 요일을 계산해주는 함수이다.
- 0 : 월요일
- 1 : 화요일
- 2 : 수요일
- ...
- 6 : 일요일
3. 두 Date 변수 간의 차이 구하기
In [3]:date_str_1 = '180919'
date_str_2 = '180925'
date_object_1 = datetime.strptime(date_str_1, '%y%m%d').date()
date_object_2 = datetime.strptime(date_str_2, '%y%m%d').date()
print(date_object_1)
print(date_object_2)
print(date_object_2 - date_object_1)
Out[3]:2018-09-19
2018-09-25
6 days, 0:00:00
- 가장 많이 사용되는 두 날짜 간의 차이도 계산할 수 있다.
- 단순히 빼기 연산자를 사용하면, 마지막 출력 값에서 확인할 수 있듯이 며칠 차이가 나는지 바로 확인이 가능하다.
4. DateTime 예제 - 기본
In [4]:datetime_str = '09/19/18 13:55:26'
In [5]:datetime_obj = datetime.strptime(datetime_str, '%m/%d/%y %H:%M:%S')
print(type(datetime_obj))
print(datetime_obj)
Out[5]:<class 'datetime.datetime'>
2018-09-19 13:55:26
- 이번에는 날짜뿐만 아니라 시간까지 사용하는 예제를 보자.
- '%m/%d/%y %H:%M:%S'의 형태로 strptime을 하게 되면, 콜론(:)으로 구분된 숫자를 각각 시/분/초로 담아서 사용할 수 있게 된다.
- type은 datetime.datetime으로 정의되어 있고
- datetime 객체를 출력하면 기대한 날짜와 시간이 전부 출력되는 것을 확인할 수 있다.
5. DateTime 예제 - DataFrame의 String 값을 DateTime으로 바꿔보는 심화 예제
In [7]:import pandas as pd
In [8]:df = pd.read_csv('./phone_data.csv')
df
Out[8]:
- 이게 기본 상태의 데이터이다. 여기서 date의 타입은 string이기 때문에 분석이 용이하지 않다.
- 이를 DateTime Object로 변환하는 작업을 수행해보자.
5-1. String에서 Date 정보만 String으로 뽑기
In [9]:def rename_date(x):
x = x[:8]
x = x.split('/')
return "-".join([value.strip() for value in x])
df['date_mod']=df['date'].map(rename_date)
df
- 이렇게 한 Series를 전부 수정하기 위해서는 map함수를 사용해야 한다.
- rename_date
- 이 함수는 map에 전달하기 위한 함수이다
- date의 첫 8개 character를 추출하고, 이를 '/' 기준으로 나눈다
- 이를 다시 '-'를 사용해서 이어서 string을 반환한다
- 이렇게 반환받은 string을 date_mod에 담아주면 되는데, date_mod는 현재 string 타입이어서 추가 작업이 필요하다.
5-2. Date String을 DateTime Object로 변환하기
In [11]:df['date_mod'] = pd.to_datetime(df['date_mod'], format='%y-%m-%d')
Out[11]:
- pd.to_datetime : 이 함수는 기존의 Series하나를 입력받아 format에 따라서 DateTime type으로 변환해준다.
In [12]:print(df['date_mod'][0].year)
print(df['date_mod'][0].month)
print(df['date_mod'][0].day)
print(df['date_mod'][0].weekday())
Out[12]:2015
10
14
2
- 변환된 것을 확인하기 위해 0번 data의 year/month/day/weekday를 확인해보면
기대한 2015년 10월 14일의 데이터가 잘 추출된 것을 볼 수 있다. - 이와 같이 pd.to_datetime 함수를 사용해서 기존의 string 타입의 데이터를 DateTime type으로 변환할 수 있다.
6. 관련 포스트
'Python과 머신러닝 > TimeSeries & DateTime' 카테고리의 다른 글
[Python.TimeSeries] Date와 DateTime 심화 - Rolling and Shift (0) | 2021.02.24 |
---|---|
[Python.TimeSeries] Date와 DateTime 심화 - Resample, Groupby (0) | 2021.02.23 |