파이썬

시가총액 데이터셋(marcap)을 사용해 보자 (파이썬)

오렌지사과키위 2024. 1. 4. 18:12

marcap은 국내 종목에 대한 시가 데이터셋을 제공하는 파이썬 라이브러리입니다. git 명령어를 이용하여 아래와 같이 가져올 수 있습니다.

 

$ git clone "https://github.com/FinanceData/marcap.git" marcap
----------

Cloning into 'marcap'...
remote: Enumerating objects: 4165, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4165 (delta 0), reused 1 (delta 0), pack-reused 4161
Receiving objects: 100% (4165/4165), 2.71 GiB | 30.83 MiB/s, done.
Resolving deltas: 100% (2956/2956), done.
Updating files: 100% (37/37), done.

 

 

위 명령을 실행하면, 현재 디렉토리 밑에 marcap 디렉토리(폴더)가 생기고, 여기에 데이터와 파이썬 라이브러리가 복사됩니다.

 

복사된 파일들을 살펴보면, marcap_utils.py는 marcap 데이터를 읽을 수 있는 유틸리티 함수이며, data/ 디렉토리 밑에 년도별로 시총가총액 데이터가 압축되어 저장됩니다. 1995년도부터 데이터가 제공됨을 알 수 있습니다. 정확하게는 1995년 5월 2일부터 (5월 1일은 근로자의 날로 공휴일이었습니다) 데이터가 제공됩니다.

 

해당 데이터의 원 소스는 KRX 정보데이터시스템 웹 사이트에서 제공하는 전종목 시세입니다. 이 페이지에서는 일자별로 시가총액 데이터를 다운로드 받을 수 있는데, marcap은 이를 매일 실행해서 합쳐 놓은 데이터셋입니다.

 

아쉽게도 2024년 1월 4일 5시 현재, 2024년도 데이터는 업데이트  되어 있지 않습니다. marcap은 대개 거래일 다음날 오전 6시에 업데이트가 시작됩니다.

 

ls -F marcap
----------

_config.yml  data/  docs/  __init__.py	marcap_utils.py  __pycache__/  README.md

----------

!ls -F marcap/data
----------
marcap-1995.csv.gz  marcap-2001.csv.gz	marcap-2007.csv.gz  marcap-2013.csv.gz	marcap-2019.csv.gz
marcap-1996.csv.gz  marcap-2002.csv.gz	marcap-2008.csv.gz  marcap-2014.csv.gz	marcap-2020.csv.gz
marcap-1997.csv.gz  marcap-2003.csv.gz	marcap-2009.csv.gz  marcap-2015.csv.gz	marcap-2021.csv.gz
marcap-1998.csv.gz  marcap-2004.csv.gz	marcap-2010.csv.gz  marcap-2016.csv.gz	marcap-2022.csv.gz
marcap-1999.csv.gz  marcap-2005.csv.gz	marcap-2011.csv.gz  marcap-2017.csv.gz	marcap-2023.csv.gz
marcap-2000.csv.gz  marcap-2006.csv.gz	marcap-2012.csv.gz  marcap-2018.csv.gz

 

최신 데이터로 업데이트 하고자 하는 경우에는 marcap 디렉토리에서 git pull 명령을 실행하면 됩니다. 업데이트가 있는 경우 변경된 부분만 받아오기에, 처음에 git clone 명령으로 전체를 받아올때에 비해 훨씬 빨리 실행이 완료됩니다.

 

!cd marcap; git pull
----------

Already up to date.

 

 

유틸리리 함수들의 기능이 조금 미약합니다. 예를 들어 데이터에서 가장 오래된 날짜나 가장 최근 날짜를 찾아주는 함수가 없습니다. 종목별로 이러한 날짜를 알 수 있으면 사용하기 수월할텐데 아쉽습니다.

 

데이터 전체를 불러와 가장 최근 날짜의 데이터를 살펴보면, 우선주도 포함되어 있음을 알 수 있습니다. ETP(ETF/ETN)는 포함되어 있지 않습니다. 기초적인 가격 정보외에도 거래량과 시장(MarketId 컬럼 기준으로 코스피, 코스닥, 코넥스), 그리고 그 날의 시총 순위가 함께 제공됩니다.

 

import marcap

df = marcap.marcap_data('1995-01-01', '2024-12-31')
display(df.loc[df.index.max()])

 

 

시가/고가/저가/종가는 모두 수정전 가격이므로 사용할 때 주의해야 합니다. 아래와 같이 삼성전자의 액면 분할이 고려되어 있지 않습니다. 당연히 배당도 고려되어 있지 않습니다. 수정주가가 필요한 경우에는 FinanceDataReader를 쓰는 것이 좋습니다.

 

import matplotlib.pyplot as plt
import seaborn as sns

sns.set_style('whitegrid')

df[df.Name == '삼성전자'].Close.plot()
plt.title('Samsung Electronics (stock price)')
plt.show()

 

 

시가총액 데이터를 이용하면 (대개 수정주가나 종목에 대한 세부 정보가 추가로 필요합니다) 활용에 따라서는 흥미로운 데이터를 도출할 수 있습니다. 예를 들어,

  • 시총과 주가 지수간의 관계
  • 전체 시총에서 시총 상위 종목들이 차지하는 비율의 변화
  • 전체 시총에서 섹터별 비중의 변화
  • 상위 시총 (대형주) 또는 하위 시총 (소형주)간의 장기 수익률 차이
  • 신규 상장 후 기간별 평균적인 가격의 변화
  • 평균 상장 유지 기간
도움이 되었다면, 이 글을 친구와 공유하는 건 어떻까요?

facebook twitter kakaoTalk naver band