오늘은
여러번의 삽질 끝에 완성된
"파이썬을 이용하여 기업의 재무데이터 불러오기" 에
대해서 내용을 공유해볼까 합니다.
step 1
* 에프앤가이드에 접속합니다. (https://comp.fnguide.com/)
* 홈페이지 접속 후 재무제표를 클릭하고 주소를 복사합니다. (메모장이나 다른 곳에 붙여놓기)
step 2
한국거래소 홈페이지에서 모든 종목의 종목코드를 엑셀파일 다운로드 합니다.
(http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201020501)
(저는 코드 작성을 조금 더 편리하게 하기 위해 종목코드 파일명을 code.xlsx 수정했습니다.
파일명은 자유롭게 수정해서 사용하면 됩니다!)
step 3
파이썬 아나콘다를 실행하여 재무 데이터를 불러와보도록 하겠습니다.
[실행코드]
import requests
import pandas as pd
import time
def make_fs_dataframe(code) :
url ='https://comp.fnguide.com/SVO2/ASP/SVD_Finance.asp?pGB=1&gicode=A'+str(code)+'&cID=&MenuYn=Y&ReportGB=&NewMenuID=103&stkGb=701'
# 복사한 URL을 붙여넣기 한 다음 종목 코드 번호가 적힌 자리에 +str(code)+ 입력합니다.
page=requests.get(url)
tables=pd.read_html(page.text)
temp_df=tables[0] # 연간데이터만 사용 (분기데이터는 [1])
temp_df=temp_df.loc[[0,4,15]] # 매출액, 영업이익, 당기순이익만 추출
temp_df=temp_df.set_index(temp_df.columns[0])
temp_df=temp_df[temp_df.columns[:4]]
temp_df2 = tables[2]
temp_df2 = temp_df2.loc[[0,4,8]] # 자산, 부채, 자본
temp_df2 = temp_df2.set_index(temp_df2.columns[0])
temp_df3 = tables[4]
temp_df3 = temp_df3.loc[[0]] # 영업현금흐름
temp_df3 = temp_df3.set_index(temp_df3.columns[0])
df = pd.concat([temp_df,temp_df2,temp_df3])
return df
# 대보마그네틱 재무정보를 불러오도록 하겠습니다.
make_fs_dataframe(290670) .
[실행화면]
[실행코드]
# 데이터프레임을 전치행렬로 바꾸는 함수입니다.
def change_df(code, dataframe):
for num, col in enumerate(dataframe.columns):
temp_df = pd.DataFrame({code:dataframe[col]})
temp_df = temp_df.T
temp_df.columns = [[col]*len(dataframe), temp_df.columns]
if num ==0:
total_df = temp_df
else: total_df = pd.merge(total_df, temp_df, how='outer', left_index=True, right_index=True)
return total_df
# 모든 종목에 대해서 재무데이터를 불러옵니다.
# 한국거래소에서 다운받은 종목코드 엑셀파일을 불러옵니다.
code=pd.read_excel(r'C:\Users\ok\Desktop\code.xlsx')[['종목코드','종목명']]
code['종목코드']=code['종목코드'].map('{:06d}'.format)
for num, code in enumerate(code['종목코드']):
try:
print(num,code)
time.sleep(1)
try:
df=make_fs_dataframe(code)
except requests.exceptions.Timeout:
time.sleep(60)
df=make_fs_dataframe(code)
fs_df_changed = change_df(code, df)
if num==0:
total_fs = fs_df_changed
else:
total_fs = pd.concat([total_fs, fs_df_changed])
except :
continue
# 2,573개의 상장된 모든 종목의 재무데이터를 불러오는데 시간이 약간 소요됩니다.
# 저는 종목코드 엑셀파일에서 제가 보고 싶은 종목만 걸러낸 뒤 불러오기를 했습니다.
# 엑셀데이터로 저장합니다.
total_fs.to_excel('a123.xlsx')
[실행화면]
저장된 엑셀파일을 열면
종목코드에 따라 재무데이터가 제대로 불러와졌음을 알 수 있습니다.
아직은 파이썬이 어려운 초보인지라...
수 많은 블로그와 책을 참고하였습니다.
좀 더 쉬운 방법이나 코드가 있다면 댓글 달아주세요 :)
다음 시간에는
앞서 분석한 2차 전지 기업들의
재무 데이터와 최근 1년의 주가 추이를 비교해보도록 하겠습니다.

'재테크&투자 > 기업분석' 카테고리의 다른 글
[기업분석] 모빌리티 산업에는 어떤 종목들이 있을까? (1) | 2023.02.01 |
---|---|
[기업분석] 2차 전지 (주가 추이 및 재무 현황) (1) | 2023.01.30 |
[기업분석] 2차전지 / 코스닥 / 성일하이텍 / 배터리 재활용 (2) | 2023.01.27 |
[기업분석] 2차전지 / 코스닥 / 대보마그네틱 / 장비 (전자석탈철기) (4) | 2023.01.19 |
[기업분석] 2차전지 / 코스닥 / 천보 / 소재 (전해액 및 전해질) (2탄) (5) | 2023.01.17 |
댓글