[Python.TimeSeries] Date와 DateTime

2021. 2. 22. 05:00Python과 머신러닝/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 변수에 담아준다.
  • 그 결과 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]:

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

Out[9]

  • 이렇게 한 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]:

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. 관련 포스트

반응형