Logarithmique retourne dans les pandas dataframe
Python pandas a un pct_change fonction que j'utilise pour calculer le rendement pour les cours de la bourse dans un dataframe:
ndf['Return']= ndf['TypicalPrice'].pct_change()
J'utilise le code suivant pour obtenir logarithmique de rendement, mais il donne exactement les mêmes valeurs que le pct.modifier() fonction:
ndf['retlog']=np.log(ndf['TypicalPrice'].astype('float64')/ndf['TypicalPrice'].astype('float64').shift(1))
#np is for numpy
Vous devez vous connecter pour publier un commentaire.
Ici est une façon de calculer le journal de retour à l'aide de
.shift()
. Et le résultat est similaire, mais pas le même que le rendement brut calculé parpct_change()
. Pouvez-vous envoyer une copie de vos données-échantillon (dropbox lien de partage) pour reproduire l'incohérence que vous avez vu?np.log(df.price) - np.log(df.price.shift(1))
est équivalent ànp.log(df.price / df.price.shift(1))
(une opération de journal)Journal retours sont tout simplement le logarithme naturel de 1 plus l'arithmétique de retour. Alors, comment à ce sujet?
Seule ligne, et uniquement le calcul des journaux une fois.
D'abord les convertir pour vous connecter l'espace, puis prendre la 1-période de diff.
Les résultats pourraient semblent similaire, mais qui est juste à cause de la Développement de Taylor pour le logarithme. Depuis log(1 + x) ~ x, les résultats peuvent être similaires.
Cependant,
n'est pas tout à fait correct.
@poulter7:
Je ne peux pas commenter sur les autres réponses, donc je poste en tant que nouvelle réponse: être prudent avec
que cela ne fonctionne pas pour les indices qui peuvent devenir négatifs ainsi que les facteurs de risque par exemple, des taux d'intérêt négatifs. Dans ces cas
est préféré et basé sur mon expérience en général l'approche plus sûre. Il évalue également le logarithme qu'une seule fois.
Si vous utilisez des +1 ou -1 dépend de la commande de votre temps à la série. Utilisez -1 pour la descente et +1 pour l'ascension de dates dans les deux cas, le passage fournit le précédant la date de valeur.
np.log(1+s.pct_change())
etnp.log(s/s.shift(1))
, ce qui revient, une fois la série traverse en territoire négatif le journal renvoie commencez à faire un certain sens de nouveau. Ounp.log(s).diff())
et(np.log(s) - np.log(s.shift(1))
, explicitement la baisse des rendements négatifs.