!pip install dart-fss
다트도 라이브러리가 있다니 ㄷㄷㄷ 파이썬 용도 어디까지인것
https://dart-fss.readthedocs.io/en/latest/
DART-FSS — dart-fss documentation v0.4.3 documentation
© Copyright 2023, Sungwoo Jo Revision 086846b1.
dart-fss.readthedocs.io
여기서 기능 확인 가능!
all = dart_fss.api.filings.get_corp_code()
all[0]
위는 전체 종목을 보는 코드
df = pd.DataFrame(all)
df
DataFrame 라이브러리를 써서 데이터 형식으로 만들수도 있다.
df_listed = df[df['stock_code'].notnull()]
df_non_listed = df[df['stock_code'].isnull()]
데이터로 뽑았을 때 'stock_code'가 있는 기업이 상장, 아닌 기업이 비상장이므로
위처럼 상장, 비상장 df를 만들어놓을 수 있다.
df_listed.to_excel('비상장사.xlsx')
df_non_listed.to_excel('상장사.xlsx')
판다스로 이렇게 쓰면 엑셀로 뽑힌다.
corp_code = df_listed[df_listed['corp_name'] == '삼성전자'].iloc[0,0]
corp_code
링크 참고해서 미등기임원 보수 총액같은 것도 뽑을 수 있다.
corp_code = df_listed[df_listed['corp_name'] == '카카오'].iloc[0,0]
data = dart_fss.api.info.unrst_exctv_mendng_sttus(corp_code, '2021', '11011')
pd.DataFrame(data['list'])
카카오의 김범수씨는 주식을 얼마나 갖고 있을까?
corp_code = df_listed[df_listed['corp_name'] == '카카오'].iloc[0,0]
data = dart_fss.api.shareholder.elestock(corp_code)
df_temp = pd.DataFrame(data['list'])
df_temp[df_temp['repror'] == '김범수']
def get_salary_top(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_temp = pd.DataFrame(data['list'])
df_temp = df_temp[['corp_name','nm','ofcps','mendng_totamt']] // 칼럼을 지정하고
df_temp.columns = ['기업명','이름','역할','보수'] // 이름을 바꿀 수 있다.
df_temp['보수'] = pd.to_numeric(df_temp['보수'].str.replace(',','')) // 이걸 안 하면 금액에 ,이 있어서 sort가 안됨
df_temp = df_temp.sort_values(by='보수',ascending=False)
return df_temp
get_salary_top('기업명') 쓰면 제일 돈 많이 받는 사람들이 나온다.
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: // try, except:를 안 쓰면, 포함 안 되는 기업이 하나라도 있을 때 에러가 떠버림
df = get_salary_top(name)
dfs.append(df)
except:
print(f'없음 - {name}')
df_result = pd.concat(dfs)
df_result.sort_values(by='보수',ascending=False)
df_result.sort_values(by='보수',ascending=False).head(30)
너무 많이 뽑기에는 dart fss 라이브러리 횟수제한에 걸릴 수 있으므로 .head()를 쓰자
아래처럼 조건을 여러 개 추가해서 보고싶은 대로 볼 수 있다.
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)
성별별로 급여 차이 가장 안 나는 회사 정렬하기도 가능
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)
'python' 카테고리의 다른 글
파이썬 4주차 - 1)그래프 그리기 및 백테스트 (0) | 2023.07.06 |
---|---|
파이썬 2주차 - 2) yahooquery로 해외주식 (0) | 2023.06.19 |
파이썬 2주차 - 1)Pandas의 dataframe (0) | 2023.06.19 |
파이썬 1주차 - 3) 엑셀 다루기 (0) | 2023.06.15 |
파이썬 1주차 - 2) 웹 스크래핑 (0) | 2023.06.15 |