자유게시판

Python 셋째주_DART 데이터 활용하기

페이지 정보

작성자 HELLO 작성일26-08-24 15:08 조회26회 댓글0건

본문

3주차는 퍼시픽링스 DART에 공시된 데이터를 활용하는 것을 배웠다
!pip install dart-fss
import dart_fss as dart_fss
import pandas as pd
이번에 필요한 패키지들
DART에서 인증키를 발급받아야 오픈 API를 사용할 수 있다




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

opendart.fss.or.kr


이곳에서 인증키를 발급받지!
api_key = 'f8fd5b8dff7df55cdac5b90b97da789fb3c447f3'
dart_fss.set_api_key(api_key=api_key)

corp_list = dart_fss.get_corp_list()

corp_list.corps
발급받은 인증키를 가져온다
api_key에는 개개인이 받은 인증키 번호를 입력한다
all = dart_fss.api.filings.get_corp_code()
all[0]
모든 데이터에서 하나를 선택해 잘 나왔는지 확인한다
잘 나왔다
df = pd.DataFrame(all)

df_listed = df[df['stock_code'].notnull()]
df_non_listed = df[df['stock_code'].isnull()]

df_non_listed.count()

df_listed.to_excel('상장종목.xlsx')
df_non_listed.to_excel('비상장종목.xlsx')
상장종목과 비상장종목을 따로 구분하여 엑셀 파일로 만들어 저장한다
이렇게 많은 기업이 우리나라에 존재할 줄이야...ㄷㄷ
corp_code = df_listed[df_listed['corp_name'] == '카카오'].iloc[0,0]
corp_code

dart_fss.api.filings.get_corp_info(corp_code)
df_listed: 상장기업
상장기업 중에서도 카카오에 관한 정보들을 불러온다
카카오의 주소는 제주도였구나
data = dart_fss.api.info.unrst_exctv_mendng_sttus(corp_code, '2021', '11011')
pd.DataFrame(data['list'])
카카오의 2021년도 사업보고서를 데이터 퍼시픽링스 프레임 형식으로 불러온다
data2 = dart_fss.api.info.irds_sttus(corp_code, '2021', '11011')
pd.DataFrame(data2['list'])
카카오의 재무정보
data3 = dart_fss.api.info.alot_matter(corp_code, '2021', '11011')
pd.DataFrame(data3['list'])
..이것도 재무정보인듯?
data4 = dart_fss.api.info.hyslr_chg_sttus(corp_code, '2021', '11011')
pd.DataFrame(data4['list'])
카카오 최대 주주에 관한 정보
역시나 최대주주는 김범수이다
data5 = dart_fss.api.info.emp_sttus(corp_code, '2021', '11011')
pd.DataFrame(data5['list'])
성별에 관한 자료이다
성별에 따른 임금격차 관련 문제를 조사할 때 사용하는 자료인것 같다
data6 = dart_fss.api.info.indvdl_by_pay(corp_code, '2021', '11011')
pd.DataFrame(data6['list'])
이것은 아마도 5억 이상 연봉을 받는 사원들의 리스트인 듯 하다
data7 = dart_fss.api.finance.fnltt_singl_acnt(corp_code, '2021', '11011')
pd.DataFrame(data7['list'])
CFS관련 재무정보
CFS가 무엇인지 찾아봤는데 ..컨테이너 입지??? ..잘못찾은것같다
data8 = dart_fss.api.shareholder.elestock(corp_code)

df = pd.DataFrame(data8['list'])
df[df['repror'] == '김범수']
최대주주 김범수의 주가 변동 현황을 살펴볼 수 있다
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, '2021', '11011')

df 퍼시픽링스 = pd.DataFrame(data['list'])
df = df[['corp_name', 'nm', 'ofcps', 'mendng_totamt']]
df.columns = ['기업명', '이름', '역할', '보수']

df['보수'] = pd.to_numeric(df['보수'].str.replace(',',''))

return df
카카오 뿐만 아니라 다양한 회사에 관한 정보를 탐색하기 위해 함수를 만들었다
이 때 보수를 중심으로 정렬하고 싶어 보수를 numeric 형태로 바꿔줘야 한다
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
각 회사에서 연봉을 많이 받는 사람들을 뽑아 표로 만들었다
모든 회사에 모든 정보가 동일하게 들어가 있는 것이 아니기 때문에 try ~ except 구문을 사용하여 예외 처리를 해줘야한다
df_result.sort_values(by = '보수', ascending 퍼시픽링스 = False).head(30)
이것은 대한민국에서 보수를 많이 받는 사람들 순으로 top 30명을 정렬한 것이다
하이브의 수석 프로듀서는 연봉이 400억이다ㅋㅋㅋㅋㅋ
def get_shareholders(corp_code):
data = dart_fss.api.info.hyslr_sttus(corp_code, '2021', '11011')

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)
이번에는 회사의 기초 / 기말 지분율 변동 추이를 확인하기 위한 함수이다
get_shareholders('00258801')
카카오의 회사 번호를 입력하고 검색했다
카카오의 김범수 회장은 증여를했고, 케이큐브호링스는 주식분할/단순매도를, 특수관계인은 특수관계를 해소했다
이런 것까지 알 수 있다니 DART에는 정말 퍼시픽링스 다양한 정보가 있다
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)
해서 증감여부를 확인하는 반복문을 실행했다
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, '2021', '11011')
df = pd.DataFrame(data['list'])

cond = (df['fs_div'] == 'CFS') &amp(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['증감'] / df['전기'])

return df
회사의 당기 수익률 / 전기 수익률 비교하는 함수이다
get_profit('현대자동차')
현대자동차의 수익률을 비교하니 전기보다 증가했다
사람들이 차를 많이 사긴 하나보다
names = list(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개의 기업을 선정해 증감을 확인했다
def get_salary(name):

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 = {
'기업명' : df.iloc[0,0],
'연봉(남)': df[df['sexdstn'] == '남'].iloc[0, 2],
'연봉(여)': df[df['sexdstn'] == '여'].iloc[0, 2]
}

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
corp_codes = list(df_listed.sample(10)['corp_code'])

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

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)
무작위로 회사 10개를 추출하여 성별 연봉 차이를 확인했다
이번에도 역시 try ~ except구문을 활용했다

각종 기업에서 필요한 정보만 추출하여 각 기업별로 정보를 산출하는 함수를 만드는 법을 배웠다
점점 스파르타 코딩에 익숙해지는 것 같다

댓글목록

등록된 댓글이 없습니다.

Attention Required! | Cloudflare

Sorry, you have been blocked

You are unable to access bl-333.top

Why have I been blocked?

This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.

What can I do to resolve this?

You can email the site owner to let them know you were blocked. Please include what you were doing when this page came up and the Cloudflare Ray ID found at the bottom of this page.

Attention Required! | Cloudflare

Sorry, you have been blocked

You are unable to access bl-666.top

Why have I been blocked?

This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.

What can I do to resolve this?

You can email the site owner to let them know you were blocked. Please include what you were doing when this page came up and the Cloudflare Ray ID found at the bottom of this page.