2017-04-21 1 views
0

J'essaie d'obtenir une valeur de corrélation pour les entrées d'une semaine avant la sortie de la semaine suivante. Par souci de cet exemple, je l'ai configuré où chaque entrée de la semaine sera la sortie de la semaine suivante, et df.corr() devrait donner un résultat 1.000000.Comment Pandas Corrélation de Pearson Offset avec Datetime Index

Mes données d'origine ressemble à ceci:

Date  Input  Output 
1/1/2010 73   73 
1/7/2010  2   73 
1/13/2010 3   2 
1/19/2010 4   3 

données échantillon complet téléchargé ici: https://drive.google.com/open?id=0B4xdnV0LFZI1MzRUOUJkcUY4ajQ

Voici mon code à ce jour:

import pandas as pd 
df = pd.read_csv('pearson.csv') 
df['Date'] = pd.to_datetime(df['Date'], errors = 'coerce') 
df = df.set_index(pd.DatetimeIndex(df['Date'])) 
df = df[['Input', 'Output']] 
x = df.corr(method = 'pearson', min_periods=1) 
print(x) 

Et comme un débutant est là où je suis coincé. Je ne vois pas une option shift intégrée dans la fonction et je ne sais pas comment faire cela.

Toute aide est appréciée.

Merci, moi

+0

BTW c'est tous les 6 jours. – piRSquared

Répondre

3

Si vous .corr sur une trame de données, il produira une matrice de corrélation.

Dans votre cas, vous voulez juste la corrélation entre les deux séries chronologiques et vous pouvez y parvenir avec le code ci-dessous. Notez que la méthode .corr pour une série chronologique nécessite le paramètre other, qui est la série pour calculer la corrélation avec.

df["Input"].corr(df["Output"].shift(-1), method = 'pearson', min_periods = 1) #1 

Si au contraire vous voulez que la matrice de corrélation, vous devez d'abord créer une trame de données avec sortie décalée puis calculer la corrélation:

temp_df = pd.concat([df['Input'], df['Output'].shift(-1)], axis = 1).dropna() 
temp_df.corr(method = 'pearson', min_periods = 1) 

#  Input Output 
#Input  1.0  1.0 
#Output 1.0  1.0 
+1

Félicitations à 1k;) – jezrael

+0

Ceci est une bonne réponse. – piRSquared