Нахождение выбросов в python с помощью метода IQR, исключая медиану - PullRequest
0 голосов
/ 25 марта 2020

Я рассчитываю рассчитать 1-й и 3-й квартиль небольшого набора данных, чтобы определить выбросы:

6000 13500 15000 15000 17948

Хотя расчет довольно прост в теории, Я обнаружил, что python использует другой подход, чем тот, который я хочу (и функция Excel Quartile.EX C использует). Разница в том, что python включает медиану в расчете квартиля. Таким образом, для 1-го квартиля python выводит 13500, для 3-го 15000. Что мне нужно, это 9750 и 16474. Я не нашел варианта, который позволил бы мне это сделать.

Я использовал несколько кодов, чтобы попытаться найти это решение, мой текущий код для 1-го квартиля q1 = df.NSOT.quantile(0.25, interpolation = 'midpoint').

df - фрейм данных, а NSOT - столбец с заданными значениями. .

Вкл. https://www.mathwords.com/o/outlier.htm - пример того, как рассчитать выбросы так, как я хочу, с требуемыми 1-м и 3-м квартилями.

Есть предложения?

Извините, если что-либо по этому вопросу не соответствует правилам. Я только что создал эту учетную запись, и мне нужно было быстро получить ответ: /

1 Ответ

0 голосов
/ 26 марта 2020

Я думаю, что это делает трюк. Когда существует четный набор чисел, он должен включать одно из средних значений для расчета квартилей. Хотя я хотел бы просто включить опцию, которая делает это для меня.

        df.sort_values("NSOT", axis = 0, ascending = True, inplace = True, na_position ='last')
        df = df.reset_index(drop=True)
        medianindex = int(len(df.NSOT) / 2)
        if (len(df.NSOT) % 2 == 0):
           # even   
            q1_NSOT = np.percentile(df.NSOT[:medianindex-1], 50)
            q3_NSOT = np.percentile(df.NSOT[medianindex:], 50)

        else:
            # odd
            q1_NSOT = np.percentile(df.NSOT[:medianindex], 50)
            q3_NSOT = np.percentile(df.NSOT[medianindex+1:], 50)
...