Для чого використовується боксплот?
Боксплот — це простий графік, який допомагає швидко зрозуміти групу чисел, а також порівняти різні групи чисел. Він показує, де знаходяться більшість чисел, наскільки вони розкидані, і чи є якісь незвичайні значення. Це чудовий інструмент для виявлення шаблонів, аномалій та різниць, тому його часто використовують для швидкого аналізу даних.
Що показує боксплот?
Боксплот показує таку інформацію для групи чисел:
- Середнє число (медіана): Це число, яке знаходиться посередині, коли всі числа розташовані від найменшого до найбільшого.
- Розмах більшості чисел (міжквартильний розмах): Він малює коробку навколо середньої групи чисел — тих, що не дуже високі, не дуже низькі, а ближчі до середини. Ця коробка покриває середні 50% чисел.
- Найменші та найбільші "нормальні" числа: Лінії, які називаються "вуса", виступають з коробки і показують, як далеко розкидані числа, не враховуючи дуже незвичайні.
- Незвичайні числа (викиди): Якщо число набагато вище або нижче за більшість інших, його показують як точку або маленьку мітку за межами вусів.
Боксплоти в цих контекстах дають чітке уявлення про те, як значення розподілені, допомагаючи приймати рішення, аналізувати шаблони, визначати тенденції, області для покращення та виявляти аномалії для подальшого вивчення.
Приклади з повсякденного життя, де можна використовувати боксплоти
Освіта: Оцінки на іспитах
- Приклад: Порівняйте оцінки з математики у студентів
- Використання: Зрозуміти, яка школа має кращі результати
Охорона здоров’я: Час відновлення пацієнтів
- Приклад: Порівняйте часи відновлення при різних методах лікування
- Використання: Визначити, яке лікування є найбільш ефективним (найкоротший час відновлення)
Навколишнє середовище: Якість повітря
- Приклад: Дослідження рівнів забруднення повітря з часом
- Використання: Виявлення та реагування на аномальні значення
Бізнес: Рівні запасів
- Приклад: Порівняйте рівні запасів різних продуктів на складі
- Використання: Виявлення незвично високих/низьких запасів
Індустрія: Аналіз часу простою машин
- Приклад: Моніторинг часу простою машини протягом певного періоду
- Використання: Виявлення очікуваних втрат
Комбінування боксплоту зі свормплотом
Для кращого розуміння розподілу даних додаткова візуальна інформація, така як свормплот, може бути корисною. Для більших наборів даних часто більш корисним є віоліновий графік.
Позначення та кольорування боксплоту
У стандартній бібліотеці matplot позначення значень на боксплоті не є простим.
Для чого використовується боксплот?
Боксплот — це простий графік, який допомагає швидко зрозуміти групу чисел і порівняти різні групи. Він показує, де знаходяться більшість чисел, наскільки вони розкидані і чи є якісь незвичайні значення. Це відмінний інструмент для виявлення шаблонів, аномалій та відмінностей, тому він є незамінним для швидкого аналізу даних.
Що показує боксплот?
Боксплот надає таку інформацію для групи чисел:
- Середнє число (медіана): Це число, яке знаходиться посередині, коли всі значення впорядковані від найменшого до найбільшого.
- Розмах більшості значень (міжквартильний розмах): Боксплот малює коробку навколо середніх значень — тих, що не надто високі, не надто низькі, а ближчі до середини. Ця коробка покриває середні 50% значень.
- Найменші та найбільші "нормальні" значення: Лінії, які називаються "вуса", виступають з коробки, показуючи, як далеко розкидані значення, без врахування дуже незвичайних.
- Незвичайні значення (викиди): Якщо значення набагато вище або нижче більшості інших, воно показується як точка чи маленька мітка за межами вусів.
Боксплоти в цих контекстах надають чітке уявлення про те, як значення розподілені, що допомагає приймати рішення, аналізувати шаблони, визначати тенденції, області для покращення та аномалії для подальшого вивчення.
Приклади з повсякденного життя, де можна використовувати боксплоти
Освіта: Оцінки на іспитах
- Приклад: Порівняйте оцінки з математики у студентів
- Використання: Зрозуміти, яка школа має кращі результати
Охорона здоров’я: Час відновлення пацієнтів
- Приклад: Порівняйте часи відновлення при різних методах лікування
- Використання: Визначити, яке лікування є найбільш ефективним (найкоротший час відновлення)
Навколишнє середовище: Якість повітря
- Приклад: Дослідження рівнів забруднення повітря з часом
- Використання: Виявлення та реагування на аномальні значення
Бізнес: Рівні запасів
- Приклад: Порівняйте рівні запасів різних продуктів на складі
- Використання: Виявлення незвично високих/низьких запасів
Індустрія: Аналіз часу простою машин
- Приклад: Моніторинг часу простою машини протягом певного періоду
- Використання: Виявлення очікуваних втрат
Комбінування боксплоту зі свормплотом
Для кращого розуміння розподілу даних додаткова візуальна інформація, така як свормплот, може бути корисною. Для більших наборів даних часто більш корисним є віоліновий графік.
Позначення та кольорування боксплоту
У стандартній бібліотеці matplot позначення значень на боксплоті не є простим.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# Колірні визначення, див. графіку під назвою 'Coloring Parameters'
figure_facecolor_color = 'black' # 1
axes_facecolor_color = 'black' # 2
axes_edgecolor_color = 'white' # 3
title_color='white' #4
meanprops_markerfacecolor_color = 'yellow' # 5
meanprops_markeredgecolor_color = 'white' # 6
text_max_value_color = 'limegreen' # 7; найвищий викид
text_upper_whisker_color ='orange' # 8
text_q3_value_color = 'orange' # 9
text_median_color = 'yellow' # 10
text_q1_value_color = 'orange' # 11
text_lower_whisker_color = 'orange' # 12
text_min_value_color = 'limegreen' # 13; найнижчий викид
xlabel_color = 'white' # 14
swarmplot_color = 'limegreen' # 15
grid_color = 'gray' # 16
boxprops_edge_color = 'orange' # 17
boxprops_facecolor_color = 'mediumblue' # 18
medianprops_color = 'yellow' # 19
ylabel_color = 'white' # 20
tick_params_color = 'white' # 21
whiskerprops_color = 'orange' # 22
capprops_color = 'orange' # 23
# Дані для презентації
np.random.seed(42) # Початкове значення для відтворюваності
# Генерація 120 випадкових значень із нормального розподілу
mean = 125 # Середина між 100 і 150
std_dev = (150 - 100) / 6 # Приблизне стандартне відхилення для вміщення 99.7% значень в межах діапазону
values = np.random.normal(loc=mean, scale=std_dev, size=120)
values = np.clip(values, 100, 150) # Обрізка значень, щоб вони потрапляли в діапазон 100-150
df = pd.DataFrame({'Random Values': values}) # Створення DataFrame
# Обчислення значень для боксплоту
median = df.median() # Обчислення медіани
q1 = df.quantile(0.25) # Обчислення 25% квартилю
q3 = df.quantile(0.75) # Обчислення 75% квартилю
# Перетворення значень на тип float
median_value = float(median.iloc[0])
q1_value = float(q1.iloc[0])
q3_value = float(q3.iloc[0])
# Визначення значень для вусів (найближчі точки в межах меж)
# Обчислення IQR
iqr = q3_value - q1_value
# Обчислення меж вусів
lower_whisker_limit = q1_value - 1.5 * iqr
upper_whisker_limit = q3_value + 1.5 * iqr
lower_whisker = df['Random Values'][df['Random Values'] >= lower_whisker_limit].min()
upper_whisker = df['Random Values'][df['Random Values'] <= upper_whisker_limit].max()
# Визначення найвищих та найнижчих викидів
max_value = df.max().max()
min_value = df.min().min()
upper_outlier = True if max_value > upper_whisker else False
lower_outlier = True if min_value < lower_whisker else False
# Налаштування фону графіка
plt.rcParams['axes.facecolor'] = axes_facecolor_color
plt.rcParams['axes.edgecolor'] = axes_edgecolor_color
plt.rcParams['figure.facecolor'] = figure_facecolor_color
# Створення нової фігури розміром 8x6 дюймів
plt.figure(figsize=(8, 6))
# Обчислення розміру пікселя в координатах даних для визначення кроку пікселя
ax = plt.gca() # Поточна вісь
ylim = ax.get_ylim() # Масштаб по осі y
pixel_height = (ylim[1] - ylim[0]) / ax.figure.dpi # Розмір одного пікселя в координатах даних
pixel_height = 50 * pixel_height # бажаний крок пікселів
# Створення боксплоту з свормплотом
sns.boxplot(data=df, y='Random Values', showmeans=True, meanprops={"marker":"o", "markerfacecolor":meanprops_markerfacecolor_color, "markeredgecolor":meanprops_markeredgecolor_color},
boxprops=dict(facecolor=boxprops_facecolor_color, edgecolor=boxprops_edge_color), whiskerprops=dict(color=whiskerprops_color), capprops=dict(color=capprops_color), medianprops=dict(color=medianprops_color))
sns.swarmplot(data=df, y='Random Values', color=swarmplot_color, alpha=0.8)
# Дизайн для графіку
plt.title('Боксплот/Свормплот з відображеними значеннями', color=title_color)
plt.ylabel("Значення", color = ylabel_color)
plt.xlabel("Вибірки", color = xlabel_color)
plt.tick_params(colors = tick_params_color)
plt.grid(color = grid_color, linestyle='--', linewidth=0.5)
# Відображення значень на графіку
plt.text(0.4, median_value + pixel_height, f'{median_value:.2f}', ha='right', color = text_median_color, fontsize=12)
plt.text(0.4, q1_value + pixel_height, f'{q1_value:.2f}', ha='right', color=text_q1_value_color, fontsize=12)
plt.text(0.4, q3_value + pixel_height, f'{q3_value:.2f}', ha='right', color=text_q3_value_color, fontsize=12)
plt.text(0.2, lower_whisker + pixel_height, f'{lower_whisker:.2f}', ha='right', color=text_lower_whisker_color, fontsize=12)
plt.text(0.2, upper_whisker + pixel_height, f'{upper_whisker:.2f}', ha='right', color=text_upper_whisker_color, fontsize=12)
# Максимальні та мінімальні значення відображаються тільки, якщо вони дійсно є викидами
if upper_outlier == True:
plt.text(0.4, max_value + pixel_height, f'{max_value:.2f}', ha='right', color=text_max_value_color, fontsize=12)
if lower_outlier == True:
plt.text(0.4, min_value + pixel_height, f'{min_value:.2f}', ha='right', color=text_min_value_color, fontsize=12)
# Відображення графіку
plt.show()
Сподіваюся, цей код допоможе вам швидше та легше здійснити налаштування дизайну.
Перекладено з: Boxplot with Data Labels and Color Customization in Python