주식투자

주가 및 관련 데이터 가져오는 법 (구글 Colab - 파이썬 클라우드 서비스)

오렌지사과키위 2025. 2. 18. 10:44

제 책 <구글 시트로 시작하는 투자 포트폴리오 분석 - 오렌지사과의 불친절한 워크북>은 자산 배분 투자 관점에서 자산의 특성과 자산 간 관계를 분석하는 여러 방법을 소개하고 있습니다. 독자가 각각 자신의 상황에 맞춰 스스로 해 보기를 권하기 위해 책 집필에 사용한 각종 데이터와 시트는 거의 대부분 공유하지 않고 있습니다.

스프레드시트를 사용하여 분석하는 방법은 제 책과 관련 서적을 보면서 스스로 공부하는 것이 바람직할 수 있지만, 분석에 사용할 주가 및 관련 데이터를 획득하는 과정은 쉽지 않았을 듯합니다. 이 글에서는 구글 Colab을 이용하여 분석에 사용할 데이터를 구해 구글 시트로 옮기는 방법을 소개합니다.

구글 Colab은 파이썬(Python) 및 R을 지원하는 클라우드 컴퓨팅 서비스이며, 무료로 사용이 가능합니다. 본인의 컴퓨터에 파이썬을 설치하지 않고도 원격으로 실행할 수 있습니다. 유료 서비스에 우선권이 있기에 무제한 무료를 보장하지는 않지만, 일반적인 개인 투자자 수준의 데이터 수집에는 큰 불편이 없을 것입니다.

참고: 데이터 소스에서 제공하는 데이터는 누락 또는 오류가 있을 수 있습니다.

공유 Colab 노트북 접근과 사본 만들기

Colab으로 만든 코드 묶음은 노트북이라 하는데, 구글 시트 문서처럼 공유할 수 있습니다. 다음 링크는 이 글에서 설명하는 Colab 노트북의 공유 링크입니다.

Colab 노트북 공유 링크: https://colab.research.google.com/drive/17C4mIa1qAiBcR_pA1aNxt8N4HTLtc1kv?usp=sharing

 

주가 및 관련 데이터 가져오기.ipynb

Colab notebook

colab.research.google.com

해당 Colab 공유 링크로 들어가면 아래와 같은 화면을 만날 수 있습니다. Colab 노트북은 셀 단위로 나누어져 있는데, 맨 첫 셀에는 이 글과 데이터 수집용으로 사용할 FinanceDataReader 패키지 관련 참고 링크가 있습니다.

공유한 Colab 노트북 첫 화면

사용법 아래에 하나씩 코드 셀이 있습니다. 아래와 같이 첫 코드 셀에는 "먼저 이 셀을 실행하십시오"라고 적혀 있습니다. 이 셀은 FinanceDataReader 패키지를 설치하고, 그래프에 격자를 나타내도록 기본 설정을 하는 코드입니다. 패키지는 개인 컴퓨터에 설치되는 것이 아니라, 구글 클라우드에 설치되니 안심하셔도 됩니다.

환경을 설정하는 첫 코드 셀

아래와 같이 해당 셀의 왼쪽에 있는 동그란 형태의 재생 버튼(▶️)을 누르면 해당 셀이 실행됩니다.

첫 코드 셀 실행시 나타나는 경고 문구

남이 만든 코드이기에 경고 문구가 나타납니다. "무시하고 계속하기"를 눌러 테스트해 보셔도 되지만, 각자마다 원하는 데이터가 다르니 일단 "취소" 버튼을 누릅니다. 참고: 해당 이메일은 공유 전용이기에 문의하셔도 의미가 없습니다. 

왼쪽 아래 그림과 같이 파일 메뉴에서 "Drive에 사본 저장"을 선택하면 오른쪽 그림과 같이 복사본이 만들어집니다. 복사본이기에 각자에게 맞춰 수정해서 사용할 수 있습니다.

사본 만들기(왼쪽)과 만들어진 사본(오른쪽)

코드 셀 실행과 결과 살펴보기

첫 번째 코드 셀을 실행하면 이제 경고 문구가 나타나지 않고 실행이 됩니다. 

첫 코드 셀 아래에 SPY 시가, 고가, 저가, 종가, 거래량, 수정 종가를 가져오는 코드 셀이 있습니다.

SPY 주가를 가져오는 코드 셀과 실행 결과

