본문 바로가기
Develope/python

[PYHTON, 파이썬] 주식 RSI 그래프 확인하기, pandas, matplotlib, pandas_datareader, yfinance

by 개발자도구 2023. 7. 20.
반응형

0. 사용 라이브러리 설명

1. Pandas: Pandas는 데이터 조작 및 분석을 위한 파이썬 라이브러리입니다. 이는 특히, 데이터 프레임 구조를 제공하여 데이터를 효율적으로 조작할 수 있도록 돕습니다. 또한, CSV, 엑셀 파일 등 다양한 형식의 데이터를 읽고 쓸 수 있는 기능도 제공합니다. 데이터를 정리하고 필터링하며, 다양한 통계를 계산하는 데 유용합니다.

2. Matplotlib: Matplotlib는 데이터 시각화를 위한 파이썬 라이브러리입니다. 선 그래프, 히스토그램, 산포도(scatter plot) 등 다양한 그래프를 그릴 수 있습니다. 또한, 그래프의 제목, 레이블, 범례 등을 쉽게 추가할 수 있습니다.

3. Pandas_datareader: Pandas_datareader는 웹에서 직접 데이터를 읽어오는 기능을 제공하는 라이브러리입니다. Yahoo Finance, Google Finance, World Bank 등 다양한 소스에서 데이터를 가져올 수 있습니다.

4. yfinance: yfinance는 Yahoo Finance 데이터를 더 효율적으로 가져오기 위한 파이썬 라이브러리입니다. 원래는 pandas_datareader에서 Yahoo Finance의 지원이 중단되었을 때, 그 대체제로 개발되었습니다. 현재는 Yahoo Finance에서 과거 주식 가격, 금융 정보 등 다양한 데이터를 가져오는 데 널리 사용됩니다.

위 네 가지 라이브러리는 모두 데이터 분석 및 시각화에 굉장히 중요한 도구들입니다. Pandas는 데이터 조작과 분석을, Matplotlib은 시각화를, Pandas_datareader와 yfinance는 웹에서 데이터를 가져오는데 각각 특화되어 있습니다. 이들을 함께 사용하면, 웹에서 데이터를 가져와 처리하고 시각화하는 전체 데이터 분석 파이프라인을 간편하게 구현할 수 있습니다.

 

1. 라이브러리 설치 하기


pip install pandas

pip install matplotlib

pip install pandas_datareader

pip install yfinance

cmd 를 통하여 pandas, matplotlib, pandas_datareader, yfinance를 설치한다.

 

2.Apple 주식 데이터 가져오기

pandas_datareader를 사용하여 Yahoo Finance에서 주식 데이터를 가져온다. (Apple의 주식 데이터를 사용)

from pandas_datareader import data as pdr
import yfinance as yf

yf.pdr_override() 

# Get data 
data = pdr.get_data_yahoo("AAPL", start="2022-01-01", end="2023-07-20")

print(data)

Apple 데이터를 정상적으로 가지고 오는걸 확인 할 수 있다.

 

3. 가지고 온 주식 데이터를 가지고 RSI 계산 하기

from pandas_datareader import data as pdr
import yfinance as yf

yf.pdr_override() 

# Get data 
data = pdr.get_data_yahoo("AAPL", start="2022-01-01", end="2023-07-20")

def calculate_rsi(data, window_length=14):
    delta = data['Close'].diff()
    delta = delta[1:] 

    up, down = delta.copy(), delta.copy()
    up[up < 0] = 0
    down[down > 0] = 0

    avg_gain = up.rolling(window_length).mean()
    avg_loss = abs(down.rolling(window_length).mean())

    rs = avg_gain / avg_loss
    rsi = 100 - (100 / (1 + rs))
    data['RSI'] = rsi

    return data

# Calculate RSI
data = calculate_rsi(data)

print(data)

RSI 가 구해지는걸 확인 할 수 있다.

 

4. 주가 정보 와 RSI를 정보를 가지고 그래프 그리기

import pandas as pd
import matplotlib.pyplot as plt 
from pandas_datareader import data as pdr
import yfinance as yf

yf.pdr_override() 

# Get data 
data = pdr.get_data_yahoo("AAPL", start="2022-01-01", end="2023-07-20")

def calculate_rsi(data, window_length=14):
    delta = data['Close'].diff()
    delta = delta[1:] 

    up, down = delta.copy(), delta.copy()
    up[up < 0] = 0
    down[down > 0] = 0

    avg_gain = up.rolling(window_length).mean()
    avg_loss = abs(down.rolling(window_length).mean())

    rs = avg_gain / avg_loss
    rsi = 100 - (100 / (1 + rs))
    data['RSI'] = rsi

    return data

# Calculate RSI
data = calculate_rsi(data)

# Plotting
plt.figure(figsize=(14, 7))

plt.subplot(2, 1, 1)
plt.plot(data.index, data['Close'], label='AAPL Close Price')
plt.title('Close Price & RSI Graph')
plt.grid(True)
plt.legend()

plt.subplot(2, 1, 2)
plt.plot(data.index, data['RSI'], label='RSI', color='orange')
plt.axhline(0, linestyle='--', alpha=0.5, color='black')
plt.axhline(20, linestyle='--', alpha=0.5, color='red')
plt.axhline(30, linestyle='--', alpha=0.5, color='red')
plt.axhline(70, linestyle='--', alpha=0.5, color='blue')
plt.axhline(80, linestyle='--', alpha=0.5, color='blue')
plt.axhline(100, linestyle='--', alpha=0.5, color='black')
plt.grid(True)
plt.legend()

plt.show()

위와 같이 주가 그래프와 RSI를 그리는 그래프를 만들 수 있다.

 

반응형

댓글