파이썬으로 증권 데이터 분석하는 방법
파이썬은 주식과 ETF 같은 증권 데이터를 수집하고 분석하는 데 널리 활용되는 프로그래밍 언어입니다. 복잡한 금융 데이터를 표 형태로 정리하고, 수익률과 변동성을 계산하며, 차트로 시각화할 수 있다는 점이 큰 장점입니다.
이번 글에서는 파이썬을 활용해 증권 데이터를 분석하는 기본 과정과 주요 라이브러리, 실전에서 확인해야 할 분석 지표를 쉽게 정리해보겠습니다.
파이썬 증권 데이터 분석이란?
파이썬 증권 데이터 분석은 주가, 거래량, 배당, 재무 정보 등의 데이터를 수집한 뒤 투자 판단에 도움이 되는 의미 있는 정보를 찾아내는 작업입니다.
단순히 주가 차트를 확인하는 것과 달리 파이썬을 사용하면 여러 종목의 데이터를 동시에 비교하거나, 특정 조건에 맞는 종목을 검색하고, 과거 데이터를 활용해 전략을 검증할 수 있습니다.
일반적인 증권 데이터 분석 과정은 다음과 같습니다.
- 분석 대상과 목적 정하기
- 주가 및 거래량 데이터 수집하기
- 결측치와 오류 데이터 정리하기
- 수익률과 기술적 지표 계산하기
- 차트와 표로 결과 시각화하기
- 분석 결과를 검증하고 해석하기
증권 데이터 분석에 필요한 파이썬 라이브러리
판다스
판다스는 표 형태의 데이터를 처리하는 대표적인 파이썬 라이브러리입니다. 날짜별 주가 데이터를 불러오고, 열을 추가하거나 조건에 따라 데이터를 필터링할 때 사용합니다.
판다스의 핵심 자료구조인 데이터프레임을 활용하면 주가와 거래량 데이터를 엑셀 표처럼 편리하게 관리할 수 있습니다.
넘파이
넘파이는 수치 계산과 배열 처리를 위한 라이브러리입니다. 평균 수익률, 표준편차, 상관관계, 누적 수익률 등을 계산할 때 유용합니다.
맷플롯립
맷플롯립은 분석 결과를 차트로 표현할 때 사용하는 시각화 라이브러리입니다. 주가 추이, 거래량, 이동평균선, 수익률 곡선 등을 그래프로 만들 수 있습니다.
증권 데이터 수집 라이브러리
주가 데이터를 분석하려면 먼저 데이터를 확보해야 합니다. 파이썬에서는 공개 데이터 API나 증권 데이터 제공 서비스를 이용해 일별 시세, 거래량, 배당 정보 등을 불러올 수 있습니다.
다만 데이터 제공 서비스마다 이용 조건과 제공 범위가 다르므로 사용 전에 이용 약관과 데이터 기준일을 확인해야 합니다.
파이썬으로 주가 데이터 불러오기
다음은 데이터프레임에 저장된 주가 데이터를 불러와 기본적인 구조를 확인하는 예시입니다.
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv("stock_data.csv")
data["Date"] = pd.to_datetime(data["Date"])
data = data.sort_values("Date")
print(data.head())
print(data.info())
데이터를 불러온 뒤에는 날짜 열의 형식이 올바른지, 종가와 거래량에 빈 값이 없는지 확인해야 합니다. 날짜가 문자열로 저장되어 있으면 기간별 분석이나 차트 작성에서 오류가 발생할 수 있습니다.
주가 데이터 전처리 방법
전처리는 분석 전에 데이터를 정리하는 과정입니다. 증권 데이터에는 거래가 발생하지 않은 날짜, 누락된 가격, 중복 행 등이 포함될 수 있으므로 분석 목적에 맞게 정리해야 합니다.
결측치 확인하기
print(data.isnull().sum())
결측치가 발견되면 해당 행을 제거하거나, 앞뒤 값으로 보완할 수 있습니다. 다만 무조건 빈 값을 채우기보다는 결측치가 발생한 이유를 먼저 확인하는 것이 중요합니다.
일간 수익률 계산하기
주가 자체보다 일정 기간 동안 얼마나 변했는지를 확인하려면 수익률을 계산해야 합니다.
data["Daily_Return"] = data["Close"].pct_change()
data["Cumulative_Return"] = (1 + data["Daily_Return"]).cumprod() - 1
일간 수익률은 전 거래일 대비 주가가 얼마나 변했는지를 보여줍니다. 누적 수익률을 함께 계산하면 특정 기간 동안 투자금이 어떻게 변화했는지 확인할 수 있습니다.
이동평균과 기술적 지표 분석하기
이동평균은 일정 기간의 평균 가격을 계산해 주가의 추세를 파악하는 지표입니다. 단기 이동평균과 장기 이동평균을 함께 사용하면 가격 흐름의 변화를 비교할 수 있습니다.
data["MA20"] = data["Close"].rolling(window=20).mean()
data["MA60"] = data["Close"].rolling(window=60).mean()
이동평균선이 상승하면 일정 기간 동안 주가가 강한 흐름을 보였을 가능성이 있습니다. 그러나 이동평균만으로 매매 결론을 내리기보다는 거래량, 시장 상황, 기업의 펀더멘털 등을 함께 고려해야 합니다.
증권 데이터 시각화하기
숫자로만 구성된 데이터를 차트로 표현하면 주가 추세와 변동성을 더 쉽게 파악할 수 있습니다.
plt.figure(figsize=(12, 6))
plt.plot(data["Date"], data["Close"], label="Close")
plt.plot(data["Date"], data["MA20"], label="20-day Average")
plt.xlabel("Date")
plt.ylabel("Price")
plt.title("Stock Price Analysis")
plt.legend()
plt.grid(True)
plt.show()
차트를 만들 때는 제목과 축 이름, 범례를 명확하게 표시하는 것이 좋습니다. 차트가 지나치게 복잡하면 핵심 흐름을 파악하기 어려우므로 분석 목적에 맞는 지표만 선택해야 합니다.
파이썬으로 확인할 주요 성과 지표
수익률
수익률은 투자 기간 동안 자산 가치가 얼마나 증가하거나 감소했는지를 나타냅니다. 누적수익률과 연환산 수익률을 구분해 확인하면 투자 기간이 다른 전략도 비교할 수 있습니다.
변동성
변동성은 수익률이 평균을 기준으로 얼마나 크게 움직였는지를 보여줍니다. 변동성이 높을수록 수익 기회가 클 수 있지만, 동시에 손실 가능성도 커질 수 있습니다.
최대 낙폭
최대 낙폭은 고점에서 저점까지 가장 크게 하락한 비율입니다. 전략의 수익률이 높더라도 최대 낙폭이 지나치게 크다면 실제 투자 과정에서 큰 부담이 될 수 있습니다.
샤프지수
샤프지수는 감수한 위험에 비해 얼마나 효율적으로 수익을 냈는지 평가하는 지표입니다. 수익률이 높은 전략뿐만 아니라 변동성 대비 성과가 안정적인 전략을 비교할 때 활용할 수 있습니다.
증권 데이터 분석 시 주의할 점
과거 주가 데이터를 분석해 좋은 결과를 얻었다고 해서 미래 수익이 보장되는 것은 아닙니다. 과거 데이터에 지나치게 맞춘 과최적화가 발생할 수 있으며, 거래 수수료와 세금, 슬리피지에 따라 실제 수익률이 달라질 수 있습니다.
또한 분석에 사용한 데이터가 수정주가인지 일반 종가인지, 배당금이 반영되었는지 확인해야 합니다. 데이터 기준이 서로 다르면 분석 결과를 잘못 해석할 수 있습니다.
마무리
파이썬은 증권 데이터를 체계적으로 수집하고 분석하는 데 매우 유용한 도구입니다. 판다스로 데이터를 정리하고, 넘파이로 수익률을 계산하며, 맷플롯립으로 분석 결과를 시각화하면 초보자도 기본적인 증권 데이터 분석을 시작할 수 있습니다.
다만 단순히 주가가 상승했는지 확인하는 것보다 수익률, 변동성, 최대 낙폭, 거래 비용을 함께 분석해야 합니다. 과거 분석 결과는 참고 자료일 뿐이며, 실제 투자에서는 시장 상황과 위험 관리 원칙을 함께 고려해야 합니다.