Возвращает отклоняющееся значение от средних значений на графике - PullRequest
0 голосов
/ 31 октября 2019

У меня есть следующий файл data.txt

Этот файл содержит количество ограничивающих прямоугольников и их соответствующие высоты. Я написал функцию для извлечения высоты всех блоков из json input data.txt соответственно:

высоты [43, 17, 23, 24, 17, 27, 19, 19, 24,22, 8, 8, 26, 25, 18, 19, 20, 20, 20, 21, 20, 20, 22, 18, 18, 19, 19, 16, 13, 20, 20, 19, 19, 20,13, 20, 18, 18, 13, 12, 19, 25, 17, 13, 38, 38, 20, 19, 16]

Я написал следующий скрипт, чтобы построить высоту каждогоbox

box_number=[]
box_height=[]

for index2, num2 in enumerate(heights):
    print('box number',index2, 'box height',num2)
    box_number.append(index2)
    box_height.append(num2)


#ax = sns.lineplot(box_number, box_height); 
ax = sns.stripplot(box_number, box_height); 
ax.set(xlabel ='box number', ylabel ='height of box') 

# giving title to the plot 
plt.title('My first graph'); 

# function to show plot 
plt.show() 

вот вывод:

enter image description here

Я хочу написать функцию для печати ящиков очень высокой высотыи которые отклоняются от среднего значения высоты. В краткой печати коробки № 0,44 и 45. Как я могу это сделать?

(Каждый раз, когда я получу другой набор ящиков, но мне нужно будет найти среднее значение их высоты и слишком большие ящики для печати)

1 Ответ

1 голос
/ 31 октября 2019

Существует несколько стратегий обнаружения выбросов. Определение выброса - это то, что имеет значение в конце дня. Если вам нужно простое вычисление, как вы описали, вы можете сделать что-то вроде этого:

import numpy as np

# heights
hs = [43, 17, 23, 24, 17, 27, 19, 19, 24, 22, 8, 8, 26, 25, 18, 19, 20, 20, 20, 21, 20,
      20, 22, 18, 18, 19, 19, 16, 13, 20, 20, 19, 19, 20, 13, 20, 18, 18, 13, 12, 19, 
      25, 17, 13, 38, 38, 20, 19, 16]

# let's say that an outlier is a height that is farther than 2*std from the mean
outliers_definition = np.abs(hs - np.mean(hs)) > 2 * np.std(hs)

# you can get their indexes this way
outliers_idx = np.argwhere(outliers_definition)

print(outliers_idx)
# array([[ 0],
#        [44],
#        [45]], dtype=int64)

Обратите внимание, что mean здесь также учитывает выбросы. Вы можете использовать median, например. Если вы хотите что-то более надежное, существует обширная литература по обнаружению выбросов. Я рекомендую вам взглянуть на это.

...