내용
- 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 모델을 학습시키기 위한 데이터를 준비할 수 있습니다. 적절한 데이터 준비는 모델이 깨끗하고 정규화된 구조화된 데이터를 받을 수 있도록 하여 더 나은 성능과 정확한 예측을 보장합니다.
'비트코인 자동매매 프로그램 > [전략개발] 인공지능' 카테고리의 다른 글
[LSTM] 6. 모델 학습 (0) | 2024.06.13 |
---|---|
[LSTM] 5. LSTM 모델 구축 (0) | 2024.06.13 |
[LSTM] 4. 학습 및 테스트 세트 생성 (0) | 2024.06.13 |
[LSTM] 2. 설치 및 환경 설정 (0) | 2024.06.13 |
[LSTM] 1. LSTM을 이용한 시계열 예측 소개 (0) | 2024.06.13 |