티스토리 뷰
[파이썬 데이터 분석] 야후 파이낸스로 코스피·코스닥 장기 캔들 차트 그리기 (자동 저장 + 시각화)
안녕하세요. 금융 데이터 분석 바이브코딩 배우는 중 챗GPT외 Qwen으로 프로그래밍이 가능해서 소개해드립니다.
주식 투자를 하거나 시장 흐름을 분석할 때 가장 기본적이면서도 중요한 작업은 무엇일까요? 바로 정확한 과거 데이터를 확보하고, 이를 시각화(차트)하여 트렌드를 파악하는 것입니다. 많은 분이 네이버나 야후 파이낸스 웹사이트에서 직접 차트를 보지만, 이를 자동으로 다운로드하고 이미지로 저장하여 리포트에 활용하거나 백테스팅에 사용하고 싶다면 어떻게 해야 할까요?
오늘은 파이썬(Python)의 강력한 금융 데이터 라이브러리인 yfinance와 시각화 라이브러리 mplfinance를 사용하여, 코스피(KOSPI)와 코스닥(KOSDAQ) 지수의 장기 일봉 데이터를 가져온 뒤 CSV 파일로 저장하고 전문가 수준의 캔들 차트(Candlestick Chart) 이미지로 추출하는全过程를 상세히 정리해 드립니다.
특히 초보자분들도 쉽게 따라 하실 수 있도록 가상환경(Virtual Environment) 설정부터 실행 방법까지 단계별로 설명하겠습니다.
1. 왜 파이썬으로 주식 데이터를 다뤄야 할까?
웹 브라우저에서 보는 차트는 보기에는 좋지만, 데이터를 가공하거나 다른 분석 도구와 연계하기에는 한계가 있습니다. 파이썬을 사용하면 다음과 같은 이점이 있습니다.
- 자동화: 매일매일 수동으로 캡처하지 않아도, 코드 한 줄로 최신 데이터를 갱신할 수 있습니다.
- 유연성: 가져온 데이터를 pandas DataFrame 형태로 다루므로, 이동평균선 계산, 수익률 분석 등 추가 가공이 자유롭습니다.
- 고품질 시각화:
mplfinance라이브러리를 통해 증권사 HTS 못지않은 깔끔한 캔들 차트를 이미지 파일(png)로 저장할 수 있습니다.
2. 개발 환경 준비 (가상환경 설정)
파이썬 프로젝트를 시작할 때는 항상 가상환경을 사용하는 것이 좋습니다. 이는 프로젝트마다 필요한 라이브러리 버전을 독립적으로 관리하여 충돌을 방지하기 위함입니다.
2-1. 가상환경 생성 및 활성화
터미널(맥/리눅스) 또는 명령 프롬프트(윈도우)를 열고 원하는 폴더로 이동한 후 아래 명령어를 순서대로 입력하세요.
[Mac / Linux 사용자]
# 1. 가상환경 생성 (이름: stock_env)
python3 -m venv stock_env
# 2. 가상환경 활성화
source stock_env/bin/activate
[Windows 사용자]
# 1. 가상환경 생성
python -m venv stock_env
# 2. 가상환경 활성화
stock_env\Scripts\activate
💡 팁: 활성화가 성공하면 명령어 입력 창 앞에
(stock_env)라는 문구가 표시됩니다.
2-2. 필수 라이브러리 설치
가상환경이 활성화된 상태에서 필요한 라이브러리를 설치합니다. 우리는 데이터 수집(yfinance), 데이터 처리(pandas), 차트 그리기(mplfinance), 한글 폰트 지원(koreanize-matplotlib)을 위해 다음 패키지를 사용합니다.
pip install yfinance mplfinance pandas matplotlib koreanize-matplotlib
설치가 완료되면 pip list 명령어로 설치 여부를 확인해 보세요.
3. 전체 소스 코드 작성
이제 본격적으로 코드를 작성해 봅시다. 아래 코드는 야후 파이낸스에서 코스피(^KS11)와 코스닥(^KQ11) 데이터를 가져와 CSV로 저장하고, 캔들 차트를 그려 PNG 이미지로 저장하는 완전한 스크립트입니다.
파일 이름은 stock_chart_maker.py로 저장하세요.
import yfinance as yf
import mplfinance as mpf
import koreanize_matplotlib # 한글 폰트 자동 설정 (중요!)
import matplotlib.pyplot as plt
import pandas as pd
import warnings
import os
# 경고 메시지 무시 (깔끔한 실행을 위해)
warnings.filterwarnings('ignore')
def fetch_and_save_data(ticker, filename_csv, start_date, end_date):
"""
야후 파이낸스에서 지수 데이터를 가져와 CSV 파일로 저장하는 함수
Args:
ticker (str): 야후 파이낸스 티커 (예: ^KS11, ^KQ11)
filename_csv (str): 저장할 CSV 파일명
start_date (str): 시작 날짜 (YYYY-MM-DD)
end_date (str): 종료 날짜 (YYYY-MM-DD)
Returns:
DataFrame: 조회된 데이터프레임, 실패 시 None
"""
try:
print(f"📈 [{ticker}] 데이터 조회 중...")
# yfinance를 사용하여 데이터 다운로드
# progress=False로 진행바 숨김
df = yf.download(ticker, start=start_date, end=end_date, progress=False)
# 데이터가 비어있는지 확인
if df.empty:
print(f"⚠️ [{ticker}] 데이터가 없습니다.")
return None
# 컬럼명 소문자 변환 (mplfinance 호환성 및 일관성 위해)
# yfinance 버전 업데이트에 따라 컬럼명이 튜플일 수 있어 안전하게 처리
new_columns = []
for col in df.columns:
if isinstance(col, str):
new_columns.append(col.lower())
else:
# MultiIndex인 경우 첫 번째 레벨만 사용 (일반적으로 'Close', 'Open' 등)
new_columns.append(col[0].lower() if len(col) > 0 else str(col).lower())
df.columns = new_columns
# 인덱스 이름 제거 (차트 그리기 시 오류 방지)
df.index.name = None
# CSV 파일로 저장
df.to_csv(filename_csv)
print(f"✅ CSV 저장 완료: {filename_csv} (총 {len(df)}개 일봉)")
return df
except Exception as e:
print(f"❌ [{ticker}] 데이터 조회/저장 실패: {e}")
return None
def plot_and_save_chart(df, title, filename_png):
"""
데이터프레임을 받아 캔들 차트를 그려 PNG 이미지로 저장하는 함수
Args:
df (DataFrame): OHLCV 데이터가 포함된 데이터프레임
title (str): 차트 제목
filename_png (str): 저장할 이미지 파일명
"""
if df is None or df.empty:
print(f"⚠️ 차트 생성 건너뜀: 데이터 없음")
return
try:
# 1. 마켓 컬러 설정 (한국식: 상승=빨강, 하락=파랑)
# up='red': 종가가 시가보다 높으면 빨간색 (양봉)
# down='blue': 종가가 시가보다 낮으면 파란색 (음봉)
mc = mpf.make_marketcolors(up='red', down='blue', inherit=True)
# 2. 스타일 적용 (bmh 스타일 기반)
s = mpf.make_mpf_style(marketcolors=mc, base_mpl_style='bmh')
# 3. 차트 그리기 및 저장
# savefig 파라미터를 사용하면 화면 출력 없이 파일로 바로 저장 가능
mpf.plot(df,
type='candle', # 캔들스틱 차트 유형
style=s, # 적용할 스타일
title=title, # 차트 제목
ylabel='Price (KRW)', # Y축 라벨
volume=True, # 거래량 표시 여부
figsize=(14, 7), # 이미지 크기 (가로, 세로)
savefig=filename_png) # 저장할 파일명
print(f"🖼️ 차트 이미지 저장 완료: {filename_png}")
except Exception as e:
print(f"❌ 차트 생성 중 오류 발생: {e}")
import traceback
traceback.print_exc()
def main():
"""
메인 실행 함수
"""
print("=" * 50)
print(" 코스피/코스닥 자동 차트 생성기 시작")
print("=" * 50)
# 1. 설정값 정의
START_DATE = '2020-01-01' # 데이터 시작일
END_DATE = '2026-04-11' # 데이터 종료일 (현재 날짜)
# 처리할 종목 리스트
# 형식: (티커, CSV파일명, PNG파일명, 차트제목)
targets = [
('^KS11', 'kospi_data.csv', 'kospi_chart.png', 'KOSPI Index Candle Chart (2020-2026)'),
('^KQ11', 'kosdaq_data.csv', 'kosdaq_chart.png', 'KOSDAQ Index Candle Chart (2020-2026)')
]
# 2. 각 종목별 데이터 처리
for ticker, csv_name, png_name, title in targets:
print("-" * 30)
# Step 1: 데이터 가져오기 및 CSV 저장
df = fetch_and_save_data(ticker, csv_name, START_DATE, END_DATE)
# Step 2: 차트 그리기 및 이미지 저장
if df is not None:
plot_and_save_chart(df, title, png_name)
print("-" * 30)
print("🎉 모든 작업이 성공적으로 완료되었습니다!")
print(f"📂 현재 폴더에 CSV와 PNG 파일이 생성되었는지 확인하세요.")
if __name__ == "__main__":
main()
4. 코드 핵심 포인트 해설
4-1. yfinance의 강력한 데이터 수집
yf.download('^KS11', ...) 한 줄만으로 야후 파이낸스의 방대한 데이터베이스에 접근합니다. ^KS11은 코스피 지수, ^KQ11은 코스닥 지수를 의미하는 야후 파이낸스의 고유 티커입니다.
4-2. 컬럼명 처리의 중요성
최근 yfinance 업데이트로 인해 데이터프레임의 컬럼명이 문자열이 아닌 튜플 형태 (Ticker, Price)로 반환되는 경우가 있습니다. 이로 인해 .lower() 메서드 호출 시 오류가 발생할 수 있으므로, 코드 내 isinstance(col, str) 체크 로직을 넣어 안정성을 높였습니다.
4-3. 한국식 캔들 색상 적용
미국 시장은 상승이 초록(Green), 하락이 빨강(Red)이지만, 한국 시장은 상승이 빨강(Red), 하락이 파랑(Blue)입니다. mpf.make_marketcolors(up='red', down='blue') 설정을 통해 한국 투자자에게 친숙한 차트로 커스터마이징했습니다.
4-4. 한글 폰트 깨짐 방지
import koreanize_matplotlib 한 줄만 추가하면, matplotlib가 시스템에 설치된 한글 폰트(예: AppleGothic, NanumGothic 등)를 자동으로 찾아 적용해 줍니다. 별도의 폰트 경로 설정 없이도 한글 제목이 깨지지 않습니다.
5. 실행 및 결과 확인
터미널에서 아래 명령어로 스크립트를 실행합니다.
python stock_chart_maker.py
실행이 완료되면 다음과 같은 메시지가 출력되며, 스크립트가 위치한 폴더에 4개의 파일이 생성됩니다.
kospi_data.csv: 코스피 일봉 데이터 (날짜, 시가, 고가, 저가, 종가, 거래량 등)kospi_chart.png: 코스피 캔들 차트 이미지kosdaq_data.csv: 코스닥 일봉 데이터kosdaq_chart.png: 코스닥 캔들 차트 이미지
생성된 png 파일을 열어보면, 배경이 깔끔하고 거래량(Volume)이 하단에 함께 표시된 전문적인 형태의 차트를 확인할 수 있습니다.
6. 마무리하며
오늘은 파이썬을 이용해 금융 데이터를 수집하고 시각화하는 자동화 워크플로우를 만들어 보았습니다. 이 코드를 베이스로 삼아 다음과 같이 확장해 볼 수 있습니다.
- 개별 종목 분석: 티커를
^KS11에서005930.KS(삼성전자) 등으로 변경하여 개별 주식 차트를 만들어 보세요. - 기술적 지표 추가:
mplfinance의addplot기능을 활용해 이동평균선(MA)이나 볼린저 밴드를 차트에叠加해 보세요. - 정기 실행: 윈도우 작업 스케줄러나 맥의 launchd를 이용해 매일 아침 장 시작 전에 자동으로 최신 차트를 생성하도록 설정할 수 있습니다.
데이터 분석은 복잡한 이론보다 직접 손으로 움직여 보는 경험에서 시작됩니다. 오늘 소개해 드린 코드가 여러분의 투자 분석과 파이썬 학습에 작은 도움이 되길 바랍니다.
#파이썬 #데이터분석 #주식차트 #코스피 #코스닥 #yfinance #mplfinance #자동화 #프로그래밍 #코딩초보 #금융데이터 #캔들차트 #주가분석 #파이썬공부 #데이터시각화 #퀀트투자 #주식투자 #개발자 #블로그코딩 #테크니컬분석


본글은 qwen에서 작성한 글입니다.

- Total
- Today
- Yesterday
- 리더십
- 내 안의 숨은 이야기를 찾아 쓰는 법
- 버블새로운부의지도
- 기억조작
- 미니어처요리
- 리더쉽
- 직장인간관계
- AI투자
- 패스트캠퍼스 기업교육
- 신뢰성장
- 원격플레이팅
- ChatGPT
- 버블역사
- 패스트캠퍼스
- 바이브코딩
- 김영하
- 파이썬
- 테스트자동화
- 제미나이
- 능력봉인
- 내눈을보면안돼
- TestRail
- 책줍기2025
- LinkedinLearning
- 무료강의
- 퍼플렉시티
- 현실과초현실의경계
- AI영상제작
- 이한결
- 위생조리컨셉
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |

