안녕하세요. 첫 번째 포스팅에 이어서 두 번째 포스팅을 드디어 쓰게 되었습니다.
오늘 다룰 것은 바로 모든 퀀트 트레이딩의 기초, 과연 데이터는 어떻게 구해야 하는가입니다.
사실 데이터를 구하기는 정말 쉽습니다. 조건이 붙긴 하지만요
' 돈을 지불한다면 '
일반적으로 회사에서 이용하는 데이터들의 경우 정말 많은 돈을 요구합니다.
그래서 개인이 구매하기보다는 회사에서 구매하고, 그걸 이용하여 사람들이 투자에 이용합니다.
따라서 저희처럼 공부하기 위한 사람들은 데이터를 이용하기가 쉽지 않습니다.
저는 그리하여 책에서 배운 방법을 이용하여 데이터를 수집하였고
그 방법을 여러분께 소개해 드리려고 합니다.
출처 : 퀀트 전략 파이썬으로 세워라 (2019, 박준규, 비제이퍼블릭)
제가 배운 내용은 여러 가지 책에서 차용해온 정보를 통합하여 사용하고 있습니다
하지만 기초 코딩은 우선 학교의 강의와 이 책에서 배웠기 때문에, 저 책을 보시면 상당한 도움이 되시리라 생각합니다.

우선, 제가 사용하는 IDE(통합개발환경)는 스파이더입니다.
파이썬을 사용하실 때 보통 아나콘다를 이용하실 텐데요.
아나콘다를 설치하시면 스파이더가 자동으로 깔리게 됩니다.
보통 쥬피터노트북을 이용하시지만, 저는 이 스파이더가 훨씬 편하게 느껴졌습니다.
다양한 코드들을 색깔을 통해서 눈으로 보기 편하게 해주고
내가 입력했던 변수들을 직접 클릭하여 눈으로 볼 수 있게 해주기 때문입니다.
import pandas as pd
import requests
fs_url = 'http://comp.fnguide.com/SVO2/ASP/SVD_Finance.asp?pGB=1&gicode=A005930&cID=&MenuYn=Y&ReportGB=&NewMenuID=103&stkGb=701'
fs_page = requests.get(fs_url)
fs_tables = pd.read_html(fs_page.text)
파이썬에는 다양한 라이브러리 라는 것이 존재합니다.
제가 느낀 라이브러리를 여러분들에게 간단하게 설명해드리자면, 코딩하는 과정에서 계산, 데이터 정리 등등을 편리하게 해주는 것을 말합니다.
크롤링하는 방법은 다양합니다. 그중에서도 대부분 bs4의 BeautifulSoup를 사용하곤 합니다.
하지만 오늘 제가 알려드릴 방법은 조금 더 간편한 방법을 차용하고 있습니다.
바로 requests와 pandas를 이용하는 방법입니다.
requests는 페이지의 정보를 가져오는 역할을 하고, 판다스는 그를 정리해주는 역할을 하고 있습니다
오늘 가져올 데이터는 바로!! 삼성전자의 재무제표입니다.
삼성전자(A005930) | 재무제표 | 기업정보 | Company Guide
삼성전자 005930 | 홈페이지 홈페이지http://www.samsung.com/sec 전화번호 전화번호031-200-1114 | IR 담당자 02)2255-9000 주소 주소경기도 수원시 영통구 삼성로 129 (매탄동) KSE 코스피 전기,전자 코스피 전기,전자 | FICS 휴대폰 및 관련부품 | 12월 결산 PER(Price Earning Ratio)전일자 보통주 수정주가 / 최근 결산 EPS(주당순이익)
comp.fnguide.com
위의 주소로 가시게 되면 아래와 같은 정보를 확인하실 수 있습니다.

이러한 정보들은 포괄손익계산서, 재무상태표, 현금흐름표 3가지로 나뉘어 있습니다.
그리고 별도와 연간으로 나뉘어 있기 때문에 총 3*2 6개의 표가 존재하고 있습니다.
이때 이 6개의 표를 fs_tables에 저장해주는 코드가 바로 위의 코드입니다.
이때 fs_tables는 list의 형태로 저장되게 됩니다.
Python에는 str, int, list, tuple, dict 등 다양한 타입이 존재합니다.
이 타입들에 대해서는 따로 다루지 않을 것이고, 구글링을 통해 검색하시면 바로 나오게 되니 참조하시길 바랍니다.


이때 제가 spyder를 이용하는 이유가 나옵니다.
바로 spyder를 이용하면 이렇게 시각적으로 fs_tables에 적힌 내용을 확인할 수 있기 때문입니다.
variables explorer에 내가 입력한 변수들이 저장되게 되는데요, 그중에서 필요한 내용을 클릭하면 이런 식으로 바로바로 데이터를 보여주게 됩니다.
이때 각 정보는 DataFrame으로 저장되게 되는데요, 이 DataFrame은 판다스의 기본 데이터 타입으로 표 형태로 데이터를 저장해 주는 형식입니다.
그리고 각 데이터의 Value를 더블클릭해 주면

