1
lat
50.63757782
50.6375742
50.6375742
50.6374077762
50.63757782
50.6374077762
50.63757782
50.63757782

これらの緯度の値でグラフをプロットしたところ、グラフに突然のスパイク (外れ値) があることに気付きました。意味のある結果を表示できるように、すべての緯度の値を最後の 3 つの値の中央値に置き換えたい

出力は次のようになります。

lat               lat_med
50.63757782 50.63757782
50.6375742  50.6375742
50.6375742  50.6375742
50.63740778 50.6375742
50.63757782 50.6375742
50.63740778 50.6375742
50.63757782 50.6375742
50.63757782 50.6375742

私はそのような緯度の値を何千も持っており、for ループを使用してこれを解決する必要があります。次のコードにはエラーがあることを知っています。私は Python の初心者なので、これを解決するためにあなたの助けに感謝します。

for i in range(0,len(df['lat'])):
    df['lat_med'][i]=numpy.median(numpy.array(df['lat'][i],df['lat'][i-2]))

3 点の中央値の計算が目的を果たせず、5 つの値を考慮する必要があることに気付きました。中央値関数を必要な数だけ変更する方法はありますか。ご協力ありがとうございました

def median(a, b, c):
    if a > b and a > c:
        return b if b > c else c

    if a < b and a < c:
        return b if b < c else c

    return a
4

2 に答える 2

0

pandas'Dataframe構造体を使用しているようです。

import pandas as pd
import numpy as np

df = pd.DataFrame({'lat' : [50.63757782,
                            50.6375742,
                            50.6375742,
                            50.6374077762,
                            50.63757782,
                            50.6374077762,
                            50.63757782,
                            50.63757782]})

def replace_values_with_medians(array):
    last = array.shape[0]-2
    index = 0
    result = np.zeros(last)
    while index < last:
        result[index] = np.median(array[index:index+3])
        index += 1
    return result

lat_med_df = pd.DataFrame({'lat_med':replace_values_with_medians(df['lat'])})
df = pd.concat([df,lat_med_df], axis = 1)
del lat_med_df

結果:

>>> df
         lat    lat_med
0  50.637578  50.637574
1  50.637574  50.637574
2  50.637574  50.637574
3  50.637408  50.637408
4  50.637578  50.637578
5  50.637408  50.637578
6  50.637578        NaN
7  50.637578        NaN
于 2016-10-07T14:22:29.427 に答える
0

最後の要素の 2 番目から 2 番目までを考えて、この要素、前の要素、次の要素の中央値を保存します。最初と最後の要素はそのまま残されることに注意してください。

これを試して:

lat = [50.63757782, 50.6375742, 50.6375742, 50.6374077762, 50.63757782, 50.6374077762, 50.63757782, 50.63757782]

# returns median value out of the three values
def median(a, b, c):
    if a > b and a > c:
        return b if b > c else c

    if a < b and a < c:
        return b if b < c else c

    return a


# add the first element
filtered = [lat[0]]

for i in range(1, len(lat) - 1):
    filtered += [median(lat[i - 1], lat[i], lat[i + 1])]

# add the last element
filtered += [lat[-1]]

print(filtered)

あなたがしているのは非常に基本的なメディアンフィルターです

于 2016-10-07T13:51:25.503 に答える