[LSTM] 3. 데이터 준비
본문 바로가기
비트코인 자동매매 프로그램/[전략개발] 인공지능

[LSTM] 3. 데이터 준비

by 코딩 Play 2024. 6. 13.
내용
  • Pandas를 사용하여 주가 데이터 로드
  • 날짜 열 변환 및 인덱스 설정
  • 외부 소스에서 주가 데이터 가져오기
  • 주가 데이터 시각화
  • MinMaxScaler를 사용한 데이터 정규화

 

Pandas를 사용하여 주가 데이터 로드

먼저, Pandas DataFrame에 과거 주가 데이터를 로드합니다. Pandas는 구조화된 데이터를 원활하게 작업할 수 있도록 데이터 구조와 기능을 제공하는 강력한 데이터 조작 라이브러리입니다.

import pandas as pd

# 주가 데이터 로드
data = pd.read_csv('AAPL.csv')

설명:

  • Pandas 임포트: 먼저 Pandas 라이브러리를 임포트합니다.
  • CSV 파일 로드: pd.read_csv() 함수를 사용하여 주가 데이터를 포함하는 CSV 파일을 읽습니다. 이 예에서는 'AAPL.csv' 파일에서 데이터를 로드합니다. 이 파일에는 일반적으로 'Date', 'Open', 'High', 'Low', 'Close', 'Volume'과 같은 열이 포함되어 있습니다.

날짜 열 변환 및 인덱스 설정

다음으로, 'Date' 열을 datetime 형식으로 변환하고 DataFrame의 인덱스로 설정합니다. 이 단계는 시계열 데이터를 효과적으로 처리하는 데 중요합니다.

data['Date'] = pd.to_datetime(data['Date'])
data.set_index('Date', inplace=True)
data = data[['Close']]

설명:

  • 날짜 변환: pd.to_datetime() 함수는 'Date' 열을 문자열 형식에서 datetime 객체로 변환합니다. 이 변환은 데이터에 대해 시간 기반 작업을 수행할 수 있게 합니다.
  • 인덱스 설정: set_index() 메서드를 사용하여 'Date' 열을 DataFrame의 인덱스로 설정합니다. 날짜를 인덱스로 설정하는 것은 시계열 분석에 필수적입니다.
  • 'Close' 열 선택: 각 거래일의 주식 종가를 나타내는 'Close' 가격 열에 집중합니다. 이 열을 추가 분석 및 모델링을 위해 선택합니다.

외부 소스에서 주가 데이터 가져오기

대안으로, yfinance 라이브러리를 사용하여 Yahoo Finance와 같은 외부 소스에서 주가 데이터를 가져올 수 있습니다. 로컬 CSV 파일이 없을 때 이 방법이 편리합니다.

import yfinance as yf

# 주가 데이터 가져오기
ticker = 'AAPL'
data = yf.download(ticker, start='2020-01-01', end='2023-01-01')
data = data[['Close']]

설명:

  • yfinance 임포트: Yahoo Finance에서 역사적인 시장 데이터를 다운로드할 수 있는 편리한 인터페이스를 제공하는 yfinance 라이브러리를 임포트합니다.
  • 데이터 가져오기: yf.download()를 사용하여 티커 심볼 'AAPL'의 2020년 1월 1일부터 2023년 1월 1일까지의 과거 주가 데이터를 가져옵니다.
  • 'Close' 열 선택: 이전 방법과 마찬가지로 추가 분석을 위해 'Close' 가격 열을 선택합니다.

주가 데이터 시각화

시각화는 데이터를 이해하고 트렌드, 패턴 및 이상치를 식별하는 데 도움을 줍니다. 우리는 Matplotlib을 사용하여 시간에 따른 주가를 플롯합니다.

import matplotlib.pyplot as plt

# 데이터 플롯
plt.figure(figsize=(14, 5))
plt.plot(data)
plt.title('시간에 따른 주가')
plt.xlabel('날짜')
plt.ylabel('가격')
plt.show()

설명:

  • Matplotlib 임포트: Python에서 정적, 애니메이션 및 상호작용 시각화를 만드는 데 사용되는 Matplotlib 라이브러리를 임포트합니다.
  • 플롯 생성: plt.plot()을 사용하여 주가의 라인 플롯을 생성합니다.
  • 플롯 맞춤화: plt.title()로 플롯의 제목을 추가하고, plt.xlabel()plt.ylabel()을 사용하여 x축과 y축에 라벨을 추가합니다. plt.figure(figsize=(14, 5))은 플롯의 크기를 설정하여 명확하게 보이도록 합니다.

MinMaxScaler를 사용한 데이터 정규화

정규화는 데이터를 특정 범위(일반적으로 0과 1 사이)로 스케일링하는 중요한 전처리 단계입니다. 이는 LSTM 네트워크를 포함한 많은 머신러닝 알고리즘의 성능과 수렴 속도를 향상시키는 데 도움이 됩니다.

from sklearn.preprocessing import MinMaxScaler

# 데이터 정규화
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)

설명:

  • MinMaxScaler 임포트: 머신러닝 및 데이터 전처리를 위한 강력한 도구인 Scikit-learn 라이브러리에서 MinMaxScaler를 임포트합니다.
  • 스케일러 초기화: 특성 범위를 (0, 1)로 설정하여 MinMaxScaler 인스턴스를 생성합니다. 이는 데이터를 0과 1 사이로 스케일링하고자 함을 나타냅니다.
  • 데이터 피팅 및 변환: scaler.fit_transform() 메서드는 데이터를 스케일링합니다. 데이터에 스케일러를 맞춘 후(즉, 최소값과 최대값을 학습한 후) 지정된 범위에 따라 데이터를 변환합니다.

전체 코드

다음은 데이터 준비 과정에 대한 전체 코드입니다:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
import yfinance as yf

# 옵션 1: CSV 파일에서 주가 데이터 로드
data = pd.read_csv('AAPL.csv')
data['Date'] = pd.to_datetime(data['Date'])
data.set_index('Date', inplace=True)
data = data[['Close']]

# 옵션 2: 외부 소스에서 주가 데이터 가져오기
# ticker = 'AAPL'
# data = yf.download(ticker, start='2020-01-01', end='2023-01-01')
# data = data[['Close']]

# 데이터 플롯
plt.figure(figsize=(14, 5))
plt.plot(data)
plt.title('시간에 따른 주가')
plt.xlabel('날짜')
plt.ylabel('가격')
plt.show()

# 데이터 정규화
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)

이 단계들을 따르면, LSTM 모델을 학습시키기 위한 데이터를 준비할 수 있습니다. 적절한 데이터 준비는 모델이 깨끗하고 정규화된 구조화된 데이터를 받을 수 있도록 하여 더 나은 성능과 정확한 예측을 보장합니다.

최근댓글

최근글

skin by © 2024 ttuttak