스파르타코딩클럽 금융인을 위한 파이썬 업무자동화 3주차

 

[다트 open api 발급]

https://opendart.fss.or.kr/uat/uia/egovLoginUsr.do

 

전자공시 OPENDART 시스템 | 로그인

 

opendart.fss.or.kr

 

[ 구글 드라이브 코랩 가기]

https://drive.google.com/

 

Google Drive: 로그인

이메일 또는 휴대전화

accounts.google.com

 

[ dart-fss 라이브러리 설치]

!pip install dart-fss
 
 
 

[ 키 넣고, 구동해보기] 

 
import dart_fss as dart_fss
import pandas as pd

api_key = '여기에 API 키를 입력'
dart_fss.set_api_key(api_key=api_key)

corp_list = dart_fss.get_corp_list()

corp_list.corps
 

 

[ dart 공식 문서

https://dart-fss.readthedocs.io/en/latest/

 

DART-FSS — dart-fss documentation v0.3.10 documentation

© Copyright 2021, Sungwoo Jo Revision 2c650cdb.

dart-fss.readthedocs.io

 

[ dart 상장/비상장 excel 추출

import dart_fss as dart_fss
import pandas as pd

api_key = 'a4f6fad903b1302a1c54b6d63d2c0f7f5fc26838'
dart_fss.set_api_key(api_key=api_key)

all = dart_fss.api.filings.get_corp_code()
df = pd.DataFrame(all)

df_listed = df[df['stock_code'].notnull()]
# 비상장종목
df_non_listed = df[df['stock_code'].isnull()]
# 종목 갯수
#df_listed.count() 

df_listed.to_excel('상장종목.xlsx')
df_non_listed.to_excel('비상장종목.xlsx')

[ dart API 사용해보기

import dart_fss as dart_fss
import pandas as pd

api_key = 'a4f6fad903b1302a1c54b6d63d2c0f7f5fc26838'
dart_fss.set_api_key(api_key=api_key)
all = dart_fss.api.filings.get_corp_code()
df = pd.DataFrame(all)

df_listed = df[df['stock_code'].notnull()]
# 비상장종목
df_non_listed = df[df['stock_code'].isnull()]
corp_code = df_listed[df_listed['corp_name']== '카카오'].iloc[0,0]
# 기업개황
#dart_fss.api.filings.get_corp_info(corp_code)
# 사업보고서
#data =dart_fss.api.info.unrst_exctv_mendng_sttus(corp_code, '2022', '11011')
# 증자 현황
#data = dart_fss.api.info.irds_sttus(corp_code, '2022', '11011', api_key=None)
# 배당 현황
#data =dart_fss.api.info.alot_matter(corp_code, '2022', '11011', api_key=None)
# 최대주주 변동현황
#data =dart_fss.api.info.hyslr_chg_sttus(corp_code,  '2022',   '11011', api_key=None)
# 최대 주주현황
#data =dart_fss.api.info.hyslr_sttus(corp_code,  '2022',   '11011', api_key=None)
#pd.DataFrame(data['list'])[['nm','bsis_posesn_stock_qota_rt','trmend_posesn_stock_qota_rt']]
# 임원사항
#data = dart_fss.api.info.exctv_sttus(corp_code, '2022', '11011')
# 직원정보
#data = dart_fss.api.info.emp_sttus(corp_code, '2022', '11011')
# 이사보수
#data = dart_fss.api.info.hmv_audit_indvdl_by_sttus(corp_code, '2022', '11011')
# 연봉TOP5
#data = dart_fss.api.info.indvdl_by_pay(corp_code, '2022', '11011')
# 타법인 출자현황
#data = dart_fss.api.info.otr_cpr_invstmnt_sttus(corp_code, '2022', '11011')
# 상장기업 재무정보
#data = dart_fss.api.finance.fnltt_singl_acnt(corp_code, '2022', '11011')
# 상장기업 재무 모든 정보
#data = dart_fss.api.finance.fnltt_singl_acnt_all(corp_code, '2021', '11011', 'CFS')
#임원, 주요 주주 소유 보고
#data = dart_fss.api.shareholder.elestock(corp_code)
# 특정 사람
#df_temp = pd.DataFrame(data['list'])
#df_temp[df_temp['repror'] == '김범수']

#pd.DataFrame(data['list'])

 

[ 다트 API로 연봉 킹 30명 찾기

import dart_fss as dart_fss
import pandas as pd

api_key = 'a4f6fad903b1302a1c54b6d63d2c0f7f5fc26838'
dart_fss.set_api_key(api_key=api_key)
all = dart_fss.api.filings.get_corp_code()
df = pd.DataFrame(all)

df_listed = df[df['stock_code'].notnull()]
# 비상장종목
df_non_listed = df[df['stock_code'].isnull()]

def get_salary(name):
  corp_code = df_listed[df_listed['corp_name']== name].iloc[0,0]
  data = dart_fss.api.info.indvdl_by_pay(corp_code, '2022', '11011', api_key=None)

  df = pd.DataFrame(data['list'])

  df = df[['corp_name','nm','ofcps','mendng_totamt']]

  df.columns = ['기업명','이름','역할','보수']
  df['보수'] = pd.to_numeric(df['보수'].str.replace(',',''))
  #df.sort_values(by='보수',ascending=False)
  return df

names = ['삼성전자','LG에너지솔루션','SK하이닉스','NAVER','삼성바이오로직스','삼성전자우','카카오','삼성SDI','현대차','LG화학','기아','POSCO홀딩스','KB금융','카카오뱅크','셀트리온','신한지주','삼성물산','현대모비스','SK이노베이션','LG전자','카카오페이','SK','한국전력','크래프톤','하나금융지주','LG생활건강','HMM','삼성생명','하이브','두산중공업','SK텔레콤','삼성전기','SK바이오사이언스','LG','S-Oil','고려아연','KT&G','우리금융지주','대한항공','삼성에스디에스','현대중공업','엔씨소프트','삼성화재','아모레퍼시픽','KT','포스코케미칼','넷마블','SK아이이테크놀로지','LG이노텍','기업은행']

dfs =[]
for name in names:
  try:
    df = get_salary(name)
    dfs.append(df)
  except:
    print(f'error- {name}')  

df_result = pd.concat(dfs)
df_result.sort_values(by='보수',ascending=False).head(30)

 

[ 상장종목 10개 샘플 지분율 구하기] 

import dart_fss as dart_fss
import pandas as pd

api_key = 'a4f6fad903b1302a1c54b6d63d2c0f7f5fc26838'
dart_fss.set_api_key(api_key=api_key)
all = dart_fss.api.filings.get_corp_code()
df = pd.DataFrame(all)

df_listed = df[df['stock_code'].notnull()]
# 비상장종목
df_non_listed = df[df['stock_code'].isnull()]


def get_shareholders(corp_code):

  #corp_code = df_listed[df_listed['corp_name']== '카카오'].iloc[0,0]
  data = dart_fss.api.info.hyslr_sttus(corp_code, '2022', '11011', api_key=None)

  df = pd.DataFrame(data['list'])
  df= df[['corp_name','nm','relate','bsis_posesn_stock_qota_rt','trmend_posesn_stock_qota_rt','rm']]
  df.columns = ['기업명','이름','관계','기초지분율','기말지분율','비고']
  df = df[df['관계'].notnull()]
  df['기초지분율'] = pd.to_numeric(df['기초지분율'])
  df['기말지분율'] = pd.to_numeric(df['기말지분율'])
  return df.sort_values(by='기초지분율',ascending=False).head(3)

corp_codes = list(df_listed.sample(10)['corp_code'])

dfs =[]
for corp_code in corp_codes:
  try:
    df = get_shareholders(corp_code)
    dfs.append(df)
  except:
    print(f'error-{corp_code}')

df_result = pd.concat(dfs)
df_result['증감'] = df_result['기말지분율'] - df_result['기초지분율']
df_result.sort_values(by='증감',ascending=False)

 

[ 이익잉영금 증가 10개 샘플 기업 구하기] 

import dart_fss as dart_fss
import pandas as pd

api_key = 'a4f6fad903b1302a1c54b6d63d2c0f7f5fc26838'
dart_fss.set_api_key(api_key=api_key)
all = dart_fss.api.filings.get_corp_code()
df = pd.DataFrame(all)

df_listed = df[df['stock_code'].notnull()]
# 비상장종목
df_non_listed = df[df['stock_code'].isnull()]

def get_profit(name):
  corp_code = df_listed[df_listed['corp_name'] == name].iloc[0,0]
  data = dart_fss.api.finance.fnltt_singl_acnt(corp_code, '2022', '11011')
  df= pd.DataFrame(data['list'])


  # 연결재무제표 CFS , 이익잉영금
  cond = (df['fs_div'] =='CFS') & (df['account_nm'] =='이익잉여금')

  df = df[cond]

  df['name'] = name

  # 전기, 이번기
  df = df[['name','thstrm_amount','frmtrm_amount']]

  df.columns = ['기업명','당기','전기']

  df['당기'] = pd.to_numeric(df['당기'].str.replace(',',''))
  df['전기'] = pd.to_numeric(df['전기'].str.replace(',',''))

  df['증감'] = df['당기'] - df['전기']
  df['증감율'] = abs(df['당기']) / abs(df['전기'])

  return df

names =df_listed.sample(10)['corp_name']

dfs =[]
for name in names:
  try:
    df = get_profit(name)
    dfs.append(df)
  except:
    print(f'error - {name}')

df_result = pd.concat(dfs)
df_result.sort_values(by='증감율', ascending=False)

[ 비상장종목 당기순이 10개 샘플 기업 구하기] 

import dart_fss as dart_fss
import pandas as pd

api_key = 'a4f6fad903b1302a1c54b6d63d2c0f7f5fc26838'
dart_fss.set_api_key(api_key=api_key)
all = dart_fss.api.filings.get_corp_code()
df = pd.DataFrame(all)

# 비상장종목
df_non_listed = df[df['stock_code'].isnull()]
def get_earning(name):
  corp_code = df_non_listed[df_non_listed['corp_name'] == name].iloc[0,0]
  data = dart_fss.api.info.alot_matter(corp_code, '2021', '11011')

  df= pd.DataFrame(data['list'])

  df = df[df['se'] =='(연결)당기순이익(백만원)']
  df = df[['corp_name','thstrm','frmtrm','lwfr']]

  df.columns = ['기업명','2021','2020','2019']

  df['2021'] = pd.to_numeric(df['2021'].str.replace(',',''))
  df['2020'] = pd.to_numeric(df['2020'].str.replace(',',''))
  df['2019'] = pd.to_numeric(df['2019'].str.replace(',',''))

  return df 

names = list(df_non_listed.sample(10)['corp_name'])

dfs =[]
for name in names:
  try:
    df =get_earning(name)  
    dfs.append(df)
  except:
    print(f'error - {name} ')

result_df = pd.concat(dfs)
result_df

 

[ 상장종목 10개 샘플 뽑아 그 중 남녀 급여차이 적은 기업  구하기] 

import dart_fss as dart_fss
import pandas as pd

api_key = 'a4f6fad903b1302a1c54b6d63d2c0f7f5fc26838'
dart_fss.set_api_key(api_key=api_key)
all = dart_fss.api.filings.get_corp_code()
df = pd.DataFrame(all)

df_listed = df[df['stock_code'].notnull()]
# 비상장종목
df_non_listed = df[df['stock_code'].isnull()]

def get_salary(name):
  corp_code = df_listed[df_listed['corp_name'] == name].iloc[0,0]
  data = dart_fss.api.info.emp_sttus(corp_code, '2021', '11011')

  df =pd.DataFrame(data['list']) 
  df = df[['corp_name','sexdstn','jan_salary_am']]
  df_result = pd.DataFrame()
  doc = {
      '기업명'   : name,
      '연봉(남)' : df[df['sexdstn']=='남'].iloc[-1,-1],
      '연봉(여)' : df[df['sexdstn']=='여'].iloc[-1,-1]
  }
  df_result = df_result.append(doc,ignore_index=True)

  df_result['연봉(남)'] = pd.to_numeric(df_result['연봉(남)'].str.replace(',',''))
  df_result['연봉(여)'] = pd.to_numeric(df_result['연봉(여)'].str.replace(',',''))
      
  return df_result

names = list(df_listed.sample(10)['corp_name'])

dfs =[]
for name in names:
  try:
    df = get_salary(name)
    dfs.append(df)
  except:
    print(f'error- {name}')

df_result = pd.concat(dfs)

df_result['차이(남-여)'] = df_result['연봉(남)'] - df_result['연봉(여)']
df_result['평균'] = (df_result['연봉(남)'] + df_result['연봉(여)'])/2

df_result.sort_values(by='차이(남-여)', ascending=True)

 

1주차 : 네이버에서 뉴스 가져오는 함수 , 코랩 폴더에 저장 및 다운로드 ,네이버금융사진 저장
https://iamipro.tistory.com/231

 

스파르타코딩클럽 금융인을 위한 파이썬 업무자동화 1주차

스파르타코딩클럽 금융인을 위한 파이썬 업무자동화 1주차 import urllib.request import openpyxl wb = openpyxl.load_workbook('관리종목.xlsx') sheet = wb['종목'] new_rows = list(sheet.rows)[1:] for row in new_rows: print(row[0].val

iamipro.tistory.com


2주차 : 데이터프레임( 순이익, 종가, pbr<1, 시총1조이상, per<20) 그려보기 , 해외주식(야후쿼리) 정보 보기
https://iamipro.tistory.com/232

 

금융인을 위한 파이썬 업무자동화 2주차

DataFrame 만들기 Pandas : 데이터 분석 해외주식야후사이트: https://finance.yahoo.com/quote/AAPL?p=AAPL&.tsrc=fin-srch Apple Inc. (AAPL) Stock Price, News, Quote & History - Yahoo Finance Find the latest Apple Inc. (AAPL) stock quote, histor

iamipro.tistory.com

 

3주차 : dart 상장/비상장 엑셀 추출, dart API 로 종목 정보 (증자,배당,직원정보,이사보수, 재무정보, 이익잉여금, 당기순이익, 지분율, 연봉 TOP5 등)
https://iamipro.tistory.com/233

 

금융인을 위한 파이썬 업무자동화 3주차

스파르타코딩클럽 금융인을 위한 파이썬 업무자동화 3주차 [다트 open api 발급] https://opendart.fss.or.kr/uat/uia/egovLoginUsr.do 전자공시 OPENDART 시스템 | 로그인 opendart.fss.or.kr [ 구글 드라이브 코랩 가기] h

iamipro.tistory.com

4주차 : 최적의 단기/장기 이동평균선 구하기
https://iamipro.tistory.com/234

 

금융인을 위한 파이썬 업무자동화 4주차

금융인을 위한 파이썬 업무자동화 4주차 https://drive.google.com/ Google Drive: 로그인 이메일 또는 휴대전화 accounts.google.com [라이브러리 설치 명령어 yfinance pandas-datareader finance-datareader !pip install yfinance

iamipro.tistory.com

5주차 : 변동성 돌파적략 최적값 k 구하기 , 월요일에 사서 금요일에 팔경우 수익나는 종목 보기
https://iamipro.tistory.com/235

 

금융인을 위한 파이썬 업무자동화 5주차

금융인을 위한 파이썬 업무자동화 5주차 https://drive.google.com/ Google Drive: 로그인 이메일 또는 휴대전화 accounts.google.com 전일 종가에서 금일 시작가에서 판다. [ 오르는 추세라 판단] [주가 가져오는

iamipro.tistory.com

 

LIST

+ Recent posts