저번 컨텐츠에서 우리는 기본적인 파이썬 설치와 환경을 설정하고 Jupyter Notebook을 실행하는 법을 배웠습니다.
이번 글에서는 Pandas DataReader 라는 모듈을 사용하여 Jupyter Notebook 에서 주가 데이터를 읽어 오는 법을 알아보려 합니다. 프로그래밍을 하나도 몰라도 누구나 이해하면서 쉽게 따라 할 수 있도록 자세하게 설명하였으니 차근차근 읽어보시면 좋을 것 같습니다.
위에서 모듈이란 단어를 사용하였는데 여기서 모듈이란 '파일 단위로 작성된 프로그램의 기능 단위'를 의미합니다. 쉬운 이해를 위해 프로그램을 작성하는 일을 블록을 조립하여 로봇을 만드는 일이라고 생각해봅시다. 따로 만들어져있는 부품이 없다면 설명서를 보면서 작은 블록들을 하나하나 조립해 나가야 로봇이 겨우 완성될 것입니다. 하지만 내가 원하는 부분 (예를 들어 로봇의 팔이나, 다리, 몸통 등) 을 누가 조립해 놓았고 그것을 자유롭게 가져다 쓸 수 있다면 훨씬 수월하게 로봇을 만들 수 있을 것입니다.
프로그래밍에서 모듈이 바로 '조립되어있는 어떤 기능을 할 수 있는 부품'에 해당된다고 이해하시면 됩니다. 따라서 '모듈을 가져다 쓴다'라는 것은 '누군가 블록으로 조립해놓은 부품을 가져다 쓰는 것'입니다. 파이썬의 모듈을 사용할 때에는 해당 모듈을 설치하고 불러오기만(import) 하면 해당 모듈에 구현된 함수 및 자료구조 등을 편리하게 사용할 수 있습니다.
그렇다면 우리가 사용할 pandas_datareader라는 모듈을 설치하는 방법을 알아보도록 하겠습니다.
먼저 아나콘다가 설치된 폴더에 들어갑니다.
그다음 Anaconda Prompt를 실행합니다.
위와 같이 pip install pandas_datareader라고 입력한 뒤 엔터키를 누릅니다.
여기서 pip install 은 특정한 모듈을 설치하라는 명령어입니다.
설치가 정상적으로 진행되었다면 위와 같은 메시지가 출력됩니다.
설치에 문제가 있거나 진행에 문제가 생겼다면 pip 설치 링크에서 자신의 운영체제에 맞는 pip 툴을 설치해보시고 다시 위 과정을 시도해 보시면 됩니다. 이로써 pandas_datareader라는 모듈이 파이썬에 설치되었습니다.
이제 Jupyter notebook에서 모듈을 불러와서 사용하는 법을 알아보도록 하겠습니다. 저번 글에서처럼 Jupyter notebook을 실행한 뒤 처음 셀에 다음과 같이 입력 한 후 실행(쉬프트 + 엔터) 합니다.
정상적으로 실행되었다면 표시된 부분과 같이 ln [1]이라는 글씨가 떠있어야 합니다.
위 코드의 뜻은 "pandas_datareader라는 모듈에 pdr이라는 이름을 붙여서 불러와라"입니다. 즉 우리는 이제 코드에서 pdr이라는 명령을 통해 pandas_datareader 모듈에 접근할 수 있는 것입니다.
그렇다면 이제 pdr이라는 이름으로 불러온 모듈을 사용해 보도록 하겠습니다. 두 번째 셀에 아래와 같이 코드를 입력합니다.
이 코드의 뜻은 pdr이라는 이름을 가진 모듈에서 DataReader라는 함수를 사용하겠다는 뜻입니다. 그렇다면 파이썬에서 함수는 무엇일까요? 수학시간에 배운 함수와 비슷하게 생각하면 됩니다.
학창시절 박스 모양의 그림을 보면서 '함수는 x라는 입력이 들어오면 어떤 y 값을 뱉어내는 기계와 비슷한 것이다.'라고 배운 적이 있습니다.
함수 박스 개념
파이썬에서 함수도 이와 같습니다. 우리가 입력한 pdr.DataReader 가 박스의 역할을 하는 것이고 그 옆의 괄호 안에 있는 값들, ('종목코드', '주가 데이터를 읽어올 곳', '시작일', '종료일') 와 같은 양식으로 표현되어 있는 정보가 입력값인 x에 해당합니다.
이 x 데이터가 pdr.DataReader라는 박스를 거치면 그 기간 동안의 주가 데이터라는 y 값이 나오게 되는 것이고 주피터 노트북은 나오는 y 값을 바로 보여주는 역할을 합니다. 따라서 위에서 입력한 코드를 해석해보면 다음과 같습니다.
구글이 가지고 있는 삼성전자(KRX:005930이 삼성전자의 종목코드입니다) 관련 주가 데이터 중에서 2017년 1월 1일부터 2017년 12월 8일 사이의 데이터를 가져와라
그렇다면 함수가 실제로 작동하는지 보기 위해 두 번째 셀에 입력한 코드를 실행해봅시다. 데이터가 나온다면 설정한 날짜와 다르게 현재의 날짜를 기준으로 1년치의 결과가 나오거나 다음과 같이 에러가 발생하게 될 것입니다.
두가지 경우 모두 같은 이유 때문에 발생하는 현상인데, 구글에서 주가 데이터를 제공해주는 url이 최근에 변경되었기 때문 입니다. DataReader라는 함수에 바뀌기 이전의 url 주소가 설정되어 있어서 에러가 나는 것입니다. 이 문제를 해결하기 위해 세 번째와 네 번째 셀에 다음과 같이 코드를 입력하고 두 줄 다 실행을 합니다.
정상적으로 실행이 되었다면 다음과 같은 화면이 나타나게 될 것입니다.
뭔가 복잡해 보이고 어려워 보일 수 있지만 여기서 우리는 하늘색 테두리 친 부분만 최신 url 주소로 고쳐 주면 됩니다. 이 코드를 수정하기 위해서는 빨간색으로 테두리친 경로에 저장된 daily.py 라는 파일에 접근해야 합니다. 그러기 위해 저번 시간에 설치한 파이참을 실행하여 위의 경로에 있는 daily.py 파일을 열어 줍니다.
PyCharm에서 daily.py를 열어 놓은 화면
파일을 열어준 다음 위와 같이 url 주소를 http://finance.google.com/finance/historical 로 바꿔 줍니다. 수정이 완료되었다면 저장한 후 파이참을 종료합니다.
파이참을 통해 모듈 수정이 완료되었지만 켜져 있는 주피터 노트북에 그것이 바로 적용되지는 않습니다. 새로 바뀐 모듈을 import 해서 사용하려면 작업 중인 노트북을 종료(Shutdown) 했다가 다시 켜줘야 합니다. 먼저 아까 작업 중이던 주피터 노트북에서 디스크 버튼을 눌러 저장한 뒤 창을 닫습니다.
저는 Pandas_google_finance_data_reader.ipynb 라는 노트북에서 작업을 하고 있었는데 창을 닫아도 옆에 Running 이 떠있음을 볼 수 있습니다. 이를 종료시키기 위해 체크 버튼을 누릅니다. 체크 버튼을 누르면 아래 사진과 같이 Shutdown 항목이 생기는데 그 버튼을 눌러줍시다.
Shutdown 을 하면 다음과 같이 Running 표시가 사라지게 됩니다.
이제 다시 노트북에 들어가서 데이터 읽어오는 코드를 실행해 보도록 하겠습니다. 첫 번째 셀과 두 번째 셀의 코드를 차례대로 실행해 주면 다음과 같이 주피터 노트북에 시작일로 정한 2017년 1월 1일부터의 데이터가 출력되는 것을 확인할 수 있습니다. (1월 1일이 빠져있는 이유는 주식 장이 열리지 않는 날이기 때문입니다. 휴장일은 데이터가 없기 때문에 빠져있습니다.)
스크롤을 내려서 확인해 보면 우리가 종료일로 정한 12월 8일 이전까지의 삼성전자(KRX:005930) 주가 데이터가 출력되어 있음을 확인할 수 있습니다. 표의 각 항목을 설명하며 글을 마치도록 하겠습니다.
'Open'은 그날 장이 열릴 때의 시가를 의미합니다.
'High'는 그날 장에서의 최고가를 의미합니다.
'Low'는 그날 장에서의 최저가를 의미합니다.
'Close'는 그날 장이 마감할 때 수정 종가를 의미합니다(수정 주가에 대한 설명 보기)
'Volume'은 거래량을 나타내는 데이터입니다.
이번 글에서는 Pandas DataReader라는 모듈을 활용해서 Google Finance의 주가 데이터를 불러오는 방법에 대해 알아보았습니다. 다음 시간에는 주가 데이터를 불러오는 다른 방법들(키움 API 사용, 직접 크롤링하기)과 불러온 데이터를 파이썬으로 어떻게 처리 또는 시각화할 수 있는지 그 방법에 대해서 알아보려고 합니다.
질문이나 더 궁금한 점은 댓글로 올려주시면 저에게도 큰 도움이 될 것 같습니다! 다음 포스팅도 기대해주시길 바랍니다.
더 유익한 정보를 얻고 싶으시다면 페이스북 알파스퀘어 페이지를 방문해주세요!
차세대 주식투자 플랫폼, 알파스퀘어에서 스마트한 주식투자를 경험해보세요!