2015-05-15 11 views
5

Principiante di pitone qui.Media di rotazione del dataframe correlato al rotolamento in Python?

Quello che ho fatto finora:

  • importati dati sui prezzi da Yahoo Finance da una lista di titoli.

  • Tra gli stock (ogni combinazione), calcolata la correlazione rolling di 20 giorni in un dataframe.

vorrei:

1) calcolare la media mobile semplice 200 giorni per ciascuna delle correlazioni rotolamento 20 al giorno.

2) Riporta i risultati della media mobile a 200 giorni in una matrice.

Come fare questo in python/panda? Grazie, mi aiuterebbe un sacco!


Ecco quello che ho finora ...

import pandas as pd 
from pandas import DataFrame 
import datetime 
import pandas.io.data as web 
from pandas.io.data import DataReader 

stocks = ['spy', 'gld', 'uso'] 
start = datetime.datetime(2014,1,1) 
end = datetime.datetime(2015,1,1) 

f = web.DataReader(stocks, 'yahoo', start, end) 
adj_close_df = f['Adj Close'] 

correls = pd.rolling_corr(adj_close_df, 20) 

means = pd.rolling_mean(correls, 200) #<---- I get an error message here! 
+0

Cosa hai provato finora? Hai qualche codice scritto che possiamo aiutarti a migliorare? – APH

+1

@aphrael ha pubblicato il codice che ho finora –

+0

Ho ricevuto il messaggio di errore: AttributeError: l'oggetto 'Panel' non ha attributo 'dytpe' –

risposta

4

questo è un inizio, che risponde alle domande 1-3 (si dovrebbe avere una sola domanda per ogni post).

Ottenere la media mobile della correlazione di rotolamento è relativamente semplice per un singolo stock rispetto a tutti gli altri. Per esempio:

pd.rolling_mean(rolling_corr.major_xs('AAPL').T, 200).tail() 
Out[34]: 
      AAPL  GM  IBM 
Date         
2015-05-08  1 0.313391 0.324728 
2015-05-11  1 0.315561 0.327537 
2015-05-12  1 0.317844 0.330375 
2015-05-13  1 0.320137 0.333189 
2015-05-14  1 0.322119 0.335659 

Per visualizzare la matrice di correlazione per la più recente finestra di 200 giorni:

>>> rolling_corr.iloc[-200:].mean(axis=0) 
      AAPL  GM  IBM 
AAPL 1.000000 0.322119 0.335659 
GM 0.322119 1.000000 0.383672 
IBM 0.335659 0.383672 1.000000 
+0

questo è un grande ringraziamento. Questo è quanto ho ottenuto. Ora come calcoleresti un rolling_mean del rolling_corr? –

+0

è possibile eseguire una media mobile di tutte le correlazioni di rotolamento come una matrice? Spero che abbia senso ... –

+0

No, perché ti manca una dimensione. Una matrice è una vista bidimensionale dei dati. La domanda è come vorresti vedere le coppie di aziende contro una singola data. Vuoi una riga per ogni data e ogni colonna rappresenta una media mobile di tutte le possibili correlazioni a coppie? – Alexander

Problemi correlati