[PYTHON] Analysieren Sie die Aktienkurse mithilfe der Pandas-Datenaggregation und der Gruppenoperationen

Das Kategorisieren von Daten und das Anwenden von Funktionen auf jede Kategorie wird als Aggregation oder Transformation bezeichnet. Diese werden als die wichtigsten Teile des Datenanalyse-Workflows angesehen. Pandas hat eine leistungsstarke Funktion in der Gruppenberechnung und kann intuitiv bedient werden.

Ein berühmter Artikel von Hadley Wickham, Autor verschiedener Pakete für die R-Sprache Die Split-Apply-Combine-Strategie für die Datenanalyse (PDF) Beschreibt den Gruppenoperationsprozess "Trennungs-Anwendungs-Kombination". pandas übernimmt auch dieses Gruppenaggregationsoperationsmodell als Grundidee. Die Daten werden zu Beginn des Prozesses durch einen oder mehrere Schlüssel getrennt, dann wird die Funktion auf jede Gruppe angewendet, und das Ergebnis der Anwendung der Funktion wird kombiniert und in dem Objekt gespeichert, das das Ergebnis anzeigt.

Ich habe zuvor versucht, Aktien in Japan mit Ruby zu erhalten. Ich möchte Pandas anhand eines Beispiels für die Manipulation von Gruppenoperationen an tatsächlichen Aktienkursen anhand der gesammelten Daten ausprobieren.

Gruppieren Sie die Aktienkurse mehrerer Unternehmen nach Jahr und wenden Sie die Funktion an

In groupas nach groupby gruppierte Variablen sind GroupBy-Objekte. Die Methode apply trennt die Daten in Teile, die das Arbeiten erleichtern, wendet auf jedes Objekt eine Funktion an und kombiniert sie dann.

#Nehmen Sie die Aktienkurse mehrerer Unternehmen auf
#NTT-Daten
stock_9613 = pd.read_csv('stock_9613.csv',
                         parse_dates=True, index_col=0)
# DTS
stock_9682 = pd.read_csv('stock_9682.csv',
                         parse_dates=True, index_col=0)
#IT-Beteiligungen
stock_3626 = pd.read_csv('stock_3626.csv',
                         parse_dates=True, index_col=0)
# NSD
stock_9759 = pd.read_csv('stock_9759.csv',
                         parse_dates=True, index_col=0)

#Extrahieren Sie die Schlusskurse nach 2010 in einem Datenrahmen
df = pd.DataFrame([
    stock_9613.ix['2010-01-01':, 'Schlusskurs'],
    stock_9682.ix['2010-01-01':, 'Schlusskurs'],
    stock_3626.ix['2010-01-01':, 'Schlusskurs'],
    stock_9759.ix['2010-01-01':, 'Schlusskurs']
], index=['NTT-Daten', 'DTS', 'IT-Beteiligungen', 'NSD']).T

#=>Datumsdaten DTS IT e NSD
# (Unterlassung)
# 2015-01-05     4530  2553  1811  1779
# 2015-01-06     4375  2476  1748  1755
# 2015-01-07     4300  2459  1748  1754
# 2015-01-08     4350  2481  1815  1775
# 2015-01-09     4330  2478  1805  1756
# 2015-01-13     4345  2480  1813  1766
# 2015-01-14     4260  2485  1809  1770
# 2015-01-15     4340  2473  1839  1790
# 2015-01-16     4295  2458  1821  1791

Die Aktienkurse jedes Unternehmens seit 2010 wurden ermittelt. Nun, es scheint, dass die verschiedenen hier aufgeführten Unternehmen oft zusammenarbeiten, aber wie stark ist die tatsächliche Korrelation an der Börse? Von hier aus werde ich ein wenig neugierig sein und versuchen, den jährlichen Korrelationskoeffizienten für NTT-Daten zu finden.

Finden Sie den Korrelationskoeffizienten zwischen gruppierten Aktienkursen

#Finde den Übergang
rets = df.pct_change().dropna()
#Gruppe nach Jahr
by_year = rets.groupby(lambda x: x.year)
#Definieren Sie eine anonyme Funktion, die den Korrelationskoeffizienten berechnet
vol_corr = lambda x: x.corrwith(x['NTT-Daten'])
#Wenden Sie Funktionen auf gruppierte Objekte an
result1 = by_year.apply(vol_corr)
print(result1)

