2017-11-29 11 views
3

다음 코드에 의해 구글에서 금융 데이터를 잡기 위해 노력 :Google의 pandas_datareader가 어떻게 작동하지 않습니까?

import pandas_datareader.data as wb 
import datetime as dt 
start = dt.datetime(2015, 1, 1) 
end = dt.datetime(2017, 1, 1) 

dt = wb.DataReader('FB', 'google', start, end) 
dt.head() 

나는 이것을 얻었다. 내가 (대신 야후 금융을 사용하여) 'yahoo'에 '구글'변경 한 경우

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 24697: invalid start byte

는하지만, 그것을 잘 작동합니다. 그래서 그게 잘못된거야?

+0

나는 오늘 밤까지 비슷한 오류가 발생했지만 오늘까지 작동 한 스크립트에 주식 목록을 제공하고 있습니다. 아래 링크는이 변경과 관련이있을 수 있습니다. https://github.com/rsvp/fecon235/issues/7#issuecomment-332572738 –

답변

3

공개 문제는 here입니다.

아래의 간단한 수정 사항은 소스에서 포팅하여 페어링하고 약간 수정하는 것입니다.

나는 requests.get()에 의해 반환 된 본문과 결과 바이트를 읽는 것이 문제라고 생각합니다. (역 추적은 이에 동의합니다.) 예를 들어, data = requests.get(url).content (바이트 가져 오기); 이 작업은 실패합니다. 아래에서 data = requests.get(url).text이 작동합니다.

이 엄격한 테스트를 거치지는 않았지만 Google API는 정상적으로 작동하는 것처럼 보입니다. 예를 들어 url에 의해 생성 된 내보내기 링크는 현재 정상적으로 작동합니다.

import datetime 
import requests 
from io import StringIO 
from pandas.io.common import urlencode 
import pandas as pd 

BASE = 'http://finance.google.com/finance/historical' 


def get_params(symbol, start, end): 
    params = { 
     'q': symbol, 
     'startdate': start.strftime('%Y/%m/%d'), 
     'enddate': end.strftime('%Y/%m/%d'), 
     'output': "csv" 
    } 
    return params 


def build_url(symbol, start, end): 
    params = get_params(symbol, start, end) 
    return BASE + '?' + urlencode(params) 


start = datetime.datetime(2010, 1, 1) 
end = datetime.datetime.today() 
sym = 'SPY' 
url = build_url(sym, start, end) 

data = requests.get(url).text 
data = pd.read_csv(StringIO(data), index_col='Date', parse_dates=True) 

print(data.head()) 
#    Open High  Low Close  Volume 
# Date 
# 2017-11-30 263.76 266.05 263.67 265.01 127894389 
# 2017-11-29 263.02 263.63 262.20 262.71 77512102 
# 2017-11-28 260.76 262.90 260.66 262.87 98971719 
# 2017-11-27 260.41 260.75 260.00 260.23 52274922 
# 2017-11-24 260.32 260.48 260.16 260.36 27856514 

편집 : 문제는 pandas_datareader의 0.6.0 버전에서 수정되어야합니다. 그렇지 않은 경우 as bashtage requested을 다시 열어주세요.

+0

... 새로운 질문에 답하겠습니다. – MJS