iBetter Books
수정

yfinance로 주가 데이터 가져오기

pip install yfinance
import yfinance as yfimport matplotlib.pyplot as pltimport matplotlib.dates as mdatesimport matplotlibimport platformmatplotlib.rcParams['font.family'] = {'Windows': 'Malgun Gothic', 'Darwin': 'AppleGothic'}.get(platform.system(), 'NanumGothic')matplotlib.rcParams['axes.unicode_minus'] = False# 삼성전자 주가 (최근 1년)# MA60(60일 이동평균)을 표시하려면 최소 60일 이상의 데이터가 필요합니다.ticker = yf.Ticker('005930.KS')df = ticker.history(period='1y')

이동평균선과 함께 표시

# 이동평균 계산df['MA20'] = df['Close'].rolling(20).mean()   # 20일 이동평균df['MA60'] = df['Close'].rolling(60).mean()   # 60일 이동평균fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(13, 9),                                 sharex=True,                                 gridspec_kw={'height_ratios': [3, 1]})# 위: 주가 + 이동평균ax1.plot(df.index, df['Close'],  color='black',      linewidth=1,   label='종가', alpha=0.8)ax1.plot(df.index, df['MA20'],   color='steelblue',  linewidth=1.5, label='20일 이평')ax1.plot(df.index, df['MA60'],   color='coral',      linewidth=1.5, label='60일 이평')ax1.set_title('삼성전자 주가 (최근 1년)', fontsize=14, fontweight='bold')ax1.set_ylabel('주가 (원)')ax1.legend(loc='upper left')ax1.grid(True, linestyle='--', alpha=0.3)ax1.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, p: f'{int(x):,}'))# 아래: 거래량ax2.bar(df.index, df['Volume'], color='steelblue', alpha=0.5)ax2.set_ylabel('거래량')ax2.grid(True, axis='y', linestyle='--', alpha=0.3)# x축 날짜 포맷ax1.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d'))plt.xticks(rotation=45)plt.tight_layout()plt.savefig('samsung_stock.png', dpi=150, bbox_inches='tight')plt.show()

주가와 거래량을 서브플롯으로 배치하고, sharex=True로 x축을 공유하는 패턴은 금융 데이터 시각화의 표준 형식입니다.