iT邦幫忙

0

PYthon的散點圖

  • 分享至 

  • xImage

https://ithelp.ithome.com.tw/upload/images/20201104/20131917Cckc1GfW5c.jpg
如圖要如何找把離群值去掉
只取正常值就好...
謝謝大大!!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
Maso的萬事屋
iT邦新手 4 級 ‧ 2020-11-05 11:45:31
最佳解答

建議先將df中的離群值除去,
但是要先闡述離群值判斷的標準,
每個人去除離群值的方法都不一樣,
我這邊提供一個之前去除離群值的一個參考方式:

採用Hampel identifier篩除outliers,考量平均值與標準差可能受outlier之膨脹影響,將樣本平均值以中位數與中位數偏差 (MAD,the median of the absolute deviations from the median) 替代,因中位數與MAD不受outlier影響可為篩選標準,其篩選方式為:

|x_i-M|/((MAD/0.6745))>2.24

其中Xi為樣本實測值,M為樣本中位數,MAD為|Xi-M|(i=1……n)中位數,一般情況下,MAD/0.6745可預估樣本標準差,而篩選常數2.24參自Wilson’s (Erceg-Hurn et al.,2013;Wilcox,2012;Wilcox,2003)。

可以看出上述篩選離群值的方法要有幾個變數,M=>中位數以及MAD,以及篩選常數(本篇是使用2.24)。

df = pd.read_csv('./檔案名稱')
Ms = df.median()

X = df[['欄位名稱']].values

#先用每一筆X樣本計算出MAD
MAD_X = []
for x in X:
    MAD_X.append(abs(x-Ms['欄位名稱']))
MAD_X = np.median(MAD_X)
print(MAD_X)

#再一次運算,將超出範圍之離群值刪去
indexs = []

i=0
for x in X:
    if (abs(x-Ms['欄位名稱'])/(MAD_X/0.6745))>2.24:
        indexNames.append(i)
    i+=1

df.drop(indexs , inplace=True)
X = df[['欄位名稱']].values  #=>已經將離群值刪除的X ndarray

結果範例:
原本的X最後五筆=
[[181]
[184]
[182]
[177]
[990]]<=故意加進去的outlier

後來的X最後五筆=
[[187]
[181]
[184]
[182]
[177]]<=outlier已被刪除

提供你做參考

sky800219 iT邦新手 5 級 ‧ 2020-11-05 17:28:41 檢舉

好喔 謝謝^^

我要發表回答

立即登入回答