Tengo problemas para crear una trama y también para convertir una marca de tiempo en una fecha.

El siguiente código extrae datos de Yahoo Finance en un marco de datos de pandas. La fecha sirve como índice para el conjunto de datos en ese archivo y se ve así:

2007-05-01 00:00:00

En primer lugar, me gustaría convertir ese índice de formato de fecha y hora a fecha, pero lo que es más importante, quiero averiguar reproducir el gráfico obtenido de rels.plot() en el código a continuación, usando matplotlib para poder agregar una vertical línea en una fecha determinada (el formato no necesita ser exactamente el mismo)

import pandas.io.data as web
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

all_data = {}
for ticker in ['AAPL','MSFT']:
        all_data[ticker] = web.get_data_yahoo(ticker, '5/1/2007','10/1/2007')

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

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

returns = price.pct_change()
rels = price/price.ix[0]

rels.plot()

plt.Line2D(rels.index,rels.AAPL)
plt.show()

El código anterior descarga todos los datos para que pueda trabajar con los mismos datos que estoy usando en su máquina si es necesario. En este momento, en mi máquina en el cuaderno IP [y], este código se ejecuta pero plt.show () no genera un gráfico. El código debe generar DOS parcelas (la primera es la trama de referencia que intento recrear con matplotlib).

1
Chris 2 sep. 2014 a las 01:24

2 respuestas

La mejor respuesta

[Movido de los comentarios para cerrar esto:]

En lugar de Line2D, que simplemente crea un objeto de línea, si realmente desea hacer un nuevo diagrama completo que desee

plt.plot(rels.index, rels.AAPL)

En lugar de.

0
DSM 2 sep. 2014 a las 00:00

Puede usar strptime y un formato para obtener la cadena de fecha para insertar en el yahoo web.get:

 import datetime as dt

 startdate = '5/1/2007'
 enddate = '10/1/2007'

 time_format = "%Y,%m,%d"

 dt_start = dt.datetime.strptime(startdate, time_format)

 dt_end = dt.datetime.strptime(enddate, time_format)

 The rest of the code example****** = web.get_data_yahoo(ticker, dt_start,dt_end)
0
pythonhunter 2 sep. 2014 a las 01:32