2014-05-13 1 views
7

Sto lavorando al libro di Wes McKinney Python per l'analisi dei dati ea pagina 139 in Correlazione e Covarianza, ricevo un errore quando provo a eseguire il suo codice per ottenere dati da Yahoo! Finanza.Caricamento dati da Yahoo! Finanza con i panda

Ecco quello che sto facendo funzionare:

#CORRELATION AND COVARIANCE 
import pandas.io.data as web 

all_data = {} 
for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOG']: 
    all_data[ticker] = web.get_data_yahoo(ticker, '1/1/2003', '1/1/2013') 

price = DataFrame({tic: data['Adj Close'] 
        for tic, data in all_data.iteritems()}) 
volume = DataFrame({tic: data['Volume'] 
        for tic, data in all_data.iteritems()}) 

Qui è l'errore sto ottenendo:

Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
    File "C:\Users\eMachine\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\pandas\io\data.py", line 390, in get_data_yahoo 
    adjust_price, ret_index, chunksize, 'yahoo', name) 
    File "C:\Users\eMachine\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\pandas\io\data.py", line 336, in _get_data_from 
    hist_data = src_fn(symbols, start, end, retry_count, pause) 
    File "C:\Users\eMachine\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\pandas\io\data.py", line 190, in _get_hist_yahoo 
    return _retry_read_url(url, retry_count, pause, 'Yahoo!') 
    File "C:\Users\eMachine\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\pandas\io\data.py", line 169, in _retry_read_url 
    "return a 200 for url %r" % (retry_count, name, url)) 
IOError: after 3 tries, Yahoo! did not return a 200 for url 'http://ichart.yahoo.com/table.csv?s=GOOG&a=0&b=1&c=2000&d=0&e=1&f=2010&g=d&ignore=.csv' 
>>> ... >>> >>> ... >>> 

Qualche idea su quale sia il problema?

+5

penso che il ticker per Google è cambiato. Prova: 'GOOGL' –

+0

Bello! @ Karl D. Grazie per la rapida risposta utile! – panterasBox

risposta

7

Come Karl ha sottolineato, il ticker aveva cambiato significato, restituendo una "pagina non trovata".

Quando i dati elettorali dal web, è una buona idea per avvolgere la chiamata in una prova ad eccezione

all_data = {} 
for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOG']: 
    try: 
     all_data[ticker] = web.get_data_yahoo(ticker, '1/1/2003', '1/1/2013') 
     price = DataFrame({tic: data['Adj Close'] 
        for tic, data in all_data.iteritems()}) 
     volume = DataFrame({tic: data['Volume'] 
        for tic, data in all_data.iteritems()}) 
    except: 
     print "Cant find ", ticker 
+0

meglio specificare anche il tipo di eccezione. In questo caso sarebbe 'tranne IOError:' Vedi http://stackoverflow.com/questions/14797375/should-i-ways-specify-an-exception-type-in-except-statements – datavoredan

+0

A partire da ottobre 2015, questo il metodo non funziona neanche –

1

A partire dal 6/1/17, ho ricostruito il seguente insieme da questa pagina e un paio di altri:

from pandas_datareader import data as web 
# import pandas.io.data as web 
import fix_yahoo_finance 
import datetime 

start = datetime.datetime(2010, 1, 1) 
end = datetime.datetime(2017, 6, 1) 

all_data={} 
for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOGL']: 
    all_data[ticker] = web.get_data_yahoo(ticker, start, end) 

price = DataFrame({tic: data['Adj Close'] 
        for tic, data in all_data.iteritems()}) 
volume = DataFrame({tic: data['Volume'] 
        for tic, data in all_data.iteritems()})