나는 비슷한 대답을 here에 따라 왔지만, sklearn과 롤링을 사용할 때 몇 가지 질문이 있습니다. 나는 Z-점수를 생성하고 적용 롤링과 PCA을 위해 노력하고 있어요,하지만 난 rolling
명령을 사용하는 경우 나는 내가 dataframe팬더 롤링 사용자 정의
from sklearn.preprocessing import StandardScaler
import pandas as pd
import numpy as np
sc=StandardScaler()
tmp=pd.DataFrame(np.random.randn(2000,2)/10000,index=pd.date_range('2001-01-01',periods=2000),columns=['A','B'])
를 만들 앞의 예에 따라 'only length-1 arrays can be converted to Python scalars' error.
을 받고 계속 :
을tmp.rolling(window=5,center=False).apply(lambda x: sc.fit_transform(x))
TypeError: only length-1 arrays can be converted to Python scalars
이 오류가 발생합니다. 그러나 문제없이 평균과 표준 편차를 가진 함수를 만들 수 있습니다.
def test(df):
return np.mean(df)
tmp.rolling(window=5,center=False).apply(lambda x: test(x))
저는 현재 값을 z- 점수로 뺄 때 오류가 발생한다고 생각합니다.
def test2(df):
return df-np.mean(df)
tmp.rolling(window=5,center=False).apply(lambda x: test2(x))
only length-1 arrays can be converted to Python scalars
어떻게 먼저 표준화 sklearn와 사용자 정의 롤링 기능을 만든 다음 PCA를 실행?
편집 : 나는 내 질문이 정확히 명확하지 않아서 다시 시도해야한다고 생각합니다. 내 가치관을 표준화하고 PCA를 실행하여 각 요소에 의해 설명 된 분산의 양을 얻고 싶습니다. 롤링하지 않고 이것을하는 것은 상당히 간단합니다.
testing=sc.fit_transform(tmp)
pca=decomposition.pca.PCA() #run pca
pca.fit(testing)
pca.explained_variance_ratio_
array([ 0.50967441, 0.49032559])
압연 할 때 동일한 절차를 사용할 수 없습니다. @piRSquared에서 롤링 zscore 함수를 사용하면 zscores를 얻을 수 있습니다. sklearn의 PCA가 롤링 적용 사용자 정의 기능과 호환되지 않는 것으로 보입니다. (사실 이것은 대부분의 sklearn 모듈의 경우라고 생각합니다.) 저는 일차원적인 항목 인 설명 된 분산을 얻으려고 노력하고 있지만 아래의 코드는 많은 NaN을 반환합니다.
def test3(df):
pca.fit(df)
return pca.explained_variance_ratio_
tmp.rolling(window=5,center=False).apply(lambda x: test3(x))
그러나 설명 된 분산 함수를 만들 수는 있지만 이것도 작동하지 않습니다.
def test4(df):
cov_mat=np.cov(df.T) #need covariance of features, not observations
eigen_vals,eigen_vecs=np.linalg.eig(cov_mat)
tot=sum(eigen_vals)
var_exp=[(i/tot) for i in sorted(eigen_vals,reverse=True)]
return var_exp
tmp.rolling(window=5,center=False).apply(lambda x: test4(x))
이 오류는 0-dimensional array given. Array must be at least two-dimensional
이됩니다.
요약하면 롤링 z- 점수를 실행 한 다음 각 롤에서 설명 된 분산을 출력하는 pca를 롤백하고 싶습니다. 롤링 Z 점수가 내려졌지만 분산은 설명하지 않았습니다.
당신은 출력이되고 무엇을 기대 하는가? 팬더 롤링 함수는 입력 청크에서 단일 스칼라 값을 생성합니다. 청크에 대해보다 복잡한 작업을 수행하려면 "자신의 롤을 굴릴"수밖에 없습니다. – BrenBarn