이번 포스팅에서는 금융 데이터 추출 패키지 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 순으로 높게 나타났다.
'문송충의 코딩하기 > 파이썬 데이터 분석' 카테고리의 다른 글
[파이썬] - 서울 2호선 지하철 역별 승하차 승객 수 Folium으로 시각화 (0) | 2020.11.27 |
---|---|
[파이썬] - 넥슨 카트라이더 API를 활용해서 내 카트라이더 매치 정보 가져오기 #1 (1) | 2020.11.25 |
[파이썬] - Pykrx 패키지를 활용한 KOSPI, KOSDAQ 종목별 공매도 잔고 Top 10 기업 추출 (0) | 2020.11.23 |
[파이썬] - Folium 활용하여 서울시 구 기준 인구수 시각화 하기 (1) | 2020.11.22 |
[파이썬] - Youtube API를 활용해서 네고왕 영상 콘멘트 가져오기 (0) | 2020.11.15 |
댓글