pandas est un outil de données qui a commencé à être développé dans le domaine financier vers 2008. L'auteur Wes McKinney était membre du bien connu du secteur financier Quants Hedge Fund AQR Capital Management. .. Pour cette raison, il a un certain nombre de fonctions puissantes même lorsqu'il est considéré comme un outil d'analyse pratique pour les données financières et économiques.
Nous analyserons l'ensemble de données obtenu de Yahoo! Finance à l'aide de pandas. Cette fois, nous utiliserons certaines données boursières et des données de cours de clôture quotidiennes pour l'indice S & P 500 (l'identifiant de l'action est SPX).
pandas a des fonctions d'entrée et de sortie telles que CSV et JSON.
une fonction | La description |
---|---|
read_csv | ','Lire des données délimitées |
read_table | languette('\t')Lire des données délimitées |
read_json | Lire les données au format JSON |
read_msgpack | Lire les données au format msgpack |
read_pickle | Lire des données binaires |
La fonction to_XXX qui leur est associée est fournie dans le bloc de données et les données peuvent être sorties dans n'importe quel format. Il est très facile de ne pas avoir à appeler l'analyseur CSV ou JSON pour écrire le code.
import pandas as pd
stock = pd.read_csv('stock_px.csv', parse_dates=True, index_col=0)
De plus, un index est automatiquement créé pour les données lues à partir de CSV. Vous pouvez également recréer un nouvel objet avec un nouvel index plus adapté.
Une autre caractéristique des pandas est qu'il gère bien les valeurs manquantes. Il n'est pas toujours possible de traiter des données propres sans défauts dans l'analyse des données. Ainsi, toutes les statistiques d'objets pandas excluent les valeurs manquantes. Vous pouvez également définir un seuil pour le nombre de valeurs manquantes autorisées et remplir les espaces avec les valeurs spécifiées.
La recherche et l'agrégation de statistiques récapitulatives et le regroupement par niveau d'index sont très faciles.
stock.head(10) #Afficher uniquement les 10 premiers
# =>
# AAPL MSFT XOM SPX
# 2003-01-02 7.40 21.11 29.22 909.03
# 2003-01-03 7.45 21.14 29.24 908.59
# 2003-01-06 7.45 21.52 29.96 929.01
# 2003-01-07 7.43 21.93 28.95 922.93
# 2003-01-08 7.28 21.31 28.83 909.93
# 2003-01-09 7.34 21.93 29.44 927.57
# 2003-01-10 7.36 21.97 29.03 927.57
# 2003-01-13 7.32 22.16 28.91 926.26
# 2003-01-14 7.30 22.39 29.17 931.66
# 2003-01-15 7.22 22.11 28.77 918.22
stock['AAPL'].sum() #total
# => 277892.75
stock['AAPL'].mean() #Moyenne arithmétique
# => 125.51614724480578
stock['AAPL'].median() #Médian
# => 91.45500000000001
Découvrons à quel point il existe une corrélation entre les bénéfices quotidiens et le SPX dans l'année.
rets = stock.pct_change().dropna()
spx_corr = lambda x: x.corrwith(x['SPX'])
stock_by_year = rets.groupby(lambda x: x.year)
result_1 = stock_by_year.apply(spx_corr) #Corrélation entre les bénéfices quotidiens et SPX
print( result_1 )
# => AAPL MSFT XOM SPX
# 2003 0.541124 0.745174 0.661265 1
# 2004 0.374283 0.588531 0.557742 1
# 2005 0.467540 0.562374 0.631010 1
# 2006 0.428267 0.406126 0.518514 1
# 2007 0.508118 0.658770 0.786264 1
# 2008 0.681434 0.804626 0.828303 1
# 2009 0.707103 0.654902 0.797921 1
# 2010 0.710105 0.730118 0.839057 1
# 2011 0.691931 0.800996 0.859975 1
plt.figure() #Dessin sur la toile
result_1.plot() #Tracer avec matplotlib
plt.show()
plt.savefig("image.png ")
Trouvez la corrélation entre les colonnes.
result_2 = stock_by_year.apply(lambda g: g['AAPL'].corr(g['MSFT'])) #Corrélation entre Apple et Microsoft
print( result_2 )
# =>
# 2003 0.480868
# 2004 0.259024
# 2005 0.300093
# 2006 0.161735
# 2007 0.417738
# 2008 0.611901
# 2009 0.432738
# 2010 0.571946
# 2011 0.581987
plt.figure()
result_2.plot()
plt.show()
plt.savefig("image2.png ")
Trouvez la régression linéaire des données par la méthode des moindres carrés.
def regression(data, yvar, xvars):
Y = data[yvar]
X = data[xvars]
X['intercept'] = 1.
result = sm.OLS(Y, X).fit()
return result.params
result_3 = stock_by_year.apply(regression, 'AAPL', ['SPX'])
print(result_3)
# => SPX intercept
# 2003 1.195406 0.000710
# 2004 1.363463 0.004201
# 2005 1.766415 0.003246
# 2006 1.645496 0.000080
# 2007 1.198761 0.003438
# 2008 0.968016 -0.001110
# 2009 0.879103 0.002954
# 2010 1.052608 0.001261
# 2011 0.806605 0.001514
plt.figure()
result_3.plot()
plt.show()
plt.savefig("image3.png ")
Introduction à l'analyse de données avec le traitement des données Python avec NumPy et pandas http://www.oreilly.co.jp/books/9784873116556/