iT邦幫忙

0

PYthon盒鬚圖找離群值

麻煩了...做到一半了但是不知道怎麼設定離群值...
如圖第一張是原檔已經作出答案了..
https://ithelp.ithome.com.tw/upload/images/20201103/20131917SlD9v8LEKa.jpg
但要如何插入語法找尋自己需要的範圍(排除離群值設定)?
https://ithelp.ithome.com.tw/upload/images/20201103/20131917g0OOQ8QY41.jpg

1 個回答

1
微甜的酸
iT邦新手 3 級 ‧ 2020-11-03 20:26:48
最佳解答

Tukey's fences:
異常值定義為低於Q1 − 1.5 IQR或高於Q3 + 1.5 IQR的觀測值。-wiki Interquartile range

公式:

是下四分位數,是上四分位數,當時為離群值。

-wiki Outlier

要是我會用filter()

|補充|一定說我都只會紙上談兵對不對?哼!這就貼code:

import numpy as np
import random
from matplotlib import pyplot as plt
%matplotlib inline
#生成隨機List
array = list(np.random.randint(10,size=100))

#找Q1,Q3
q1, q3 = np.percentile(array, [25, 75])
print(f"Q1 is: {q1}, Q3 is: {q3}\n")

#上界及下界
above = q3 + 1.5 * (q3 - q1)
below = q1 - 1.5 * (q3 - q1)
print(f"Above is: {above}, Below is: {below}\n")

#機率性加入離群值(也就是說加入的可能在範圍內)
outlier = random.randint(-10,20)
index = random.randint(0, 100)
array.insert(index, outlier)
print(f"Outlier is: {outlier}, Index is: {index}\n")

#過濾
array = list(filter(lambda x: x <= above, list(filter(lambda x: x >= below, array))))

print(f"After filter:\n{array}")

#畫圖
plt.boxplot(array)
plt.show()
看更多先前的回應...收起先前的回應...
sky800219 iT邦新手 5 級 ‧ 2020-11-03 21:45:07 檢舉

完蛋了 不懂了...
那我可以問一下...
如何把最上面的語法修改成只讓它顯示20以下的數字就好
這樣 你懂我意思嘛!?
原本是圖表是數值是0~200↑
如何修改成0~20的這樣?
謝謝大大!!

幹嘛改你的全距?
R(全距)=Xmax(最大值)-Xmin(最小值)
200多是你Dataset的最大值
你數學課都沒在上喔~抓到!

sky800219 iT邦新手 5 級 ‧ 2020-11-03 23:08:20 檢舉

因為這樣才可以把圖重點鎖定在下面(像第三張圖這樣阿)
完蛋了 我好像整個理解錯誤了是嘛!?

好吧。
我剛看完API
上面全部的程式碼和你要的東西都可以縮成這一行:

plt.boxplot(array,showfliers = False, autorange = True)

記得array調成你要輸入的資料。

sky800219 iT邦新手 5 級 ‧ 2020-11-04 17:35:14 檢舉

https://ithelp.ithome.com.tw/upload/images/20201104/20131917xfSMeyvhCF.jpg

好像是完成的 但是還是和圖案有些許不同!!
看起來真的很難...
上面range是0~20

20應該是跟那根黑黑的粗線有關,我記得我之前做的時候也有,但它是什麼我忘了,
如果那麼堅持,不然再用成員函數ylim()改,只是就不美了。

plt.boxplot(array,showfliers = False, autorange = True)

改成:

plt.ylim(ymin = -1,ymax = 20)
plt.boxplot(array,showfliers = False)
sky800219 iT邦新手 5 級 ‧ 2020-11-04 22:55:25 檢舉

好喔 謝謝^^

我要發表回答

立即登入回答