pandas ist ein Datenwerkzeug, das ab 2008 im Finanzbereich entwickelt wurde. Der Autor Wes McKinney war beim bekannten Quants Hedge Fund AQR Capital Management des Finanzsektors registriert. .. Aus diesem Grund verfügt es über eine Reihe leistungsstarker Funktionen, auch wenn es als praktisches Analysewerkzeug für Finanz- und Wirtschaftsdaten angesehen wird.
Wir werden den von Yahoo! Finance erhaltenen Datensatz mithilfe von Pandas analysieren. Dieses Mal werden wir einige Aktienbestandsdaten und tägliche Schlusskursdaten für den S & P 500 Index verwenden (Aktienkennung ist SPX).
pandas verfügt über Funktionen für die Ein- und Ausgabe wie CSV und JSON.
Funktion | Erläuterung |
---|---|
read_csv | ','Begrenzte Daten lesen |
read_table | Tab('\t')Begrenzte Daten lesen |
read_json | Lesen Sie Daten im JSON-Format |
read_msgpack | Lesen Sie Daten im msgpack-Format |
read_pickle | Binärdaten lesen |
Die mit diesen gekoppelte Funktion to_XXX wird im Datenrahmen bereitgestellt, und Daten können in jedem Format ausgegeben werden. Es ist sehr einfach, nicht den CSV- oder JSON-Parser aufrufen zu müssen, um den Code zu schreiben.
import pandas as pd
stock = pd.read_csv('stock_px.csv', parse_dates=True, index_col=0)
Darüber hinaus wird automatisch ein Index für die aus CSV gelesenen Daten erstellt. Sie können auch ein neues Objekt mit einem neuen Index neu erstellen, der besser geeignet ist.
Ein weiteres Merkmal von Pandas ist, dass es fehlende Werte gut handhabt. Es ist nicht immer möglich, saubere Daten ohne Fehler in der Datenanalyse zu verarbeiten. Daher schließen alle Pandas-Objektstatistiken fehlende Werte aus. Sie können auch einen Schwellenwert festlegen, wie viele fehlende Werte zulässig sind, und die Lücken mit den angegebenen Werten füllen.
Das Auffinden und Aggregieren von Zusammenfassungsstatistiken und das Gruppieren nach Indexebene ist sehr einfach.
stock.head(10) #Nur die ersten 10 anzeigen
# =>
# 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() #gesamt
# => 277892.75
stock['AAPL'].mean() #Arithmetischer Durchschnitt
# => 125.51614724480578
stock['AAPL'].median() #Median
# => 91.45500000000001
Lassen Sie uns herausfinden, inwieweit eine Korrelation zwischen den täglichen Gewinnen und dem SPX im Jahr besteht.
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) #Korrelation zwischen Tagesgewinn und 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() #Zeichnen auf der Leinwand
result_1.plot() #Grundstück mit Matplotlib
plt.show()
plt.savefig("image.png ")
Finden Sie die Korrelation zwischen Spalten.
result_2 = stock_by_year.apply(lambda g: g['AAPL'].corr(g['MSFT'])) #Korrelation zwischen Apple und 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 ")
Finden Sie die lineare Regression der Daten nach der Methode der kleinsten Quadrate.
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 ")
Einführung in die Datenanalyse mit Python-Datenverarbeitung mit NumPy und Pandas http://www.oreilly.co.jp/books/9784873116556/
Recommended Posts