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

Dart 전자공시시스템 API를 통해 현대자동차 재무 Data 가져오기 With Python #1 - 손익계산서

by 동장군님 2020. 7. 16.
728x90
반응형

항상 주식 종목 분석을 할 때 가장 귀찮은 점이 바로 재무지표 확인하는 것이다. Dart, 네이버 증권 사이트 들어가서 하나하나 체크하는 게 너무 번거로웠다, 그런 불편한 부분 때문에 이번 분석 프로젝트를 시작했다. 이번 프로젝트는 조금 장기적으로 가져가려고 한다. 종목코드/회사 명만 입력하면 분석에 필요한 지표/데이터가 포함된 액셀이 자동으로 다운로드할 수 있도록 하는 것이 이번 프로젝트에 최종 목표 결과물이라고 볼 수 있겠다. 종목 분석할 때 다른 거 다 필요 없이 이 액셀만 가지고 할 수 있도록 만들어보겠다.

 

종목 분석 시 보는 재무 지표가 다양하기 때문에 이번 글에서는 가장 주요한 손익계산서를 Dart 전자 공시 시스템에서 가져와보도록 하겠다. 그리고 간단하게 정리하고 매출액, 영업이익을 가지고 시각화까지 해보고 이번 분석 편은 마무리하도록 하겠다.

 

 


1. Dart 전자공시시스템에서 API 받기

주식을 하는 사람이면 Dart를 모를 수가 없을 것이다. 국내 웬만한 기업들의 정보를 공시하는 사이트로 주식 분석할 때 필요한 데이터 모두 여기에 있다고 보면 된다. 여기 사이트에서 API를 제공하는 데 사이트에 들어가서 API 신청만 하면 바로 API 키값이 부여될 것이다. 어려울 것 없다. 아래 사이트 확인하시길...

https://opendart.fss.or.kr/intro/main.do

 

전자공시 OPENDART 시스템 | 오픈API 소개 | 오픈API 소개

오픈API 소개 오픈API 소개 오픈API 소개 DART에 공시되고있는 공시보고서 원문 등을 오픈API를 통해 활용할 수 있습니다. 활용을 원하시는 누구든지(개인, 기업, 기관 등) 이용하실 수 있습니다. DART

opendart.fss.or.kr

처음 이 분석을 시작할 때 어디부터 시작해야 되는 지 굉장히 막막했는데, 역시 이 시장에서는 저랑 같은 고민을 한 사람이 저 혼자가 아니었다. 이미 Dart에서 데이터를 가져올 수 있게 하는 라이브러리를 만든 구세주가 계셨다. 정말 이 분 덕분에 몇 시간을 세이브할 수 있었다.

https://pypi.org/project/dart-fss/

 

dart-fss

Web-scraping http://dart.fss.or.kr

pypi.org

pip install dart-fss 하면 분석에 필요한 사항은 다 준비된 것이다.

 

 

2. 분석하고자 하는 종목 손익계산서 가져오기

 

설명할 것도 없다. 간단하다. 여기서 내가 분석하고자 하는 기업은 또 현대자동차다. 내가 많이 물려있어서 분석하는 것은 아니다.

import dart_fss as dart

#분석 종목 확인하기
api_key='' #api_key 입력
dart.set_api_key(api_key=api_key)
corp_list = dart.get_corp_list()
code=corp_list.find_by_corp_name('현대자동차',exactly=True)[0]


#재무제표 가져오기
fs = code.extract_fs(bgn_de='20150101') #기간 설정

#재무제표 중에서 IS(income statement) 가져오기
df_is=fs['is']

 

Dart 정말 데이타 정리 안 해놓는다 위 df_is 테이블을 출려하면 아래와 같이 엉망진창으로 나온다. 얼추 정리하면 될 듯한데 사람 너무 귀찮게 한다. 칼럼 정리도 하나도 안 해놓고...

 

3. 손익계산서 데이터 정리

