Почему seaborn строит мои ящичные диаграммы так?

Вопрос или проблема

Я занимаюсь проектом по обнаружению выбросов, и одним из методов для понимания моего набора данных я использую ящики с усами, чтобы визуализировать, как данные расположены относительно всех данных для этой конкретной характеристики. Однако, когда я использую модуль seaborn для построения графика, он мне дает ящик с усами, который не укладывается в мою голову. Все точки данных находятся за пределами усов, ни одной из них внутри?

Boxplot

Код очень простой:

def boxplot():
    df = pd.read_csv('csv-data/test.csv')
    sns.boxplot(x='11', data=df)

    plt.show()

Я подумал, что, возможно, проблема в усах, поэтому я попытался увеличить их длину только для теста, и вот результат:
enter image description here

Как видно, точки просто следуют вдоль усов. Я не уверен, почему это происходит, и я точно знаю, что должны быть точки внутри усов, потому что у меня есть точка “0.0768012746931151” для характеристики 11.

Поскольку точки данных, которые отображаются как точки, рассматриваются как выбросы (обычно определяемые как точки, которые попадают за пределы 1.5 IQR). Все остальные точки данных не отображаются, так как они находятся внутри ящика с усами. Если вы измените длину усов относительно IQR, вы просто измените, когда точки данных рассматриваются как выбросы, и, следовательно, будут ли они отображаться или нет. Для получения дополнительной информации о различных компонентах ящика с усами также смотрите страницу википедии о ящиках с усами.

Как вы и заметили, в ящике с усами единственные точки, отображаемые как отдельные точки, — это выбросы (т.е. точки вне усов). Ящики и усы представляют собой основную часть распределения, поэтому нет необходимости отображать их как отдельные точки. Это указано в документации seaborn, где говорится: “Ящик показывает квартели набора данных, в то время как усы простираются, чтобы показать остальную часть распределения, за исключением точек, которые определяются как “выбросы” с использованием метода, который является функцией межквартильного размаха.”

Ответ или решение

Почему ваш график boxplot в Seaborn отображается так?

Ваша ситуация с построением графиков boxplot в библиотеке Seaborn вызывает интерес, и давайте подробно разберем причины, по которым вы видите свои данные именно таким образом.

1. Что такое boxplot?

Boxplot (коробчатая диаграмма) — это способ визуализации распределения данных через их quartiles. Коробка отображает интерквартильный диапазон (IQR), который включает в себя центральные 50% данных. Уровни «усиков» (whiskers) обычно простираются до первого и третьего квартилей плюс/минус 1.5IQR. Все точки, выходящие за пределы этих усиков, считаются выбросами и отображаются отдельно.

2. Ваши наблюдения

Судя по вашему описанию, вы наблюдаете, что все ваши точки данных находятся вне усиков, что вызывает недоумение. Это может быть связано с тем, что ваши данные имеют значительное количество выбросов. В этом контексте, следующий шаг — проверка масштабов ваших данных.

3. Проверка данных

Сначала убедитесь, что вы правильно понимаете величины в вашем наборе данных. Если у вас, к примеру, только несколько значений, значительно превышающих средние незначительные значения, это приведет к тому, что большинство ваших данных будет классифицировано как выбросы. Попробуйте провести следующую проверку:

print(df['11'].describe())

Это позволит вам увидеть, как выглядят значения в данной колонке.

4. Проблемы с интервалами

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

Изменение длины усиков будет выглядеть следующим образом:

sns.boxplot(x='11', data=df, whis=2) # увеличиваем длину усиков до 2IQR

Проверьте, как изменится ваш график после этого изменения.

5. Объяснение из документации

Как упомянуто в документации Seaborn, «коробка показывает квартили выборки, в то время как усики показывают остальную часть распределения, за исключением точек, которые определяются как «выбросы»». И это значит, что если ваши данные действительно имеют большое количество выбросов, они будут отображены отдельно, оставляя «коробку» без записей.

6. Решение проблемы

Чтобы лучше понимать ваше распределение, используйте другие визуализации, такие как гистограммы или распределения kernel density estimation (KDE). Например:

sns.histplot(data=df, x='11', kde=True)
plt.show()

Это даст вам представление о распределении данных в целом.

Заключение

На основании вашего описания можно сделать вывод, что ваше поведение графика boxplot является нормальным для данных с большим количеством выбросов. Исследуйте данные более детально и используйте различные методы визуализации, чтобы получить более целостное представление о вашем наборе данных. Это позволит вам не только уложить ваши выводы в контекст, но и сделать более качественные выводы в процессе анализа выбранных методик обнаружения выбросов.

Оцените материал
Добавить комментарий

Капча загружается...