Неточные значения выбросов не совпадают с выбросами на диаграмме - PullRequest
1 голос
/ 22 февраля 2020

Это мой первый раз, когда я пытаюсь обнаружить выбросы, я использую коробочный график, чтобы обнаружить его. Каким-то образом выходные данные кода показывают нижнюю границу (минимальное значение) и верхнюю границу (максимальное значение), на мой взгляд, возвращают странные значения, потому что это почему-то делает все данные выбросами. В то же время прямоугольник показывает логически правильную визуализацию выбросов. Что я сделал не так и как это решить?

This is the box plot

import pandas as pd
import numpy as np
import seaborn as sns

cols = pd.DataFrame({'numbers':[100,300,200,400,500,6000,800,200,200]})

sns.boxplot(x = cols.numbers)

def outlierHandling(numbers):
    numbers = sorted(numbers)
    Q1 , Q3 = np.percentile(numbers, [25,75] , interpolation='nearest')
    print('Q1,Q3 : ',Q1,Q3)
    IQR = Q3 - Q1
    lowerBound = Q1 - (1.5 * IQR)
    upperBound = Q3 - (1.5 * IQR)
    print('lowerBound,upperBound : ',lowerBound,upperBound)
    return lowerBound,upperBound

lowerbound,upperbound = outlierHandling(cols.numbers)
print('Outlier values : \n',cols[(cols.numbers < lowerbound) | (cols.numbers > upperbound)])

Вывод

Q1,Q3 :  200 500
lowerBound,upperBound :  -250.0 50.0
Outlier values : 
    numbers
0      100
1      300
2      200
3      400
4      500
5     6000
6      800
7      200
8      200

1 Ответ

1 голос
/ 22 февраля 2020

Вот ошибка:

    upperBound = Q3 + (1.5 * IQR)

Должно быть + не -.

...