KRX 정보데이터시스템 : pykrx를 활용해 데이터 스크래핑하기

개요

– KRX 정보데이터시스템 : 코스피 종목 데이터 수집 (Feat. 파이썬)

– 저번 글에서는 직접 KRX 정보데이터시스템(http://data.krx.co.kr/contents/MDC/MAIN/main/index.cmd)에 접속해 필요한 정보들을 다운로드 받았다. 이번에는 파이썬을 활용해 데이터를 수집하는 방법을 알아보자

– 이번 글에서는 KRX에서 삼성전자의 1년치 종가, 거래대금 데이터를 수집해서 로컬 파일에 저장 및 시각화 하는 방법을 알아본다.

사용자 환경

– 나의 파이썬, 라이브러리 버전은 다음과 같다.

1. 파이썬 : Python 3.8.10

2. pykrx : 1.0.48

3. pandas : 2.0.3

4. matplotlib : 3.5.3

코드

from pykrx import stock
import pandas as pd
import matplotlib.pyplot as plt

# 데이터 수집
def get_stock_data(stock_code, start_date, end_date):
    # pykrx를 사용해 날짜 범위 내의 종가와 거래대금 데이터를 가져옴
    df1 = stock.get_market_ohlcv_by_date(start_date, end_date, stock_code) # 시가, 고가, 저가, 종가, 거래량, 등략률, 날짜는 인덱스
    df2 = stock.get_market_cap(start_date, end_date, stock_code) # 시가총액, 거래량, 거래대금, 상장주식수, 날짜는 인덱스
    df1 = df1.reset_index()[["날짜", "종가"]] # 필요한 컬럼만 가져오기 : 날짜, 종가
    df2 = df2.reset_index()[["날짜", "거래대금"]] # 필요한 컬럼만 가져오기 : 날짜, 거래대금
    result_df = pd.merge(df1, df2, on='날짜', how='inner')
    return result_df
    
# 삼성전자 데이터 가져오기
stock_code = "005930"  # 삼성전자 종목 코드
start_date = "20200101"  # 시작 날짜 (YYYYMMDD 형식)
end_date = "20241231"  # 종료 날짜 (YYYYMMDD 형식)
data = get_stock_data(stock_code, start_date, end_date)
data.head()


# 시각화
def plot_data(df):
    # 한글 폰트 설정
    plt.rcParams['font.family'] = 'Malgun Gothic'  # Windows의 맑은 고딕
    plt.rcParams['axes.unicode_minus'] = False  # 마이너스 기호 깨짐 방지
    fig, ax1 = plt.subplots(figsize=(12, 6))
    # 종가(y1)
    ax1.set_xlabel('날짜')
    ax1.set_ylabel('종가', color='blue')
    line1 = ax1.plot(df["날짜"], df['종가'], label='종가', color='blue')
    ax1.tick_params(axis='y', labelcolor='blue')
    # 거래대금(y2)
    ax2 = ax1.twinx()  # 두 번째 y축 생성
    ax2.set_ylabel('거래대금', color='red')
    line2 = ax2.plot(df["날짜"], df['거래대금'], label='Trading Volume', color='red')
    ax2.tick_params(axis='y', labelcolor='red')
    # 제목 및 범례 추가
    lines = line1 + line2
    labels = [line.get_label() for line in lines]
    ax1.legend(lines, labels, loc="upper left")
    plt.title(f'종가 & 거래대금 : {stock_code}')
    fig.tight_layout()  # 레이아웃 조정
    plt.show()
plot_data(data) # 데이터 시각화 실행


# 데이터 저장
DIR_SAVEFILE = "C:/Users/LG/Desktop/" # 데이터 저장할 디렉토리
name_savefile = "stock_data.xlsx" # 저장할 파일 이름
data.to_excel(DIR_SAVEFILE + name_savefile, index=True, index_label="No")

– 코드는 pykrx 공식문서, chatgpt의 도움을 받아 작성했다.

결과물

pykrx를 활용해 2024-01-01~2024-12-31 동안 삼성전자의 종가, 거래대금 데이터를 수집하여 시각화한 결과입니다.

추가 설명

1. 아래의 변수들은 사용자에 따라 수정할 변수들이다.

– stock_code = “005930”  # 삼성전자 종목 코드

– start_date = “20200101”  # 시작 날짜 (YYYYMMDD 형식)

– end_date = “20241231”  # 종료 날짜 (YYYYMMDD 형식)

– DIR_SAVEFILE = “C:/Users/LG/Desktop/” # 데이터 저장할 디렉토리

– name_savefile = “stock_data.xlsx” # 저장할 파일 이름

참고 자료

1. KRX 정보데이터시스템

2. pykrx 깃허브

3. 퀀트 투자 wikidocs