2016-07-14 6 views
0

私はデータを平滑化するために移動平均を使う必要があるので、私は畳み込みを使って関数を書いています。しかし、その結果は、生データと比較して左シフトです。だから私はパンダの内蔵rolling_mean()を使用して、それはうまく動作します。問題はパンダを使用したくないということです。私はこの関数を書き直そうとしていますが、ソースコードはそれがどのように動作するか(またはおそらく私だけ)を説明していません。pandas rolling_mean()はどのように機能しますか?

def f(arg, window, min_periods=None, freq=None, center=False, how=how, 
     **kwargs): 
    def call_cython(arg, window, minp, args=(), kwargs={}, **kwds): 
     minp = check_minp(minp, window) 
     return func(arg, window, minp, **kwds) 
    return _rolling_moment(arg, window, call_cython, min_periods, freq=freq, 
          center=center, how=how, **kwargs) 

キーは、引数「センター」ですが、私はどのようにその作品を知らない:

は私の本来の機能は、パンダrolling_mean()

def moving_average(data, window): 
    return np.convolve(data, np.ones(window)/window, mode='valid') 

ソースコードがあるでした。 Picture what I mean 青は生データ、緑は私の試み、赤(正しい)版はパンダのものです。

答えて

1

データを平滑化する正しい方法は1つありません。平均を使用していても、まだ多くのバリエーションがあります。シフティングは単純なローリング手段からの非常に一般的な結果です。

pandas.rolling_meanから投稿したコードのビットは操作を示していません。たとえば、how=howのように指定すると、スニペットに含まれていないパラメータを渡して、どのメソッドを使用するかを判断できます。また、cythonも参照していますので、コマンドの勇気はPythonではなくC言語で書かれていると思います。 には多くの文書がありません。は推奨されていません。代わりに、パンダの最新バージョンからrollingを見て、どのような滑らかなタイプのことができるかを教えてください。これらのパラメータをrolling関数に渡して、どちらが望ましいかを見てみてください。あなたは、あなたが選んだソースからその背後の数学を見直して、他の場所で再現することができます。

オリジナルのポスターのレベルはわかりませんが、信号処理やデータの平滑化に精通していない読者にとって、ノイズとトレンドを区別することは膨大な研究分野です。結果が非常にメソッドに敏感なので、それを行うときには非常に注意してください。他のいくつかについては、パンダが提供するすべてのローリング機能に加えて、Holt-Winters、Baxter-KingまたはHodrick-Prescottをご覧ください。彼らはすべて異なった結果、強さと弱さで、問題に異なったアプローチをします。

関連する問題