안수찬 블로그

Pandas 에서 주가 데이터 가져오기 - 코스피 지수

Introduction

안수찬 @dobestan

서울대학교에서 컴퓨터공학을 전공하고, 오랜 기간 서비스 기획 및 개발을 해 왔습니다. 이러한 전문성을 인정받아 미래부 소프트웨어 마에스트로에 선정된 바 있습니다. 현재는 모바일 방송국, 퍼스트캔버스에서 컨텐츠로 새로운 가치를 그리고 있습니다. 나는 안수찬이다. 그러므로 나는 할 수 있다. me@ansuchan.com


python 데이터 분석

Pandas 에서 주가 데이터 가져오기 - 코스피 지수

Posted by 안수찬 @dobestan on .
Featured

python 데이터 분석

Pandas 에서 주가 데이터 가져오기 - 코스피 지수

Posted by 안수찬 @dobestan on .

내가 주로 분석하는 데이터가 지수, 주가 데이터이다 보니 기업교육을 진행하면서도 주로 주식 데이터를 가지고 하는 경우가 많은데, ( 또 직장인 분들은 다수가 주식을 하시니 바로 와닫는 데이터이기도 하고 ) 이때 실시간 데이터가 아닌, 정적인 주가 데이터를 받아오는 여러가지 방법에 대해서 공유한다.

0. TL;DR

from pandas_datareader import data  
df = data.DataReader("KRX:KOSPI", "google")  
# 끝
# 더 짧고! 간결하게!
data.get_data_google("KRX:KOSPI")  
  • 그래도, 여러가지 다른 방법이 필요한 경우도 있으니, 다른 방법들도 이런게 있었구나 정도로 살펴보자.

1. 직접 다운로드 받는 방법

사실 가장 간단한 방법은 그냥 웹사이트 들어가서 다운로드 받는 방법일 것이다.

Google Finance KOSPI
Google Finance - KRX:KOSPI

이렇게 각각의 사이트에서 Historical Prices 섹션에서 CSV 데이터를 다운로드 받을 수 있다.

  1. Google Finance ( https://www.google.com/finance )
  2. Yahoo Finance ( https://finance.yahoo.com/ )

에서 모두 제공하니 편하게 받아볼 수 있다. 두 사이트 모두 각 지수별/종목별 "Historical Prices" 섹션으로 들어가면 CSV 형태로 다운로드 받을 수 있다.

2. 쉘명령어를 이용해서 받는 방법

이것도 직접 다운로드 받는 방법이기는 하다. 이것도 정말 많은 방법이 있겠지만, 여기서는 wget, curl 두 가지 커맨드를 가지고 하는 방법에 대해서 공유한다. 그리고 이 방법의 좋은 점은 만약 Jupyter Notebook 을 사용하고 있다면, 바로 그 환경에서도 실행시킬 수 있다.

다음의 기간 조건 없이, 구글 Finance 에서 코스피 데이터를 받아올 수 있는 링크이다: http://www.google.com/finance/historical?q=KRX%3AKOSPI&output=csv 이 경우에는 다음과 같이 명령어를 이용해서 kospi.csv 파일로 저장할 수 있다.

$ # Terminal
$ wget "http://www.google.com/finance/historical?q=KRX%3AKOSPI&output=csv" -O kospi.csv
$ Terminal
$ curl "http://www.google.com/finance/historical?q=KRX%3AKOSPI&output=csv" > kospi.csv

아마 여러분들이 데이터 분석 용도로 사용하시는 Jupyter Notebook 에서도 shell command 를 사용할 수 있기 때문에 다음의 방법이 모두 가능하다.

# Jupyter Notebook 내에서 다음과 같이 실행이 가능하다.
In[0]: !wget "http://www.google.com/finance/historical?q=KRX%3AKOSPI&output=csv" -o kospi.csv  
# Jupyter Notebook 내에서 다음과 같이 실행이 가능하다.
In[0]: !curl "http://www.google.com/finance/historical?q=KRX%3AKOSPI&output=csv" > kospi.csv  

3. 파이썬 코드로 다운로드 받는 방법

이것 또한 직접 다운로드 받는 방법이기는 하다. 여기에서는 간단하게 흐름만 보여드리려고 requests 라이브러리를 사용해서 데이터를 받아왔다. 그런데 굳이 이렇게 까지 해야할까 라는 생각이 드는 것도 사실이다. 이렇게 할거면 위에 shell script 를 쓸수도 있지 않는가? 라는 생각도 들기는 하지만, Jupyter Notebook 환경이 아니라면, 즉, Python 스크립트로만 작성된 경우라면, 또 그 상황에서 동적으로 데이터를 받아와야하는 경우라면 이렇게 할 수 도 있겠다.

import requests


url = "http://www.google.com/finance/historical?q=KRX%3AKOSPI&output=csv"

response = requests.get(url)  
with open("kospi.csv", "w") as fp:  
    fp.write(response.text)

4. pandas_datareader 를 이용해서 받는 방법

사실 이 방법을 쓰기 위해서 이 포스팅을 썻다고 할 수 있겠다. 이전 버전의 pandas 에서는 from pandas.io import data, wb 의 형태로 사용을 했지만, 별도의 pandas_datareader 패키지로 분리되면서 패키지를 설치해야 사용할 수 있다. 하지만 엄청나게 편하기 때문에 꼭 설치해서 사용하도록 하자.

$ pip install pandas_datareader

구글 Finance 에서 코스피 가져오기

from pandas_datareader import data, wb  
from datetime import datetime


# 구글에서 코스피 지수를 받는 예시를 살펴보자.
# 기본적으로 기간이 설정되지 않으면, 2010년 01월 01일을 기준으로 오늘까지의 데이터를 받아온다.
df = data.DataReader("KRX:KOSPI", "google")


# 만약, 2016년의 데이터만 받아오고 싶다면,
# 다음과 같이 기간을 설정해줄 수 있다.
df = data.DataReader(  
    "KRX:KOSPI"        # name
    "google"           # data source
    datetime(2016, 01, 01)   # start
    datetime(2016, 12, 31)   # end
)
# 다음과 같이 get_data_google, get_data_yahoo 
# 처럼 불러올 수도 있다.
data.get_data_google("KRX:KOSPI")  

야후 Finance 에서 코스피 가져오기

df = data.DataReader("^KS11", "yahoo")  
df = data.get_data_yahoo("^KS11")  

마무리

특별히 마무리 할 내용이 없어서, 2016년의 코스피 그래프를 그리는 것으로 끝을 내보자. 끝.

ax = df.Close.plot()

ax.set_title("KOSPI 2016")  
ax.set_ylabel("Index")  
ax.set_xlim("2016-01-01", "2016-11-15")  

KOSPI 2016

안수찬 @dobestan

https://ansuchan.com/

서울대학교에서 컴퓨터공학을 전공하고, 오랜 기간 서비스 기획 및 개발을 해 왔습니다. 이러한 전문성을 인정받아 미래부 소프트웨어 마에스트로에 선정된 바 있습니다. 현재는 모바일 방송국, 퍼스트캔버스에서 컨텐츠로 새로운 가치를 그리고 있습니다. 나는 안수찬이다. 그러므로 나는 할 수 있다. me@ansuchan.com

View Comments...