파이썬

코스피/코스닥의 시총과 지수 변화 (2001년 6월 ~ 2023년 12월)

오렌지사과키위 2024. 1. 4. 19:55

아래는 코스피/코스닥의 시가 총액과 지수의 최근 22.5년간의 변화를 표시한 그래프입니다. 해당 그래프에서 시가 총액과 지수 모두 배당은 반영되지 않았습니다. 배당은 대략 코스피의 경우 연 2% 정도 코스닥의 경우 연 0.5% 정도입니다.
 

 
굵은 실선은 시가 총액이며, 가는 점선은 지수입니다. 세로축은 로그입니다. 간단하게 살펴보면 지난 22.5년간,

  • 코스피는 시총이 9.9배 상승했고, 지수는 4.3배 상승했습니다. 대략 2.3배 정도 차이가 납니다.
  • 코스닥은 시총이 9.2배 상승했고, 지수는 1.1배 상승했습니다. 대략 8.4배 정도 차이가 납니다

 
이는 시가 총액 / 지수의 비를 그래프로 그려보면 확연히 드러납니다.
 

 
코스닥의 경우 시총과 지수의 차이가 심한데, 주된 이유를 짐작하기는 어렵네요. 대략 추정하기로는 규모가 큰 종목의 상장이 많았기 때문이라 할 수 있는데, 전망이 밝은 대형주들이 코스피로 이전을 한 효과도 영향을 끼치지 않았을까 싶습니다. 간혹 코스닥에서 값이 크게 떨어지는 경우가 있는데, 상장 폐지된게 아니라면 대형주가 코스피로 이전한 경우로 보입니다.
 
이러한 시가 총액과 지수간의 괴리를 이용한 (또는 고려한) 투자가 가능한지는 잘 모르겠네요. 예를 들어 마라탕이 유행해서 이곳저곳에 전문점이 생기는 경우와 비슷합니다. 저희는 몇몇 전망 좋아 보이는 전문점에 투자한 셈입니다.

결과적으로 마라탕 전체 시장은 커졌지만, 개별 전문점의 매출은 큰 변화가 없을 수 있습니다. 그렇다고 처음 생긴 전문점이 시장을 석권하거나 경쟁자가 진입하지 못하도록 (이 경우 시가 총액과 지수간의 괴리가 줄어듭니다) 강제할 수는 없지 않을까 싶습니다.
 

아래는 위의 그래프를 그리는 파이썬 코드입니다. 

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import bt  ## For rebase()
import marcap
import FinanceDataReader as fdr

df = marcap.marcap_data('1995-01-01', '2023-12-31')

kospi = df.loc[df.MarketId == 'STK']   ## KOSPI
kosdaq = df.loc[df.MarketId == 'KSQ']  ## KOSDAQ

kospi_mc = kospi.groupby(kospi.index).Marcap.sum()
kosdaq_mc = kosdaq.groupby(kosdaq.index).Marcap.sum()

kospi_idx = fdr.DataReader('KS11')   ## KOSPI Index
kosdaq_idx = fdr.DataReader('KQ11')  ## KOSDAQ Index

m_df = pd.concat([kospi_mc, kosdaq_mc, kospi_idx.Close, kosdaq_idx.Close], axis = 1).dropna()
m_df.columns = ['KOSPI (marcap)', 'KOSDAQ (marcap)', 'KOSPI (index)', 'KOSDAQ (index)']

ax = m_df[['KOSPI (marcap)', 'KOSDAQ (marcap)']].rebase(1).plot()
plt.gca().set_prop_cycle(None) 
m_df[['KOSPI (index)', 'KOSDAQ (index)']].rebase(1).plot(lw = 0.5, ls = '--', ax = ax)
plt.yscale('log', base = 2)
plt.show()

(m_df['KOSPI (marcap)'] / m_df['KOSPI (index)']).rebase(1).plot(label = 'KOSPI')
(m_df['KOSDAQ (marcap)'] / m_df['KOSDAQ (index)']).rebase(1).plot(label = 'KOSDAQ')
plt.legend()
plt.yscale('log', base = 2)
plt.show()

 
코드에서 사용한 라이브러리 소개

도움이 되었다면, 이 글을 친구와 공유하는 건 어떻까요?

facebook twitter kakaoTalk naver band