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

Dart 전자공시시스템 API를 통해 현대자동차 Data 가져오기 With Python #2 - 재무상태표

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

이번 글에서는 저번 시간에 이어서 Dart API를 통해 현대자동차의 재무상태표 데이터를 가져오고, 대표적인 기업 건전성 판단 지표인 유동비율, 부채비율, 자본 유보율을 계산해보도록 하겠다.

 

저번 손익계산서 부분과 코딩상에서는 큰 차이가 없다. 다만 지표를 하나하나 집계해야 되기에 좀 번거로운 점이 있지만, 크게 어려울 것은 없다. 바로 코드 설명하도록 하겠다.


 

1. 지난 글과 동일하게 우선 API를 통해 현대자동차의 2014년부터의 재무 상태표를 가져오도록 하겠다.

import dart_fss as dart
import pandas as pd
import matplotlib.pyplot as plt

#분석 종목 확인하기
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='20140101') #기간 설정

#재무상태표 가져오기
df_bs=fs['bs']

 

2. 재무상태표 데이터 정리

index=df_bs['[D210000] Statement of financial position, current/non-current - Consolidated financial statements (Unit: KRW)']['label_ko']
df_index=pd.DataFrame(index)
df_contents=df_bs[['20191231','20181231','20171231','20161231','20151231','20141231']].droplevel(1,axis=1)

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

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

재무상태표 출력 결과는 아래와 같이 정리됐음을 확인할 수 있다.

양이 많아서 아래 부분은 짤렸다.

 

3. 유동비율, 부채비율, 자본 유보율 계산하기

 

  • 유동비율은 유동부채 대비 유동자산이 얼마나 많은 지를 보여주는 지표이다. 말 그대로 계산하면 유동자산/유동부채 하면 되지만, 현업에서는 보통 그렇게 계산을 안 한다고 한다. 특히 매출채권과 재고자산의 영향을 많이 받는 제조업의 경우 더욱 그렇다. 재고자산과 매출채권의 전액 현금화은 현실적으로 불가능하기 때문에 해당 유동비율을 구할 때는 유동자산에서 일부 매출채권, 재고자산을 제외한 액수를 사용하도록 하겠다. 나는 굉장히 보수적이기 때문에 매출채권, 재고자산 모두 전체의 60%만 유동자산으로 포함해서 계산하겠다.
#유동자산
current_asset=bs_statement[bs_statement['Label']=='유동자산'].set_index('Label')

#재고자산
inven=bs_statement[bs_statement['Label']=='재고자산'].set_index('Label')

#매출채권
receiv=bs_statement[bs_statement['Label']=='매출채권'].set_index('Label')

#유동부채
current_liabilities=bs_statement[bs_statement['Label']=='유동부채'].set_index('Label')

#유동비율, 재고자산과 매출채권 60%만 유동자산으로 인정
current_ratio=(current_asset.values-inven.values*0.6-receiv.values*0.6)/current_liabilities.values

#유동비율 데이터프레임
cr=pd.DataFrame(current_ratio,index=['유동비율'])
cr.columns=['2019','2018','2017','2016','2015','2014']

 

  • 다음은 부채비율이다. 부채비율 구하는 것을 쉽다. 자본총액에서 부채를 나눠주면 끝이다. 뭐 설명할 것도 없다. 뽑는 코드도 위와 동일하다.
#부채총계
total_liabilities=bs_statement[bs_statement['Label']=='부채총계'].set_index('Label')

#자본총계
total_capital=bs_statement[bs_statement['Label']=='자본총계'].set_index('Label')

#부채비율
debt_to_equity=total_liabilities.values/total_capital.values

#부채비율 데이터프레임화
dr=pd.DataFrame(debt_to_equity,index=['부채비율'])
dr.columns=['2019','2018','2017','2016','2015','2014']

 

  • 마지막은 자본유보율이다. 자본유보율은 (자본잉여금+이익잉여금)/자본금으로 집계할 수 있다.
#납입 자본금
capital_stock=bs_statement[bs_statement['Label']=='자본금'].set_index('Label')

#자본잉여금
capital_surplus=bs_statement[bs_statement['Label']=='자본잉여금'].set_index('Label')

#이익잉여금
earning_surplus=bs_statement[bs_statement['Label']=='이익잉여금'].set_index('Label')

#자본유보율
reserve_ratio=(earning_surplus.values+capital_surplus.values)/capital_stock.values

#데이터프레임
rr=pd.DataFrame(reserve_ratio,index=['자본유보율'])
rr.columns=['2019','2018','2017','2016','2015','2014']

 

  • 위에서 뽑은 3개 지표를 하나의 데이터프레임으로 결합해보겠다.
table=cr.append(dr).append(rr)

결과물은 다음과 같이 볼 수 있다.

 

4. 시각화

 

 

 

 

보통 유동비율은 1 배수를 이상, 부채비율은 2 배수 미만, 자본유보율은 높으면 높을수록 기업 재무 건전성이 우수하다고 판단할 수 있다. 현대자동차는 해당 기준을 만족시킨다고 볼 수 있다. 나는 보통 부채비율이 100% 넘어가는 기업은 아예 투자를 안 하는데 현대자동차니까 이번에는 내 기준을 무시하고 매수를 감행했다. 이번 글은 여기서 마무리하고 다음에는 현금흐름과 각종 가치 지표를 뽑는 코드를 소개하도록 하겠다.

 

 

728x90
반응형

댓글