Jak uzyskać korelację dla serii ruchomych pand i serii stałej?
Nov 19 2020
Chcę obliczyć corr między dwiema seriami. Zdefiniowałem je jako:
s = pd.Series([1,2,3,4,5,6,7])
s2 = pd.Series([2,3,4])
to, czego chcę, to seria korelacji, że wartości są corr między s.rolling (3) z s2
Na przykład: pierwszym elementem wyniku powinno być [1,2,3] .corr (s2), a drugim [2,3,4] .corr (s2), .....
Czytałem przykład użycia walcowania, ale myślę, że to wewnętrzna metoda walcowania (3). Corr nie można tego rozwiązać, czy są jakieś dobre metody, aby to zrobić?
Odpowiedzi
QuangHoang Nov 19 2020 at 21:59
Czy możesz wykonać aplikację rolowaną:
from scipy.stats import pearsonr
s.rolling(3).apply(lambda x: pearsonr(x,s2)[0])
Wynik:
0 NaN
1 NaN
2 1.0
3 1.0
4 1.0
5 1.0
6 1.0
dtype: float64
WBM Nov 19 2020 at 21:50
Dlaczego nie użyć po prostu pętli for?
import pandas as pd
s = pd.Series([1,2,3,4,5,6,7])
s2 = pd.Series([2,3,4])
window_size = len(s2)
output = []
for i in range(len(s)-window_size):
output.append(s[i:window_size+i].corr(s2))