본문 바로가기

금융 데이터 분석/실험실

주식 데이터 수집을 위한 DB 스키마

여러 종류의 금융 데이터 (text, 차트, 재무제표 등) 를 동시에 분석하기 위해서는 이 데이터들을 시간으로 맵핑할 필요가 있다.

 

이를 위해서는 timestamp 로 데이터를 정렬해야 하는데, 이 작업에 리소스가 많이 필요하다.

 

이외에도 데이터의 무결성 유지, 주기적인 업데이트 등의 작업이 필요하다.

 

이런 작업 요소들은 MySQL 등의 DBMS 를 사용하면 쉽게 해결할 수 있다.

 

현업에서도 MySQL 을 사용하는 것으로 알고있는 필자는 경험삼아 MySQL 을 사용하기로 했다.

 

 

DB schema 는 아래와 같이 구성했다. 추후 더 필요한 데이터가 생길 경우에는 다른 테이블이 추가될 수 있다.

 

작업을 하다보면 점점 field 수가 늘어 나중에는 각 field 에 무엇을 저장하려고 했는지 기억이 안날 수 있다.

 

필자는 본 블로그에 문서화를 하듯이 각자 문서화 툴에 문서화를 해두도록 하자.

 

 

 

Item

종목에 대한 정보를 저장한다. 캔들차트, 수급, 뉴스 등의 다른 데이터를 저장하기 전에 해당 종목의 정보를 이 테이블에 저장하는 작업이 선행되어야 한다.

 

column name description
code 종목코드
fullcode 종목코드보다 길이가 긴 full code 가 있는 경우 사용. e.g.) 한국거래소 종목코드
country 종목이 상장되어 있는 나라
name 종목명
market 종목이 상장된 시장 (KOSPI, KOSDAQ, NYSE, NASDAQ 등)
sector_name 섹터명
sector_code 섹터코드
type 항목타입 (개별종목, 지수, 매크로, 선물 등)

 

 

ohlcv

각 항목들의 캔들차트를 저장한다. 데이터가 ohlc 형식이 아니라 단순 값 하나로 구성된 경우에는 close 에 가격을 저장한다.

 

colume name description
code item table 에 있는 종목코드
window_size 캔들의 시간 크기 (1분, 30분, 1시간 등). 단위는 분으로 표기한다
timestamp 캔들차트가 완성된 시간 (close price의 시점). 표기는 unix time 으로 한다.
open 시가
high 고가
low 저가
close 종가 혹은 값
volume 거래량
trading_val 거래대금 (거래량 * 종가)

 

 

invest_agent_vol

거래 주체별 거래량을 저장한다.

 

column name description
code item table 에 있는 종목코드
window_size 샘플의 시간 크기 (1분, 30분, 1시간 등). 단위는 분으로 표기한다
timestamp 캔들차트가 완성된 시간 (close price의 시점). 표기는 unix time 으로 한다.
foreign_share 외인 보유량
foreign_share_rate 외인 보유비율
foreigh_buy_volume 외인 순매수량
isttt_share 기관 보유량
isttt_share_rate 기관 보유비율
isttt_buy_volume 기관 순매수량
indi_share 개인 보유량
indi_share_rate 개인 보유비율
indi_buy_volume 개인 순매수량
volume 총 거래량
close 종가

 

 

fundamental

기업의 주요 현황 및 재무 정보를 저장한다.

column name description
code item table 에 있는 종목코드
timestamp fundamental 계산한 시간. 웬만하면 일봉 완성 시간을 입력하는 것이 좋다. 표기는 unix time 으로 한다.
close 일봉 종가
volume 일 거래량
issued_share 발행주식 수
cap 시가총액
sector_per 동종업계 PER
dividend 배당금
div_release_date 배정기준일
div_payment_date 현금배당 지급일
fin_closing_date 사업보고서 접수일
fin_prev_closing_date 이전 사업보고서 접수일
total_revenue 매출액
operating_income 영업이익
net_income 순이익
total_assets 자산총계
total_liabilities 부채총계
total_equity 자기자본

 

 

text_data

뉴스, 토론글, SNS 등의 자연어 데이터를 저장

column name description
code item table 에 있는 종목코드
timestamp 글이 발행된 시간 (close price의 시점). 표기는 unix time 으로 한다.
title 제목
content 텍스트
num_view 조회수
num_like 좋아요 수
num_dislike 싫어요 수
type 글 유형 (뉴스, 자유게시판, SNS 등)
url 원문 url
writer 글쓴이 닉네임

 

 

이제 쿼리로 옮기도록 하자.

 

분석을 하다가 새로운 데이터가 필요한 경우에는 업데이트 하도록 한다.

본 블로그는 쿠팡 파트너스 활동을 포함하고 있으며, 이에 따른 일정액의 수수료를 제공받습니다.