2017-05-29 21 views
0

データを平滑化するためにローリング平均を使用しています。私のdatahereです。不規則な境界線を持つローリング平均

私の元のデータの図は、 Original Data

現在、私は

import pandas as pd 
import numpy as np 

data = pd.read_excel('data.xlsx') 
data = np.array(data, dtype=np.float) 
window_length = 9 
res = pd.rolling_mean(np.array(data[:, 2]), window_length, min_periods=1, center=True) 

を使用していますこれは私が9のwindow_lengthとローリング平均を適用した後に得るものです。

Rolling Mean

と私は20にwindow_lengthを上げるとき、私はスムーズな画像を得ることが、境界で、データが誤っていると思われます。

enter image description here

問題は、上記の図に見られるように、ある、ローリング平均値は、元のデータには存在しません、私のデータの境界でのエラーのいくつかの並べ替えを紹介します。

これを修正する方法はありますか?

window_lengthの一部が私のデータの外に見つかったので、私の推測は境界線であり、平均を誇張しています。

パンダローリングミーンを使用してこのエラーを修正する方法はありますか、これを行うにはより良い方法がありますか?ありがとう。

ps。私が使用しているローリングのパンダ機能が新しいversiónで廃止されていることを認識しています。

+0

データとグラフを見ると、2次元問題に1次元の解を適用しようとしているようです。この2次元スタイルをもっとスムーズにするのは難しいことではありませんが、コード化と実行の両方が遅いですし、何かを行うためのマッピング・タイプのライブラリがあると確信していますあなたは(私は彼らが何であるか分かりませんが) – JohnE

+0

@ JohnEしかし、エラーを提示しているBoudariesを除いて、機能はうまく動作します。 – user7436576

+0

本当ですか?私は、多分それはあるかもしれないが、私は見ることではわかりません。私がすでに述べた1d/2dの問題に基づいて私には意味をなさないだけです。これは、SOの質問には理想的なデータよりもはるかに多くのデータです。正直なところ、私はこの質問を削除し、はるかに小さなサンプル版のデータで再投稿することをお勧めします。 – JohnE

答えて

0

重み付きのscipy.ndimage.filters.convolveなどのネイティブ2D畳み込み方法を試すことができるので、カーネルを平均(平均)関数にするだけです。

重みは次のようになります。

n = 3. # size of kernel over which to calculate mean 
weights = np.ones(n,n)/n**2 

あなたのデータの白領域はナンとカーネル・スタンプがNaNを返します含まので、これはnによる結果のフットプリントを減らすこと、NaNで表されている場合。これが実際に問題であれば、より良いナノ処理を持っているastropy.convolutionを見てみてください。

関連する問題