이전 실행 결과가 남아있지만, 왼쪽 동그란 재생 버튼을 누르면 해당 코드 셀이 실행되어 최신 데이터로 업데이트됩니다. 모든 코드 셀의 구조는 동일하니 간단하게 설명합니다.

  • df = fdr.DataReader('SPY')
    • SPY 데이터를 가져와서 df 변수에 넣습니다.
  • display(df)
    • df 변수를 출력합니다. 그림에서 하단에 있는 테이블입니다.
    • 테이블을 보면 Date(거래일), Open(시가), High(고가), Low(저가), Close(종가), Volume(거래량), Adj Close(수정 종가)의 7개 칼럼이 있습니다. 첫 칼럼인 Date는 인덱스(index)이기에 칼럼명이 표시되어 있지 않습니다.
    • 미국 데이터(엄밀하게는 야후 파이낸스 데이터)의 경우 종가(Close)는 거래 가격인 PR(Price Return)이고, 수정 종가(Adj Close)는 배당이 고려된 TR(Total Return)입니다.
  • df[['Close', 'Adj Close']].plot()
    • 종가와 수정 종가로 그래프를 만듭니다.
  • plt.show()
    • 만들어진 그래프를 표시합니다.

해당 코드 셀을 실행하면 다음과 같이 테이블이 먼저 나타나고 그 아래에 그래프가 하나 나타납니다.

SPY 데이터 테이블과 SPY 종가(Close), 수정 종가(Adj Close) 그래프

왼쪽 그림에 있는 테이블을 보면 총 8,068 거래일 데이터가 있지만, 앞의 첫 5 건과 마지막 5 건만 표시됩니다. 오른쪽 그림의 그래프를 보면 배당 금이 고려된 TR(Adj Close)은 PR(Close) 보다 누적 수익률이 더 높았음을 알 수 있습니다.

결과 테이블을 구글 시트로 복사하기

코드 실행 결과로 나온 테이블을 복사해서 구글 시트나 마이크로소프트 엑셀로 옮기면 됩니다.

테이블에

왼쪽 그림과 같이 테이블 왼쪽에 3개의 아이콘이 있습니다. 첫 번째 아이콘을 누르면 오른쪽 그림과 같이 모든 데이터가 나열된 결과를 얻을 수 있습니다. 게시판 글처럼 한 번에 25개씩 보여주며, 다음 페이지로 계속 이동할 수 있습니다.

"Filter"라는 글자가 적힌 버튼 오른쪽에 복사 아이콘이 보입니다. 이 버튼을 누릅니다.

테이블의 복사 아이콘을 누른 결과

CSV, JSON, Markdown(마크다운) 형식으로 복사가 가능한데, 기본 지정된 CSV 그대로 "Copy" 버튼을 누르면 클립보드(clipboard)에 데이터가 복사됩니다.

구글 시트에 붙입니다.

구글 시트에 복사해서 붙인 결과

왼쪽 그림과 같이 생각과는 달리 각 칼럼이 구분되어 붙지 않습니다. 가만히 보면 네모난 아이콘이 하나 생겼음을 알 수 있습니다. 오른쪽 그림과 같이 이 아이콘을 클릭하여 "텍스트를 열로 분할" 옵션을 선택하면, 아래 그림과 같이 칼럼별로 구분되어 데이터가 정리됩니다.

텍스트를 열로 분할한 결과

첫 칼럼의 이름을 날짜로 바꾸고, 각 칼럼의 서식을 적절히 변경하면 다음과 같은 결과를 얻을 수 있습니다.

서식을 정리한 결과

마이크로소프트 엑셀의 경우 "텍스트 마법사 사용"으로 붙여 넣으면 됩니다.

엑셀에서 텍스트 마법사를 사용하여 붙여넣는 예

이후 코드 셀에 대한 간략한 설명

SPY 데이터를 가져오는 코드 셀 아래에는 다음과 같은 몇 가지 예제 코드 셀이 있습니다.

  • SPY, TLT, GLD 수정 종가를 한 번에 가져오는 예 - 수정 종가만 가져옵니다.
  • SPY, TLT, GLD 수정 종가를 한 번에 가져오되 공통 기간만 남기는 예.
  • KODEX 200 주가를 가져오는 예 - 가격 관련 데이터는 모두 수정 주가입니다.
  • 환율 데이터를 가져오는 예 - 간단한 설명이 있지만 인베스팅닷컴으로 데이터 소스를 권합니다.
  • 미국 기준 금리 데이터를 가져오는 예.

정리하며

구글 Colab을 이용하여 주가 및 관련 데이터를 가져와서 스프레드시트로 복사하는 방법을 소개했습니다. FinanceDataReader 패키지 관련 문서를 참고하면, 예시 이외에도 다양한 데이터를 손쉽게 얻을 수 있습니다.

관련 서적: <왜 위험한 주식에 투자하라는 걸까? - 장기 투자와 분산 투자에 대한 통계학적 시각>, <구글 시트로 시작하는 투자 포트폴리오 분석 - 오렌지사과의 불친절한 워크북>

함께 읽으면 좋은 글:

도움이 되었다면, 이 글을 친구와 공유하는 건 어떻까요?

facebook twitter kakaoTalk naver band