이런 식으로 눈에 바로바로 보이는 데이터들을 저희에게 전해주게 됩니다.
이러한 데이터들은 list[0]에는 연간 포괄손익계산서, list[1]에는 분기 포괄손익계산서 등이 저장되게 됩니다.
이를 이용하여 내가 필요한 데이터들을 뽑아낼 수 있습니다.
여기서 우리가 필요한 것들 매출액, 영업이익, 당기순이익, 자산, 부채, 자본이라고 가정하고 크롤링을 해보도록 하겠습니다.
매출액, 영업이익, 당기순이익은 포괄손익계산서에 포함된 것들이고
자산, 부채, 자본은 재무상태표에 포함된 것들이라 다른 DataFrame에 위치한다는 것만 알아두시면 되겠습니다.
temp_df = fs_tables[0]
temp_df = temp_df.set_index('IFRS(연결)')
temp_df = temp_df[['2016/12','2017/12','2018/12','2019/12']]
#temp_df[temp_df.columns[:4]]
temp_df = temp_df.loc[['매출액','영업이익','당기순이익']]
temp_df2 = fs_tables[2]
temp_df2 = temp_df2.set_index('IFRS(연결)')
temp_df2 = temp_df2.loc[['자산','부채','자본']]
fs_df = pd.concat([temp_df, temp_df2])
fs_tables를 이미 불러왔기 때문에, temp_df에 fs_tables[0]에 담겨있는 정보를 저장해줍니다.
이때 주의할 것은 바로!! index를 설정하는 부분입니다.
DataFrame의 index는 따로 설정해주지 않으면 자료1처럼 0 1 2 처럼 숫자로 되어 있는 걸 보실 수 있습니다.
따라서 IFRS(연결) 이라는 column을 index로 해주기 위해 set_index를 이용해 주었습니다.

그렇게 하고 나면 이런 자료가 나오게 됩니다.
여기서 우리가 필요한 자료는 2016~2019년의 자료이고, 전년 동기와 전년 동기(%)는 필요 없기 때문에
내가 필요한 데이터들을 뽑아내기 위해
temp_df = temp_df[['2016/12','2017/12','2018/12','2019/12']]
라는 코드를 작성해 주었습니다.
이때 2016/12 2017/12 등등은 제가 작성한 시점에서 만들어진 것이기 때문에 언제나 바뀔 수 있습니다.
따라서
temp_df = temp_df[temp_df.columns[:4]]
라는 코드를 써주시게 되면 좀 더 일반화하여 데이터를 정리할 수 있습니다.
그 이후에 우리가 포괄손익 계산서에서 필요한 것은 매출액, 영업이익, 당기순이익이기 때문에
loc을 이용하여 행의 값들을 불러와 저장해줍니다.

그러면 이렇게 필요한 데이터만 추출할 수 있습니다.
마찬가지로 다른 데이터도 정리해주어야 합니다.

자료4는 fs_tables[2]의 데이터를 가져온 것입니다.
이때도 역시 인덱스를 재설정해 주어야 하는 것은 맞지만, 포괄손익계산서와는 다르게 전년 동기 자료가 없습니다.
따라서 그 부분을 빼고서 자산, 부채, 자본을 불러와 줍니다.

그러면 이렇게 temp_df와 temp_df2 각각 저장이 되게 됩니다.
아까 자료3에 있던 temp_df와 temp_df2를 합쳐서 보면 더 깔끔하게 자료를 볼 수 있기 때문에
이 데이터들을 하나로 합쳐주기 위해 마지막에 있는 pd.concat을 활용하였습니다.
fs_df = pd.concat([temp_df, temp_df2])
이는 같은 columns(표에서 열에 해당하는 자료)를 공유하는 데이터들을 합쳐주는 역할을 합니다.
따라서 temp_df와 temp_df2는 2016/12, 2017/12, 2018/12, 2019/12라는 columns들을 공유하고 있기 때문에 두 개를 합치게 되면

이렇게 합쳐진 데이터가 나오게 됩니다.
이를 활용하여 나중에 회사를 평가하는데 사용할 예정인데요.
오늘은 너무 많은 내용을 공부한 것 같아 2탄으로 나머지 내용은 넘기려고 합니다.
퀀트 트레이딩이라는 것은 하나의 회사가 아니라 모든 회사를 다 한 번에 평가하기 위한 것으로
사람의 머리로 할 수 없는 걸 하기 위해 하는 것이겠죠?
빅데이터를 구해야 하는데 이 정도로는 빅데이터라고 할 수 없으니
다음 시간에는 삼성전자뿐만이 아니라 모든 회사의 정보를 한 번에 정리할 방법을 알려드리도록 하겠습니다.
'퀀트 > 퀀트 트레이딩 (기초)' 카테고리의 다른 글
| Part1. DB 테이블 구축하기 (재무, 가격 데이터 저장) (0) | 2022.07.27 |
|---|---|
| 퀀트 트레이딩 프로젝트 (0) | 2022.07.26 |

