exercise3 정리

김태희·2025년 1월 10일

Handling Time Series Data


Date and time

  • 코드
    from datetime import datetime 
    
    noww = datetime.now() # 현재 날짜와 시간을 datetime 객체로 가져옴
    print('A01, \n', noww, '\n')
    print('A02, \n', 'year = ', noww.year, '\n') # 현재 년도
    print('A03, \n', 'month = ', noww.month, '\n') # 현재 월
    print('A04, \n', 'day = ', noww.day, '\n') # 현재 일
    print('A05, \n', 'hour = ', noww.hour, '\n') # 현재 시간
    print('A06, \n', 'minute = ', noww.minute, '\n') # 현재 분
    print('A07, \n', 'second = ', noww.second, '\n') # 현재 초
    print('A08, \n', 'second = ', noww.microsecond, '\n') # 현재 마이크로초
  • datetime.timedelta
    • 시간 차이를 표현하는 데 사용
  • strptime()
    • 문자열을 datetime 객체로 변환
    • 포맷 지정 필요
    • 단일 값만 변환 가능
  • strftime()
    • datetime 객체를 문자열로 변환
  • dayfirst=False
    • 기본형
    • 월//년 순서로 해석
  • dayfirst=True
    • 일/월/년 순서로 해석
  • to_datetime()
    • 문자열을 datetime 객체로 변환
    • 배열 처리 가능
    • 유연함
    • dayfirst=True 와 같은 옵션도 가능

Making Time Series Data

  • [::2]
    • 두 칸씩 뛰어넘기
  • 코드
    print(longer_ts['2020'], '\n') # 2020년에 해당하는 거 모두 뽑기
    print(longer_ts['2020-06'], '\n') # 2020년 6월에 해당하는 거
    
    print(ts['1/7/2011':'1/10/2011'], '\n') # 2011/7/1 부터 2011/10/1 까지
    print(ts.truncate(after='1/8/2011'), '\n') #2011/8/1 이후로
  • truncate
    • 데이터의 일부를 잘라내어 반환
    • before, after 기준 설정
  • .groups
    • 그룹화한 객체에서 각 그룹의 인덱스 정보를 딕셔너리로 반환
  • .resample
    • 시계열 데이터를 주어진 새로운 시간 간격에 맞게 다시 샘플링(재구성)하는 데 사용
  • bfill()
    • 결측값을 뒤쪽 값으로 채움
  • pd.date_range()
    • 특정 시작일(start)과 종료일(end) 사이의 날짜 범위를 생성
  • freq
    • 원하는 주기(일, 주, 월 등)로 날짜를 설정 가능
    • 'D', 'W', 'M', 'MS', 'H'
  • pd.date_range():
    • 지정된 시작 시간과 기간 또는 종료 시간을 기준으로 날짜와 시간 범위를 생성
    • normalize=True:
      • 생성된 모든 datetime 객체를 자정(00:00:00)으로 정규화
  • periods=7
    • 7개의 연속적인 날짜를 생성
  • rollforward
    • 주어진 날짜의 "다음" 기준으로
  • rollback
    • 주어진 날짜의 "이전" 기준으로 이동.
    • Offset 기준 날짜에 이미 해당하면 현재 날짜를 반환

TimeZone and UTC

  • pytz.timezone('ROK')
    • 대한민국 표준시(Korea Standard Time, KST)를 나타냄
  • tz_localize('ROK')
    • 시간대 정보가 추가되지만, 기존의 날짜 및 시간 값은 변경되지 x
  • tz_convert
    • 기존의 시간대 정보를 보존하면서, 다른 시간대 기준으로 변환

Period

  • Period
    • 특정 시간 범위를 나타냄
    • 연도('A-DEC'), 월('M'), 분기('Q-DEC'), 일('D') 등 다양한 주기 지원
  • PeriodIndex
    • 여러 Period를 모아 인덱스로 사용
    • pd.period_range를 사용하여 연속적인 Period 생성 가능

Resampling

  • 다운샘플링
    • 더 높은 빈도 데이터를 낮은 빈도로 변환
  • 업샘플링
    • 더 낮은 빈도 데이터를 높은 빈도로 변환

Time Series Plotting

  • ffill()
    • 빈 자리에 있는 값들을 채워주는 거
  • .plot()
    • 그래프 볼 수 있음
  • 기간 보고 싶으면
    close_px['AAPL'].loc['01-2011':'03-2011'].plot()
    close_px.loc['2009'].plot()
  • rolling(window=N)
    • 지정된 윈도우 크기 (N)에 따라 데이터를 슬라이딩하며 연산(평균, 표준편차 등)을 수행
      close_px.AAPL.rolling(window=250).mean().plot()
      # 250일 이동 평균 계산
      
      close_px.AAPL.rolling(window=250).std().plot()
      # 250일 이동 표준편차 계산
      
      close_px.AAPL.rolling(window=250).mean().plot(logy=True)
      # y축을 로그 스케일로 설정

Exponentially-weighted moving average

  • pct_change()
    • 어느정도 변동성이 있는 지 볼 수 있음
  • ewm() 함수
    • 지수 가중 이동 평균(EWMA, Exponentially Weighted Moving Average)을 계산하는 함수
    • 데이터에 시간적 가중치를 부여하여, 최근의 값에 더 큰 비중을 둔 평균을 계산
  • plot() 함수
    • 데이터를 시작화하는 함수
    • 코드
      df.plot(style='k-', ax=axes[0], label='Series')
      • style
        • 그래프의 스타일을 정의
      • ax
        • 그래프를 그릴 특정 서브플롯 지정
      • label
        • 그래프의 범례에 표시될 이름 지정
  • pct_change()
    • DataFrame의 각 열에 대해 일일 수익률을 계산
  • corr()
    • 함수는 두 시리즈나 두 DataFrame의 열 간의 상관 계수를 계산
      • 상관 계수 :
        두 변수 간의 관계의 강도와 방향을 나타내는 값으로, 값의 범위는 -1과 1 사이

Time series data wrangling

  • DateReader()
    • 웹에서 주식 시세, 경제 지표, 환율 등 다양한 금융 데이터를 Pandas DataFrame 형식으로 가져오는 데 사용
      • pandas_datareader가 없으면 pip install pandas_datareader 해서 설치하면 됨
  • set_xlabel
    • x축 레이블 지정
  • set_ylable
    • y축 레이블 지정
  • 컬러도 지정가능
    ax1.set_ylabel('Log Return', color='g')
  • tick_params()
    • 축 눈금(ticks)과 눈금 레이블(tick labels)의 모양과 속성을 제어하는 데 사용

      ax1.tick_params(axis='y', colors='g')  # y축 눈금과 레이블 색상을 초록색으로 설정
  • tick_layout()
    • 래프의 여백을 자동으로 조정하여 레이아웃을 최적화

      plt.tight_layout()  # 레이아웃을 최적화하여 겹침을 방지
  • show()
    • 그래프를 화면에 표시하는 데 사용
  • yfinace
    • 없으면 얘도 pip install로 설치
profile
내 벨로그

0개의 댓글