다트를 통한 데이터 분석
!pip install dart_fss
import dart_fss
## 테스트 해보기 / 안될경우 kernal 탭에서 restart 누르기
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[:10]
[[00434003]다코,
[00430964]굿앤엘에스,
[00388953]크레디피아제이십오차유동화전문회사,
[00179984]연방건설산업,
[00420143]브룩스피알아이오토메이션잉크,
[00401111]매경아이비아이,
[00435534]캐드뱅크,
[00430186]엠와이오피삼차유동화전문유한회사,
[00430201]엠와이오피이차유동화전문유한회사,
[00430210]엠와이오피일차유동화전문유한회사]
dart_fss.api.filings.get_corp_code()
[{'corp_code': '00434003',
'corp_name': '다코',
'stock_code': None,
'modify_date': '20170630'},
{'corp_code': '00430964',
'corp_name': '굿앤엘에스',
df1 = dart_fss.api.filings.get_corp_code()
df2 = pd.DataFrame(df1)
df2

변수 저장 없이 감싸는 코딩으로 데이터프레임으로 만들 수 있다.
다만, 모든 데이터를 조회한 후에 헤드를 추출하기 떄문에 오래 걸린다.
pd.DataFrame(dart_fss.api.filings.get_corp_code()).head()
추출한 내용을 df에 담는다.
df = pd.DataFrame(dart_fss.api.filings.get_corp_code())

4.결측값을 제거하기
df['stock_code'].notnull()
0 False
1 False
2 False
3 False
4 False
...
107248 False
107249 False
107250 False
107251 False
107252 False
Name: stock_code, Length: 107253, dtype: bool
df[df['stock_code'].notnull()]

부서['소속팀']=='인사팀' (인사팀에 해당하는 부서들의 정보만 추출)
부서[부서['소속팀']=='인사팀']
df_list = df[df['stock_code'].notnull()]
df_not_listed = df[df['stock_code'].isnull()]
스탁코드나오는 데이터 프레임 확인
(상장주식)
df_list

스탁코드가 없는 데이터 프레임 확인
(비상장주식)
df_not_listed

df_list.count()
corp_code 3748
corp_name 3748
stock_code 3748
modify_date 3748
dtype: int64
df_not_listed.count()
corp_code 103505
corp_name 103505
stock_code 0
modify_date 103505
dtype: int64
df_list.to_excel('상장종목.xlsx')
df_not_listed.to_excel('비상장종목.xlsx')
저장 위치 확인 -> 변수지정
예) C:/Users/폴더1/바탕 화면/폴더2/
역슬러시를 모두 슬러시로 변경해야 함
메모장(notepad)를 통해서 모두바꾸기 기능을 활용하기도 한다.
(방법1 슬러시 1개)
df_list.to_excel('C:/Users/폴더1/바탕 화면/폴더2.xlsx')
(방법2 역슬러시 2개)
df_list.to_excel('C:\\Users\\폴더1\\바탕 화면\\폴더2\\상장종목1.xlsx')
import OpenDartReader as odr
my_api = '~' ## api키 입력위치
dart = odr(my_api)
공시내역을 가져올 수 있다.
# 삼성전자의 특정 기간에 대한 데이터 받아오기 (공시내역 확인 가능)
result = dart.list("삼성전자", start = "2020-01-01", end = "2024-07-11")
display(result.head()) # 위 5개 행 출력
display(result.shape) # 데이터프레임 구조 출력

result.head()

doc = dart.document("20240705800411")
print(doc[:500]
주어진 파이썬 코드 스니펫은 dart_fss 라이브러리를 사용하여 특정 문서를 가져와서 그 내용을 출력하는 예제입니다. 코드를 하나씩 해석해보겠습니다.
doc = dart.document("20240705800411")
print(doc[:500])
doc = dart.document("20240705800411"):
dart.document 함수는 주어진 문서 번호 "20240705800411"에 해당하는 문서를 DART 시스템에서 가져온다.print(doc[:500]):
doc 변수에 저장된 문서 내용 중 처음 500자를 출력한다.<html>
<head>
<meta content="gdi" http-equiv="X-UA-TextLayoutMetrics">
<meta content="text/html; charset=euc-kr" http-equiv="Content-Type">
<STYLE>
.xforms * { font-family: 돋움체;}
.xforms_title * { font-size: 13pt; padding : 0 0 10 0;}
.xforms table {
font-size: 10px;
padding:0px;
border-collapse:collapse;
color: #3D3D3D;
}
.xforms td {
padding-left:0px;
padding-top:0px;
border-collapse:collapse;
line-height:22px;
color: #3D3D3D;
doc
보기 불편하게 나오는 것을 확인할 수 있다.
)

삼성전자 연결제무제표에 있는 특정 정보를 추출한다.
result = dart.finstate("삼성전자", 2024, "11013")
result = result.loc[result["fs_nm"] == "연결재무제표"]
result = result.loc[result["account_nm"].isin(["당기순이익", "영업이익", "매출액"])]
result = result.loc[:, ["account_nm", "fs_nm", "sj_nm", "thstrm_dt", "thstrm_amount"]]
display(result)

result = dart.finstate("삼성전자", 2024, "11013")

result = result.loc[result["fs_nm"] == "연결재무제표"]
result

result = result.loc[result["account_nm"].isin(["당기순이익", "영업이익", "매출액"])]
result

result = result.loc[:, ["account_nm", "fs_nm", "sj_nm", "thstrm_dt", "thstrm_amount"]]
result

display(result)

thstrm_amount에 콤마(,)가 포함되어 있어서 문자로 인식됨
print(result["thstrm_amount"].dtype)
object
#str의 특정 문자열을 교체하기 + float 타입으로 변경하기 (찾기~바꾸기)
result["thstrm_amount"].str.replace(",", "").astype(float)
9 7.191560e+13
10 6.606009e+12
12 6.754708e+12
Name: thstrm_amount, dtype: float64
result

19-1. 다른 방법 (def 활용)
def remove_comma(value):
return float(value.replace(",", ""))
display(result["thstrm_amount"].apply(remove_comma))
9 7.191560e+13
10 6.606009e+12
12 6.754708e+12
Name: thstrm_amount, dtype: float64