Yahoo Finance to Google Finance

Yahoo Finance to Google Finance

Yahoo의 서비스 구조 변경 (2017년 5월 15일 부터 아래 2개 URL 서비스 불가)

이 때문에, pandas_datareader 에서 yahoo로 지정했을 경우 동작하지 않음 (2017년 6월 현재)

이 부분들을 Google Finance 대체 할 수 있으며,
아래와 같이 코스피 지수, 개별종목, 가격을 URL에서 직접 가져오기 3가지로 부분을 정리하였습니다
(다른 Yahoo finance API는 잘 동작합니다)

2017 FinanceData http://fb.com/financedata
In [2]:
import pandas as pd
from datetime import datetime
from pandas_datareader import data

코스피 지수

# yahoo
start = datetime(2017, 1, 1)
end = datetime(2017, 4, 30)

df = data.get_data_yahoo("^KS11", start, end)
df = data.DataReader("^KS11", "yahoo", start, end)
In [3]:
start = datetime(2017, 1, 1)
end = datetime(2017, 4, 30)

# google
df = data.get_data_google("KRX:KOSPI", start, end)
df.head()
Out[3]:
Open High Low Close Volume
Date
2017-01-02 2022.23 2031.79 2015.68 2026.16 229874000
2017-01-03 2034.31 2044.07 2028.47 2043.97 268127000
2017-01-04 2046.29 2046.29 2040.61 2045.64 371488000
2017-01-05 2045.52 2046.50 2039.49 2041.95 541343000
2017-01-06 2048.11 2051.84 2045.66 2049.12 455350000
In [4]:
# google
df = data.DataReader("KRX:KOSPI", "google", start, end)
df.head()
Out[4]:
Open High Low Close Volume
Date
2017-01-02 2022.23 2031.79 2015.68 2026.16 229874000
2017-01-03 2034.31 2044.07 2028.47 2043.97 268127000
2017-01-04 2046.29 2046.29 2040.61 2045.64 371488000
2017-01-05 2045.52 2046.50 2039.49 2041.95 541343000
2017-01-06 2048.11 2051.84 2045.66 2049.12 455350000

개별 종목

In [5]:
# yahoo
# df = data.get_data_yahoo("005930.KS", start, end)

# google
df = data.get_data_google("KRX:005930", start, end)
df.head()
Out[5]:
Open High Low Close Volume
Date
2017-01-02 1799000.0 1812000.0 1794000.0 1805000.0 92936
2017-01-03 1814000.0 1831000.0 1801000.0 1824000.0 146807
2017-01-04 1825000.0 1826000.0 1805000.0 1808000.0 145894
2017-01-05 1803000.0 1803000.0 1777000.0 1778000.0 209212
2017-01-06 1809000.0 1822000.0 1802000.0 1810000.0 167595

URL에서 가져오기

In [6]:
# yahoo
url = "http://real-chart.finance.yahoo.com/table.csv?s=%s&a=0&b=1&c=2017&d=3&e=30&f=2017&g=d&ignore=.csv"

# google
url = "http://www.google.com/finance/historical?q=KRX:KOSPI&startdate=2017-01-30&enddate=2017-04-30&output=csv"

df = pd.read_csv(url, index_col='Date', parse_dates=True)
df.head(10)
Out[6]:
Open High Low Close Volume
Date
2017-04-28 2214.36 2217.04 2202.20 2205.44 268642000
2017-04-27 2201.72 2211.59 2199.76 2209.46 386106000
2017-04-26 2202.37 2210.61 2200.73 2207.84 397525000
2017-04-25 2175.70 2196.85 2174.11 2196.85 275897000
2017-04-24 2175.50 2177.89 2166.83 2173.74 374713000
2017-04-21 2161.24 2169.46 2156.64 2165.04 281540000
2017-04-20 2138.19 2150.43 2134.05 2149.15 268315000
2017-04-19 2144.98 2148.03 2133.82 2138.40 344221000
2017-04-18 2155.36 2155.36 2139.31 2148.46 291399000
2017-04-17 2140.87 2150.70 2138.70 2145.76 259303000

pandas-datareader 0.5 Fixed

v0.5 (2017년 7월 25일)에서 fixed

pandas_datareader 에서 "yahoo"를 지정했을 때 데이터를 가져오지 못하는 문제는 pandas-datareader 0.5 (July 25, 2017) 이상에서 수정되었습니다. (2017년 5월 15일 ~ 7월 25일까지, 약 2달 정도 pandas_datareader 에서 "yahoo"의 가격 부분이 정상적으로 동작하지 않았습니다)

pandas_datareader 내부적으로 http://ichart.finance.yahoo.com 를 사용하지 않고, https://query1.finance.yahoo.com 를 사용하는 것으로 수정되었네요.

업그레이드에 대한 상세 내용은,

업그레이드

v0.5 미만의 버전을 사용 중이라면, 다음과 같이 업그레이드하면 됩니다.

$ sudo pip3 install -U pandas_datareader

댓글

Comments powered by Disqus