IT/금융

Python을 이용한 주식 수익률 분석 및 시각화

chn1002 2024. 4. 22. 23:17

현대의 투자자들은 기술을 활용하여 주식 시장 데이터를 분석하고, 그 중에서도 가장 수익성이 높은 주식을 식별하려고 합니다. 본 블로그 포스트에서는 Python 프로그래밍 언어를 사용하여 나스닥 주식 중에서 1년 동안 가장 좋은 수익률을 보인 주식을 찾고, 이를 시각화하는 방법을 설명하겠습니다.

필요한 도구와 라이브러리

이 프로젝트를 수행하기 위해 다음의 도구와 라이브러리가 필요합니다:

  • Python: 프로그래밍 언어
  • yfinance: Yahoo Finance API에 액세스할 수 있는 Python 라이브러리
  • Matplotlib: 데이터 시각화를 위한 라이브러리
  • Pandas: 데이터 분석을 위한 라이브러리
  •  

데이터 가져오기

첫 번째 단계는 Yahoo Finance로부터 주식 데이터를 가져오는 것입니다. 이를 위해 yfinance 라이브러리를 사용하며, 특정 주식의 조정 종가 데이터를 다운로드합니다.

import yfinance as yf

def fetch_data(tickers, start_date, end_date):
    data = yf.download(tickers, start=start_date, end=end_date)
    return data['Adj Close']
 

 

수익률 계산

데이터를 가져온 후, 다음 단계는 주식의 일일 수익률을 계산하는 것입니다. 이 수치는 투자 결정을 내릴 때 중요한 지표가 됩니다.

import pandas as pd

def calculate_returns(data):
    data = data.pct_change().dropna() * 100
    return data
 

 

최고 수익률 주식 찾기

모든 주식의 수익률을 계산한 후, 가장 높은 평균 수익률을 가진 주식을 식별합니다.

def find_best_stock(data):
    annual_return = data.mean()
    best_stock = annual_return.idxmax()
    return best_stock, annual_return.max()
 

 

데이터 시각화

마지막 단계는 선택된 주식의 데이터를 시각화하여 그 추세를 확인하는 것입니다.

 
import matplotlib.pyplot as plt

def plot_stock(data, ticker):
    plt.figure(figsize=(14, 7))
    plt.plot(data.index, data[ticker], label=ticker)
    plt.title(f'{ticker} 1년간 조정 종가')
    plt.xlabel('날짜')
    plt.ylabel('조정 종가')
    plt.legend()
    plt.grid(True)
    plt.show()

실행 및 결과

모든 함수를 정의한 후, 실제 코드를 실행하여 결과를 확인합니다.

 

tickers = ['AAPL', 'GOOGL', 'MSFT']
start_date = (datetime.now() - timedelta(days=365)).strftime('%Y-%m-%d')
end_date = datetime.now().strftime('%Y-%m-%d')

data = fetch_data(tickers, start_date, end_date)
if data.empty:
    print("데이터가 없습니다. 파라미터 설정을 확인하세요.")
else:
    processed_data = calculate_returns(data)
    best_stock, best_return = find_best_stock(processed_data)
    if best_stock is None:
        print("적합한 주식 데이터가 없습니다.")
    else:
        print(f"가장 수익률이 좋은 주식: {best_stock} ({best_return:.2f}%)")
        plot_stock(data, best_stock)