위에 있는 칼럼부터 정리하겠다. 아래처럼 정리하고 income_statement를 출려해보겠다.

import pandas as pd

#테이블이 너무 복잡하게 구성되어 있어 우선 앞에 Index와 뒤에 data 부분을 나눠서 정리했다.
index=df_is['[D310000] Income statement, by function of expense - Consolidated financial statements (Unit: KRW)']['label_ko']
df_index=pd.DataFrame(index)
df_contents=df_is[['20190101-20191231','20180101-20181231','20170101-20171231','20160101-20161231','20150101-20151231','20140101-20141231']].droplevel(1,axis=1)

#Index와 data 합치기
income_statement=pd.merge(df_index,df_contents,left_index=True, right_index=True)

#필요한 열만 가져오기
income_statement.columns=['Label','2019','2018','2017','2016','2015','2014']

많이 깔끔해졌다.

 

4. 시각화

 

내가 손익계산서에서 가장 중요시하는 지표가 바로 매출 증감률, 영업이익 증감률, 그리고 영업이익률 증감률이다. 위 손익계산서를 활용해 이 3가지 데이터를 시각화해보겠다.

 

income_statement.set_index('Label',inplace=True)

#매출액/영업이익 행과 2014~2019 열만 가져오고 날짜 오름차순 정열
sales_op_df=pd.DataFrame(income_statement.iloc[[0,4],[0,1,2,3,4,5]]).transpose().sort_index(ascending=True)

#영업이익율 구하기
sales_op_df['영업이익율']=sales_op_df['영업이익']/sales_op_df['매출액']

#매출/영업이익/영업이익증감율 구하기
sales_op_df[['전년매출액','전년영업이익','전년영업이익율']]=sales_op_df[['매출액','영업이익','영업이익율']].shift(1)
sales_op_df['매출액 변화']=(sales_op_df['매출액']-sales_op_df['전년매출액'])/sales_op_df['전년매출액']
sales_op_df['영업이익 변화']=(sales_op_df['영업이익']-sales_op_df['전년영업이익'])/sales_op_df['전년영업이익']
sales_op_df['영업이익율 변화']=sales_op_df['영업이익율']-sales_op_df['전년영업이익율']
sales_final_df=sales_op_df.iloc[1:].drop(['전년매출액','전년영업이익','전년영업이익율'],axis=1)

 

위 코드를 돌리면 아래와 같은 결과가 출력된다.

 

꺾은 선 그래프로 시각화해보도록 하겠다.

y축 퍼센트와 마이너스 축이 안돼서 좀 고생했는데 다 끝냈다.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import font_manager, rc
from matplotlib import style
import matplotlib

#마이너스 기호 표기
matplotlib.rcParams['axes.unicode_minus'] = False

plt.rcParams["figure.figsize"] = (12,8)
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)

style.use('ggplot')
plt.plot(sales_final_df[['매출액 변화','영업이익 변화','영업이익율 변화']])
ax=plt.subplot()
ax.legend(['매출액 증가율','영업이익 증가율','영업이익율 증가율'])

#y축 퍼센트로 표기하는 법
ax.set_yticks([-0.6,-0.4,-0.2,0,0.2, 0.4, 0.6])
ax.set_yticklabels(['-60%', '-40%', '-20%','0%','20%','40%','60%'])

plt.show()

 

 

최종 결과물

역시 애증의 현대자동차다. 영업이익이 작년에 큰 폭으로 상승했지만 이전 4년 동안 영업이익이 계속 죽 쒔다는 점이 정말 아쉽다. 매출액은 그래도 꾸준히 증가하는 모습이지만 현대차 이름값에 걸맞지 않은 모습이다. 올해 코로나 이슈를 생각한다면 더욱 지표는 악화될 것으로 예상되기에 존버각이 보인다. 내년 조선반도 연합군을 통한 전기차가 성공을 거둬 이 상황을 반전시켜줬으면 한다. 성의 없는 코딩 끝

 

 

728x90
반응형

댓글