#=>NTT-Daten DTS IT Ho NSD
# 2010        1  0.346437     0.492006  0.443910
# 2011        1  0.485108     0.575495  0.619912
# 2012        1  0.261388     0.268531  0.212315
# 2013        1  0.277970     0.358796  0.408304
# 2014        1  0.381762     0.404376  0.385258
# 2015        1  0.631186     0.799621  0.770759

Visualisieren wir es mit matplotlib.

1.png

Sie können auch die Methode apply verwenden, um die Korrelation zwischen Spalten zu ermitteln. Lassen Sie uns zum Beispiel die Korrelation des Aktienkurses von DTS mit NTT-Daten ermitteln.

#Wenden Sie eine anonyme Funktion an, um den Korrelationskoeffizienten zwischen einer Spalte und einer anderen zu ermitteln
result2 = by_year.apply(lambda g: g['DTS'].corr(g['NTT-Daten']))
print(result2)

#=>
# 2010    0.346437
# 2011    0.485108
# 2012    0.261388
# 2013    0.277970
# 2014    0.381762
# 2015    0.631186

Definieren Sie eine etwas komplexere Funktion und wenden Sie sie auf gruppierte Aktienkurse an

Gleiches gilt für gewöhnliche Funktionen. Lassen Sie uns beispielsweise eine lineare Regression nach der Methode der kleinsten Quadrate (OLS) für jede Gruppe finden.

#Erstellen Sie Ihre eigene Funktion für die lineare Regression
def regression(data, yvar, xvars):
    Y = data[yvar]
    X = data[xvars]
    X['intercept'] = 1.
    result = sm.OLS(Y, X).fit() #Lineare Regressionsmethode in der Metric Economics Library
    return result.params #Ergebnisse werden zurückgegeben

#Wenden Sie eine lineare Regressionsfunktion auf gruppierte Aktienkurse an
result3 = by_year.apply(regression, 'DTS', ['NTT-Daten'])

#=>NTT-Datenabschnitt
# 2010  0.313685   0.000773
# 2011  0.509025  -0.000057
# 2012  0.360677   0.000705
# 2013  0.238903   0.002063
# 2014  0.395362   0.001214
# 2015  0.418843  -0.002459

Seit 2015 ist erst ein halber Monat vergangen, daher kann ich nichts dazu sagen, aber vorerst habe ich die Ergebnisse für jedes Jahr. Indem Sie die Funktion auf die auf diese Weise gruppierten Daten anwenden, können Sie die Analyse aus verschiedenen Blickwinkeln durchführen, was sehr praktisch ist.

Zusammenfassung

Die Möglichkeit, die Funktion selbst mit der Apply-Methode anzuwenden, eröffnet viele Möglichkeiten. Die hier angewendeten Funktionen können vom Analysten frei geschrieben werden, mit Ausnahme der Regel, dass ein Objekt oder ein Skalarwert als Rückgabewert zurückgegeben wird.

Der Quellcode für diesen Artikel lautet hier.

Referenz

Einführung in die Datenanalyse mit Python-Datenverarbeitung mit NumPy und Pandas http://www.oreilly.co.jp/books/9784873116556/

Recommended Posts

Analysieren Sie die Aktienkurse mithilfe der Pandas-Datenaggregation und der Gruppenoperationen
[Python] Zufällige Datenextraktion / -kombination aus DataFrame mit Random und Pandas
Datenanalyse mit Python-Pandas
Aggregieren und analysieren Sie Produktpreise mit der Rakuten Product Search API [Python]
Datenvisualisierungsmethode mit Matplotlib (+ Pandas) (5)
Analysieren Sie die Jtl-Datei von JMeter mit Pandas
Vorsichtsmaßnahmen bei der Verwendung von Codecs und Pandas
Datenvisualisierungsmethode mit Matplotlib (+ Pandas) (3)
Datenvisualisierungsmethode mit Matplotlib (+ Pandas) (4)
Analysieren Sie Daten mit RegEx 100x Flash Text
Automatische Erfassung von Aktienkursen mit Python
Überprüfen Sie die Aktienkurse mit Slackbot mit Python
Sammeln Sie Daten mit Scrapy und füllen Sie mongoDB
Lesen Sie CSV und analysieren Sie mit Pandas und Seaborn