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.
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.
#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.
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
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.
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.
Einführung in die Datenanalyse mit Python-Datenverarbeitung mit NumPy und Pandas http://www.oreilly.co.jp/books/9784873116556/
Recommended Posts