2

私は時系列のHurst指数をPythonで計算しようとしています。これは、量的財務の時系列の平均復帰特性を決定する値です。私は、任意の長さの時系列を取り、それをデータのまとまりに分割することを選択しました。このプロセスは、ハースト指数(いくつかの方法の1つ)の計算の一部です。私はこれを関数として書いています。私は「Y」と私は「N」としたいチャンクの数などの時系列(セキュリティの価格を)持っている想像:3DギザギザのNumPy配列の2D平均の計算

問題は今のアレイは、チャンクの1に分割されていること
def hurst(y,n): 

    y = array_split(y,n) 

チャンクは他のチャンクと同じサイズではありません。私は平均、標準偏差、平均中心シリーズ、平均中心シリーズの累積合計、および各チャンクの累積合計の範囲を見つけたいと思います。しかし、アレイのサイズが均一ではないので、私はこれを達成する方法を見出していません。基本的に私が試行したときに

mean(y,axis=0) 

または軸の1または2、私はエラーが発生します。 N = 20を使用している場合、私は多分、「ベクトル化」は私を助けることができると思った、配列の形状は

(20,) 

として与えられていますか?しかし、私はそれをどのように使用するかを考えていません。私はデータをループすることを避けようとしています。

サンプルデータ、それが分割された後:あなたは、単にlist comprehensionを使用することができます平均値のリストを作るために

[array([[ 1.04676], 
    [ 1.0366 ], 
    [ 1.0418 ], 
    [ 1.0536 ], 
    [ 1.0639 ], 
    [ 1.06556], 
    [ 1.0668 ]]), array([[ 1.056 ], 
    [ 1.053 ], 
    [ 1.0521 ], 
    [ 1.0517 ], 
    [ 1.0551 ], 
    [ 1.0485 ], 
    [ 1.05705]]), array([[ 1.0531], 
    [ 1.0545], 
    [ 1.0682], 
    [ 1.08 ], 
    [ 1.0728], 
    [ 1.061 ], 
    [ 1.0554]]), array([[ 1.0642], 
    [ 1.0607], 
    [ 1.0546], 
    [ 1.0521], 
    [ 1.0548], 
    [ 1.0647], 
    [ 1.0604]]) 

データ型list

+0

は 'y'のですか?単純なデータの例を提供してください。 –

+0

'y'はパンダのデータフレームとして開始します。それから私は 'as_matrix'を使って配列形式にしています。それから私はそれに 'array_split'を使用しています。最終的な形式は 'list'だと思います。私は非常にPythonの初心者です – denbjornen505

+0

変数 'a'の型を知りたければ' print(type(a)) 'を使うことができます –

答えて

1

[mean(x[axis]) for axis in range(len(x))] 

それは軸の上に行くと、各部分の平均を計算する。この全体につまずく誰のために

+0

私はこれを試しましたが、インデックス付きチャンク?この場合、インデックスが0のチャンクに対して1つの値しか返されませんか?リスト形式ですべてのチャンクの平均が必要です。 – denbjornen505

+0

@ user22393私はあなたのためにそれを変更します。しかし、あなたは実際にどのタイプを使用しているのかを知る必要があります。 –

+0

時系列の全長に応じて等しくないチャンクにデータを分割することが不可欠です。 'list'型をもたらす' array_split'よりもむしろ不均等な塊にデータを分割する良い方法はありますか? – denbjornen505

0

、私は問題を解決し、代わりにパンダのデータフレームを使用して解決した...何種類

def hurst(y,n): 

y = prices.as_matrix() 
y = array_split(y,n) 
y = pd.DataFrame.from_records(y).transpose() 
y = y.dropna() 

# Mean Centered Series 

m = y.mean(axis='columns') 

Y = y.sub(m,axis = 'rows') 


# Standard Deviation of Series 

S = y.std(axis='columns') 

# Cumulative Sum Series 

Z = Y.cumsum() 

# Range Series 

R = Z.max(axis='columns')-Z.min(axis='columns') 

# Rescale Range 

RS = R/S 
RS = RS.sort_values() 

# Time Period 

s = shape(y) 

t = linspace(1,s[0],s[0]) 

# Log Scales 

logt = log10(t) 
logRS = log10(RS) 

print len(t),len(logRS) 

# Regression Fit 

slope, intercept, r_value, p_value, std_err = stats.mstats.linregress(logt, logRS) 

# Hurst Exponent 

H = slope/2 

return H, logt, logRS