α Alphaware
TECH

파이썬 데이터 분석 기초: 판다스로 주가 데이터 다루기

파이썬 판다스(pandas)로 주가 데이터를 불러오고, 정리하고, 기본 분석하는 방법을 처음부터 정리합니다. 퀀트 분석의 출발점입니다.

파이썬 데이터 분석 기초: 판다스로 주가 데이터 다루기

왜 판다스인가

주가 데이터를 다루려면 날짜별로 정렬된 숫자를 다뤄야 합니다. 엑셀로도 되지만, 데이터가 수만 행이 넘어가면 느리고 자동화가 어렵습니다.

**판다스(pandas)**는 파이썬에서 표 형태의 데이터를 다루는 표준 라이브러리입니다. 퀀트 분석, 데이터 과학, 금융 모델링에서 가장 많이 쓰입니다.


설치와 시작

pip install pandas yfinance matplotlib
  • pandas: 데이터 분석
  • yfinance: 야후 파이낸스에서 무료 주가 데이터 다운로드
  • matplotlib: 차트 그리기

주가 데이터 불러오기

야후 파이낸스에서 비트코인 데이터

import yfinance as yf
import pandas as pd

# 비트코인 일봉 데이터 (2년)
btc = yf.download("BTC-USD", period="2y")
print(btc.head())

출력 결과:

                  Open        High         Low       Close    Volume
Date
2024-04-08   69543.12   71842.15   68902.31   71015.94  32844900
2024-04-09   71015.94   71655.25   69241.84   69785.52  30492100
...

각 열의 의미:

  • Open: 시가 (그날 첫 거래 가격)
  • High: 고가 (그날 가장 높은 가격)
  • Low: 저가 (그날 가장 낮은 가격)
  • Close: 종가 (그날 마지막 거래 가격)
  • Volume: 거래량

한국 주식 데이터

# 삼성전자
samsung = yf.download("005930.KS", period="1y")
print(samsung.tail())

기본 데이터 탐색

데이터 크기 확인

print(f"행 수: {len(btc)}")
print(f"기간: {btc.index[0]} ~ {btc.index[-1]}")
print(f"열: {list(btc.columns)}")

기초 통계

print(btc['Close'].describe())

이렇게 하면 평균, 최솟값, 최댓값, 표준편차 등을 한 번에 볼 수 있습니다.

특정 기간 필터링

# 2025년 데이터만
btc_2025 = btc.loc['2025']

# 2025년 1분기
btc_q1 = btc.loc['2025-01':'2025-03']

수익률 계산

퀀트 분석에서 가장 많이 쓰는 계산입니다.

일별 수익률

btc['daily_return'] = btc['Close'].pct_change()
print(btc['daily_return'].tail())

pct_change()는 전날 대비 변화율을 계산합니다. 0.03이면 3% 상승, -0.02면 2% 하락입니다.

누적 수익률

btc['cumulative'] = (1 + btc['daily_return']).cumprod()
print(f"총 수익률: {btc['cumulative'].iloc[-1] - 1:.2%}")

이동평균 계산

이동평균은 일정 기간의 평균 가격입니다. 추세를 파악하는 데 가장 기본적인 도구입니다.

# 20일 이동평균 (단기)
btc['ma20'] = btc['Close'].rolling(20).mean()

# 60일 이동평균 (중기)
btc['ma60'] = btc['Close'].rolling(60).mean()

# 200일 이동평균 (장기)
btc['ma200'] = btc['Close'].rolling(200).mean()

골든크로스 / 데드크로스 찾기

# 골든크로스: 단기 이동평균이 장기를 상향 돌파
btc['golden_cross'] = (
    (btc['ma20'] > btc['ma60']) &
    (btc['ma20'].shift(1) <= btc['ma60'].shift(1))
)

golden_dates = btc[btc['golden_cross']].index
print(f"골든크로스 발생일: {len(golden_dates)}회")
for d in golden_dates[-5:]:
    print(f"  {d.date()}")

차트 그리기

종가 + 이동평균 차트

import matplotlib.pyplot as plt

plt.figure(figsize=(14, 6))
plt.plot(btc.index, btc['Close'], label='종가', linewidth=1)
plt.plot(btc.index, btc['ma20'], label='20일 이동평균', linewidth=1)
plt.plot(btc.index, btc['ma60'], label='60일 이동평균', linewidth=1)
plt.title('비트코인 일봉 차트')
plt.xlabel('날짜')
plt.ylabel('가격 (USD)')
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('btc_chart.png', dpi=150)
plt.show()

일별 수익률 분포

plt.figure(figsize=(10, 5))
btc['daily_return'].hist(bins=100, alpha=0.7)
plt.title('비트코인 일별 수익률 분포')
plt.xlabel('일별 수익률')
plt.ylabel('빈도')
plt.axvline(0, color='red', linestyle='--')
plt.tight_layout()
plt.show()

자주 쓰는 판다스 기능 정리

기능코드용도
열 추가df['new'] = df['Close'] * 2새 지표 만들기
필터링df[df['Close'] > 70000]조건 검색
정렬df.sort_values('Volume')거래량 순 정렬
그룹df.groupby(df.index.month).mean()월별 평균
결측치df.dropna()빈 값 제거
저장df.to_csv('data.csv')파일 저장

다음 단계

판다스로 데이터를 다루는 것은 퀀트 분석의 기초 중 기초입니다. 여기서 다음으로 갈 수 있는 방향은 세 가지입니다.

기술적 지표 구현: RSI, MACD, 볼린저밴드 등을 직접 계산하고 시각화

백테스트: 매매 규칙을 만들고 과거 데이터로 수익률 검증

자동매매: 거래소 API에 연결해서 실시간 매매 자동화

어느 방향이든 판다스는 계속 쓰게 됩니다. 이 기본기를 탄탄히 해두면 이후가 훨씬 수월합니다.

#파이썬 #판다스 #주가분석 #데이터분석 #초보자

Newsletter

주간 퀀트·마켓 인사이트 구독

시장 분석, 퀀트 전략 아이디어, AI·데이터 도구 인사이트를 이메일로 받아보세요.

구독하기 →
같은 카테고리 더 보기 TECH →