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

공공데이터 API 활용해서 2019년 코스피 배당주 리스트 가져오기 With Python

by 동장군님 2020. 9. 29.
728x90
반응형

내가 주식 투자를 할 때 가장 먼저 보는 지표가 바로 배당이다. 지금과 같이 저금리 시대에서 배당주 투자는 현재 저금리 시대 저금과 예금을 완벽히 대체할 수 있는 투자 전략이기 때문이다. 그래서 오늘은 배당 관련해서 파이썬으로 뭘 뽑아보고자 한다. 공공데이터를 살펴보니 국내 코스피/코스닥에 상장된 기업들에 대해 배당금을 얼마나 지급했는지를 API로 제공하고 있어서 파이썬으로 이걸 한번 분석? 추출해보고자 한다. 코스피 시장에서 배당금을 지급하는 기업이 어디인지 데이터로 보도록 하겠다.

 

1. Data Source

공공데이터 회원가입을 한 후 아래 페이지에서 한국 예탁결제원_주식정보서비스 API 활용 신청을 해야 한다. 신청 즉시 API 키 값이 바로 부여가 될 것이다.

data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15001145

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

data.go.kr

2. 공공데이터 API를 통한 Data 가져오기

아래 Key 변수에 부여 받은 API Key 값을 작성하고 코드를 돌리면 데이터가 정상적으로 추출될 것이다.

여기서 요청 Paramater를 주의해서 작성해야 되는데, 각 파라미터 정의는 다음과 같다.

- stkTpcd: 주식종류(1. 보통주 or 2. 우선주)

- listTpcd: 상장구분(11. 유가증권시장 12.코스닥시장 13.K-OTC시장 14.코넥스시장 50.기타비상장)

- rankTpcd: 순위구분(1.시가배당율, 2.액면가배당율)

- year: 기준년도()

- numOfRows: 페이지 결과수

- pageNo: 페이지 번호

여기서는 나는 보통주와 유가증권시장 즉 코스피 시장을 확인할 예정이라 1번과 11번을 선택하였다. 당연히 시가 배당률 기준으로 순위를 구분했고, 기준연도는 2019년으로 세팅하였다.

from urllib.request import urlopen
from urllib.parse import urlencode, unquote, quote_plus
import urllib
import requests
import pandas as pd
import xmltodict
import json
from pandas_datareader import data
from datetime import datetime

key='~API Key ~'
url=f'http://api.seibro.or.kr/openapi/service/StockSvc/getDividendRankN1?serviceKey={key}&'
queryParams =urlencode({quote_plus('stkTpcd') : '1', quote_plus('listTpcd') : '11', 
                               quote_plus('rankTpcd') : '1', quote_plus('year') : '2019', quote_plus('numOfRows') : '1000', 
                               quote_plus('pageNo') : '1' })
url2 = url + queryParams
response = urlopen(url2) 
results = response.read().decode("utf-8")
results_to_json = xmltodict.parse(results)
data = json.loads(json.dumps(results_to_json))

3. 데이터 정리 & CSV 파일 저장

위에서 추출된 데이터에서 아래 전처리 과정을 거치고 나면 우리가 원하는 기업별 배당금을 확인할 수가 있다. 크게 어려운 코드가 없기 때문에 코드 설명은 넘어가겠다. 유의할 점은 일부 종목에 대해서는 배당금 데이터가 없는 0으로 나타나고 있었다. 그래서 배당금이 0으로 나타난 기업들은 제외하였다.

data2=data['response']['body']['items']['item']

dividends=[]
corp=[]
ticker=[]
for i in data2:
    dividends.append(i['divAmtPerStk'])
    corp.append(i['korSecnNm'])
    ticker.append(i['shotnIsin'])

df=pd.DataFrame([corp, ticker, dividends]).T
df.columns=['기업명','기업코드','주당 배당금']
df['주당 배당금']=df['주당 배당금'].astype(float).astype(int)
df2=df[df['주당 배당금']!=0]

df2.to_csv('코스피 배당주.csv',encoding='euc-kr')

위 코드를 돌리고 파일이 출력되면 아래와 같은 결과물을 확인할 수 있을 것이다. 

 

 

 

 

 

728x90
반응형

댓글