Dans la continuité de Hier, nous continuerons d'analyser les données financières.
Lors de l'analyse d'un portefeuille d'actions, les rendements indiquent généralement une variation en pourcentage du prix des actifs. Trouvez la variation en pourcentage du cours de l'action à partir du cours de l'action d'Apple dans Yahoo! Finance.
Les dataframes pandas ont de puissantes fonctions de conversion de fréquence.
une fonction | La description |
---|---|
resample | Convertir les données en fréquence fixe |
reindex | Attribuer des données à un nouvel index |
Voir la référence (http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.html) pour d'autres fonctions de trame de données.
[Cours de clôture ajusté](http://www.yahoo-help.jp/app/answers/detail/p/546/a_id/45316/~/%E8%AA%BF%E6%95%B4%E5%BE % 8C% E7% B5% 82% E5% 80% A4% E3% 81% A8% E3% 81% AF) (valeurs de clôture ajustées) est un fractionnement pour capturer des données en continu avant et après une division d'actions ou un dividende. Il est ajusté à la dernière valeur.
L'indice de rendement est un indice qui montre la performance lorsque le dividende de l'action est également pris en considération, et il s'agit de données de série chronologique avec une valeur qui représente l'unité d'investissement. L'indice de retour d'Apple est calculé par la méthode cumprod.
import pandas as pd
import pandas.io.data as web
#Cours de clôture ajusté acquis de l'action Apple depuis 2010
price = web.get_data_yahoo('AAPL', '2009-12-31')['Adj Close']
returns = price.pct_change()
ret_index = (1 + returns).cumprod() #Calcul de l'indice de rendement
ret_index[0] = 1 #1 car la première ligne est NaN.À 0
print ( ret_index )
# =>
# Date
# 2009-12-31 1.000000
# 2010-01-04 1.015602
# 2010-01-05 1.017330
# 2010-01-06 1.001136
# 2010-01-07 0.999309
# 2010-01-08 1.005974
# 2010-01-11 0.997087
# 2010-01-12 0.985731
# 2010-01-13 0.999654
# 2010-01-14 0.993828
# 2010-01-15 0.977239
# 2010-01-19 1.020490
# 2010-01-20 1.004789
# 2010-01-21 0.987410
# 2010-01-22 0.938432
# ...
# 2014-02-19 2.653155
# 2014-02-20 2.622445
# 2014-02-21 2.593315
# 2014-02-24 2.604671
# 2014-02-25 2.577565
# 2014-02-26 2.554310
# 2014-02-27 2.605263
# 2014-02-28 2.598203
# 2014-03-03 2.605708
# 2014-03-04 2.622889
# 2014-03-05 2.628419
# 2014-03-06 2.620470
# 2014-03-07 2.618939
# 2014-03-10 2.621309
# 2014-03-11 2.646835
#Calculer le rendement cumulé
m_returns = ret_index.resample('BM', how='last').pct_change()
print( m_returns['2014'] ) #Spectacle 2014
# =>
# Date
# 2014-01-31 -0.107696
# 2014-02-28 0.057514
# 2014-03-31 0.018718
#Le rendement cumulé peut également être calculé par rééchantillonnage lors de l'agrégation.
m_returns = (1 + returns).resample('M', how='prod', kind='period') - 1
print( m_returns['2014'] ) #Spectacle 2014(Même résultat)
Lorsque vous imprimez () les informations d'une trame de données volumineuse, elles sont automatiquement omises et le début et la fin sont affichés.
Tracons l'historique des cours du portefeuille d'actions dans les secteurs financier et informatique, en nous concentrant sur les trois années écoulées depuis 2010, en particulier après le tremblement de terre jusqu'au 11 mars de cette année.
def get_px(stock, start, end):
return web.get_data_yahoo(stock, start, end)['Adj Close']
names = ['AAPL', 'GOOG', 'MSFT', 'DELL', 'GS', 'MS', 'BAC', 'C']
px = pd.DataFrame( {n: get_px(n, '1/1/2010', '3/11/2014') for n in names} )
px = px.asfreq('B').fillna(method='pad')
rets = px.pct_change()
result = ((1 + rets).cumprod() - 1)
plt.figure()
result.plot()
plt.show()
plt.savefig("image.png ")
À partir de là, vous pouvez calculer le rendement de votre portefeuille sur une période de temps et backtester votre stratégie avec diverses visualisations.
En traitant les données financières dans une trame de données facile à visualiser et dotée de nombreuses fonctions, nous avons constaté que l'analyse ad hoc pouvait être tentée sans recourir à un logiciel coûteux et payant.
Introduction à l'analyse de données avec le traitement des données Python avec NumPy et pandas http://www.oreilly.co.jp/books/9784873116556/