[Module] datetime, 시계열 데이터

고보·2024년 2월 15일

Python 기초 강의 정리

목록 보기
15/15

1 datetime 객체

  • 날짜와 시간 처리하는 파이썬 라이브러리.
  • datetime(1970, 1, 1): 원하는 날짜 입력 가능.
  • datetime.now(): 현재 연월일시분초. KST Korean Standard Time으로 나옴.
    datetime.today(): 현재 연월일시분초. UTC, 협정세계시. 위와 미세하게 다르다.
  • 빼기 연산 datetime.now() - datetime(1970, 1, 1): 일수, 시간, 초의 시간 차이 계산 가능. 이 경우 타입은 datetime.timedelta형.

1-1 데이터 타입 변환

  • df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y'): 이렇게 하면 문자로 된 열 전체를 datetime으로 바꿀 수 있다.
  • datetime.strftime('%Y-%m-%d %H:%M:%S'): datetime 데이터를 지정한 형식으로, string으로 추출.
    https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
    => 여기서 format 지정자 리스트 확인
  • ebola = pd.read_csv('../data/country_timeseries.csv', parse_dates=['Date']): pd로 데이터를 불러올 때 parse_dates=['열이름']으로 하면 불러올 때 열을 datetime으로 바꿔줌.

1-2 시간 정보 추출

  • 객체의 속성으로 날짜 정보 저장되어 있기 때문에 추출 가능
  • datetime.year
    datetime.quarter
    datetime.month
    datetime.day
    datetime.hour
    datetime.minute
    datetime.second
  • DF.dt.dt메서드: DF나 Series 내부의 datetime 객체에 접근하는 접근자.
  • .max() .min(): 맥스가 가장 최근 시간(2024년), min이 가장 먼 시간(1900년 등).
    날자 차이를 빼기 연산으로 했다고 치면 큰 거 - 작은 거 했을 때, 그 일수 나온다와 같은 맥락. 작은 게 오래된 거.

1-3 인덱스로 접근하기

1-3-1 Datetimeindex

  • 인덱스를 datetime으로 바꾸면, 인덱스가 datetimeindex 객체가 된다. 이를 통해 쉽게 조회.
#Date라는 datetime 열이 있으면, 그걸 인덱스로 설정
df.index = df['Date']

#인덱스에 datetime으로 접근
df.loc['2010']
df.loc['2010-06']
df.loc['2015-12-29']

1-3-2 Timedeltaindex

  • 인덱스가 timedeltaindex 객체로 된다. 접근하기 용이.
#timedelta 열 만들기
tesla['ref_date'] = tesla['Date'] - tesla['Date'].min()

#index를 timedeltaindex 객체로
tesla.index = tesla['ref_date']

# 조회 가능
#0일~10일만 조회. day나 days나 똑같다. 
tesla.loc['0 day': '10 day']
tesla.loc['0 days': '10 days']

1-3-3 빈 날짜 채워넣기

  • head_range = pd.date_range('2024-01-01', '2024-01-15', freq='B'): pandas의 함수로, 시작일~마지막일의 시간 범위의 날짜를 생성한다. 객체는 datetimeindex고, 하나하나의 요소는 datetime.
    • freq에는 생성한 날짜 범위의 빈도 설정.
    • B: Business day. 주말, 공휴일 제외 평일. 2B하면 이틀 단위.
    • D: Calendar Day. 매일
    • W: weekly. 주 단위로. 기본적으로 일요일 기준.
    • M: Month end: 월말 날짜만.
    • WOM: week of month. 특정 월의 주를 기준으로 날짜 범위 생성. WOM-3FRI는 매월 세 번째 금요일
    • MS: Month start, 월초 날짜만
    • Q: Quarter end 분기 마지막날만
    • QS: Quarter start. 분기 시작날만.
    • A: Year end. 연말 날짜만
    • AS: Year start 연초 날짜만.
    • H: Hourly 시간 단위로. 2H하면 2시간 단위.
    • T, min: 분 단위로
    • S: 초단위로
  • df.reindex(head_range): 프레임의 인댁스와 컬럼을 새로운 인덱스와 컬럼으로 재배열. 새 인덱스나 컬럼이 기존 데이터프레임에 없으면 해당 위치는 NaN으로 채워진다.
    • 매개변수
    • index=: 새 행 인덱스로 쓸 리스트. 그냥 값만 넣으면 이걸로 들어감.
    • columns=: 컬럼 레이블로 사용할 리스트
    • method=: 인덱스 재배열시 사용할 보간 방식. ffill, bfill 등.
    • fill_value: 재색인 과정에서 새로 추가되는 레이블에 채워넣을 기본값
    • copy=True: 새 인덱스가 이전 인덱스와 동일해도 데이터 복사.

2 주식 데이터 다루기

2-1 pandas-datareader

  • pip install pandas-datareader 설치 필요. anaconda나 주피터에서 !pip
  • 웹 상의 다양한 데이터 소스에서 데이터 읽어와서 pandas 데이터프레임으로 쉽게 변환해주는 라이브러리. 주식 가격, 경제 데이터, GDP, 환율 등 다양한 금융 및 경제 데이터에 접근 가능하다.
  • yahoo finance, google finanace, stooq, iex, fred 등 여러 데이터소스 지원.
import pandas_datareader.data as web
tesla = web.DataReader('TSLA', 'stooq')
  • pandas_datareader.data 모듈은 웹에서 데이터를 읽어오는 함수들을 제공.
  • DataReader은 2개의 인수를 받는데, 첫 번째 인자는 데이터를 조회할 식별자. TSLA는 테슬라 주식 심볼. stooq는 데이터 제공하는 소스. stooq의 금융 데이터를 받는다.
  • 이렇게 불러온 경우 index가 datetimeindex 객체로 설정.
profile
일본에서 일하는 게임 기획자. 시시해서 죽어버리지 않게, 재밌고 의미 있는 컨텐츠에 관심 있습니다. 그 도구로 데이터, AI도 찝적댑니다.

0개의 댓글