Ich versuche zu verstehen, wie pandas.rolling_cor tatsächlich Rolling Korrelationen berechnet. Bis jetzt habe ich es immer mit einer Nummer gemacht. Ich bevorzuge Pandas wegen der Geschwindigkeit und der Benutzerfreundlichkeit, aber ich kann nicht die rollende Korrelation wie früher bekommen.Verständnis Rollkorrelation in Pandas
I beginnen mit zwei numy Arrays:
c = np.array([1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1])
d = np.array([8,9,8])
ich jetzt der Kreuzkorrelation für die Länge-3-Fenster meiner Array c berechnet werden soll. I definieren eine Rollfensterfunktion:
def rolling_window(a, window):
shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
strides = a.strides + (a.strides[-1],)
return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
und die Korrelation zwischen jedem meiner erzeugten Fenster und dem zweiten Originaldatensatzes berechnen. Dieser Ansatz funktioniert gut:
for win in rolling_window(c, len(d)):
print(np.correlate(win, d))
Ausgänge:
[50]
[75]
[100]
[125]
[150]
[175]
[200]
[209]
[200]
[175]
[150]
[125]
[100]
[75]
[50]
Wenn ich es mit Pandas zu lösen versuchen:
a = pd.DataFrame([1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1])
b = pd.DataFrame([8,9,8])
egal ob ich Dataframe rolling_corr:
a.rolling(window=3, center=True).corr(b)
oder Pandas r olling_corr:
pd.rolling_corr(a, b, window=1, center=True)
bekomme ich nur ein paar NaNs:
0
0 NaN
1 0.0
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
10 NaN
11 NaN
12 NaN
13 NaN
14 NaN
15 NaN
16 NaN
Kann mir jemand eine Hand geben? Ich bin in der Lage, das Problem mit numpy zu lösen, indem die numpy Array aus Umwandeln der Pandas Dataframe
a.values.ravel()
jedoch erhalten Abflachung, würde Ich mag die Berechnung vollständig mit Pandas lösen. Ich habe die Dokumentation durchsucht, habe aber nicht die Antwort gefunden, nach der ich suche. Was vermisse ich oder nicht?
Vielen Dank im Voraus.
D.
Vielen Dank, mein Herr – mosegui