본문 바로가기
문송충의 코딩하기/파이썬 데이터 분석

[파이썬] - Pykrx 패키지를 통해 국내 상장 종목별 외국인 보유 비중 확인

by 동장군님 2020. 11. 24.
728x90
반응형

이번 포스팅에서는 금융 데이터 추출 패키지 Pykrx를 통해 외국인이 투자한 국내 종목 현황을 체크해보도록 하겠다. 코드를 작성하기 앞서서 간단하게 설명해야 될 포인트가 있다. 주식 투자를 하는 분들은 아시겠지만 국내 주식 시장에는 외국인이 종목별로 보유할 수 있는 최대한도가 있다. 외국인이 아무리 많이 투자하더라도 국내 상장 기업의 주식 100%를 제도상 소유할 수는 없다. 

 

외국인 보유 현황 데이터 추출

코스피, 코스닥 종목 전체를 가져오도록 하겠다.

from pykrx import stock
import pandas as pd
kospi = stock.get_exhaustion_rates_of_foreign_investment_by_ticker('20201120', "KOSPI")
kosdaq = stock.get_exhaustion_rates_of_foreign_investment_by_ticker('20201120', "KOSDAQ")
stocks=pd.concat([kospi,kosdaq],axis=0)

 

stocks 변수를 출력하면 아래와 같은 외국인 투자 관련 정보를 얻을 수 있다. 여기서 소진율이란 종목별로 외국인이 보유할 수 있는 최대한도 주식 수 중 실제 외국인이 보유한 수량 비중을 뜻한다.

 

 

 

종목 기업명 가져오기

위 데이터에서는 종목코드만 달랑 있다 보니 이게 무슨 기업인지 알 수가 없다. 그래서 한국거래소에 있는 상장 기업 리스트 가져와 위 외국인 투자 정보 데이터와 결합하도록 하겠다.

 

df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download', header=0)[0]
df=df[['회사명','종목코드']]
df['종목코드']=df['종목코드'].astype(str)
df['종목코드']=df['종목코드'].apply(lambda x: '00'+ str(x) if len(str(x)) ==4 else x)
df['종목코드']=df['종목코드'].apply(lambda x: '0'+ str(x) if len(str(x)) ==5 else x)
df2=df.set_index('종목코드')

table=pd.merge(left=df2,right=stocks,how='left',left_on=df2.index,right_on=stocks.index)
table=table.dropna()
table=table.rename(columns={'key_0':'code'})
table=table.set_index('code')

table 변수를 출력하면 종목코드, 회사명 다 나타나고 있는 것을 확인할 수 있다.

 

 

 

외국인 소진율 Top 10 종목

table=table.sort_values(by='소진률',ascending=False)
sojin =table[:10]

import matplotlib.pyplot as plt

plt.rcParams["font.family"] = 'Malgun Gothic'
plt.rcParams["font.size"] = 12
plt.figure(figsize=(16,8))

plt.bar(sojin['회사명'],sojin['소진률'])
for x,y in enumerate(list(sojin['소진률'])):
    plt.text(x, y, '{:.2f}%'.format(y), fontsize=13, color='#ff0000', 
                    horizontalalignment='center', verticalalignment='bottom')
plt.title('11월 20일 종목별 외국인 소진율 Top 10')
plt.show()

 

내가 실제로 보유한 KT가 외국인 소진율 국내 1위다. 외국인이 가질 수 있는 최대한도 중 89%를 이미 보유한 상황이다. 아무래도 배당과 안전성이 국내 시장에서는 꽤 높아서 그렇지 않나 싶다. 동양생명은 애초에 약 80% 지분을 중국기업이 보유한 상황이고, 국내 투자자의 지분은 10%에 불과하다. 그냥 외국 기업이다.

 

 

 

 

외국인 보유율 Top 10 종목

 

table=table.sort_values(by='외국인 보유률',ascending=False)
foreign =table[:10]

plt.rcParams["font.family"] = 'Malgun Gothic'
plt.rcParams["font.size"] = 12
plt.figure(figsize=(16,8))

plt.bar(foreign['회사명'],foreign['외국인 보유률'])
for x,y in enumerate(list(foreign['외국인 보유률'])):
    plt.text(x, y, '{:.2f}%'.format(y*100), fontsize=13, color='#ff0000', 
                    horizontalalignment='center', verticalalignment='bottom')
plt.title('11월 20일 종목별 외국인 보유률 Top 10')
plt.show()

 

 

중국이 대주주로 지분을 보유한 동양생명과 SNK, 글로벌 기업평가 피치가 대주주로 있는 한국기업평가, 인도 마힌드라가 대주주로 있는 쌍용자동차, 세계 최대 석유회사 아람코의 S-Oil 순으로 높게 나타났다. 

 

 

 

728x90
반응형

댓글