Calcul des retours d'une base de données avec des données financières
J'ai un dataframe mensuelles en données financières:
In [89]: vfiax_monthly.head()
Out[89]:
year month day d open close high low volume aclose
2003-01-31 2003 1 31 731246 64.95 64.95 64.95 64.95 0 64.95
2003-02-28 2003 2 28 731274 63.98 63.98 63.98 63.98 0 63.98
2003-03-31 2003 3 31 731305 64.59 64.59 64.59 64.59 0 64.59
2003-04-30 2003 4 30 731335 69.93 69.93 69.93 69.93 0 69.93
2003-05-30 2003 5 30 731365 73.61 73.61 73.61 73.61 0 73.61
Je suis en train de calculer le rendement de ce genre:
In [90]: returns = (vfiax_monthly.open[1:] - vfiax_monthly.open[:-1])/vfiax_monthly.open[1:]
Mais je reçois uniquement des zéros:
In [91]: returns.head()
Out[91]:
2003-01-31 NaN
2003-02-28 0
2003-03-31 0
2003-04-30 0
2003-05-30 0
Freq: BM, Name: open
Je pense que c'est parce que les opérations arithmétiques obtenez aligné sur l'indice et qui rend la [1:]
et [:-1]
inutile.
Ma solution est:
In [103]: returns = (vfiax_monthly.open[1:].values - vfiax_monthly.open[:-1].values)/vfiax_monthly.open[1:].values
In [104]: returns = pd.Series(returns, index=vfiax_monthly.index[1:])
In [105]: returns.head()
Out[105]:
2003-02-28 -0.015161
2003-03-31 0.009444
2003-04-30 0.076362
2003-05-30 0.049993
2003-06-30 0.012477
Freq: BM
Est-il une meilleure façon de calculer le rendement? Je n'aime pas la conversion en tableau et puis de nouveau à la Série.
source d'informationauteur Daniel Velkov
Vous devez vous connecter pour publier un commentaire.
Au lieu de trancher, l'utilisation
.shift
pour déplacer la position de l'index de valeurs dans un DataFrame/Série. Par exemple:C'est ce que
pct_change
est en train de faire sous le capot. Vous pouvez également l'utiliser pour d'autres fonctions, par exemple:Vous pouvez également regarder dans le roulant et fenêtre fonctions pour d'autres types d'analyse de données financières.
La façon la plus simple pour ce faire est d'utiliser le DataFrame.pct_change() la méthode.
Voici un exemple rapide
La meilleure façon de calculer la prospective retuns sans aucune chance de biais est d'utiliser le construit en fonction de
pd.DataFrame.pct_change()
. Dans votre cas, tout ce que vous devez utiliser est cette fonction puisque vous avez des données mensuelles, et vous êtes à la recherche pour la déclaration mensuelle.Si, par exemple, vous souhaitiez regarder la 6 papillon de retour, vous venez de définir les param
df.pct_change(periods = 6)
et qui vous donnera la 6 pour cent le mois de retour.Parce que vous avez un relativement petit jeu de données, le plus simple est de rééchantillonnage sur les paramètres que vous avez besoin pour calculer les données sur, puis utilisez l'
pct_change()
à nouveau la fonction.Toutefois, du fait des propriétés de
log
il est courant d'utiliser la formule de calcul des rendements (si vous projetez de faire des statistiques sur le retour de la série):Qui vous permettrait de mettre en œuvre en tant que telle:
log_return = np.log(vfiax_monthly.open /vfiax_monthly.open.shift())