Изображение выше представляет собой прямоугольник. Прямоугольная диаграмма-это стандартизированный способ отображения распределения данных на основе сводки из пяти чисел (“минимум”, первый квартиль (Q1), медиана, третий квартиль (Q3) и “максимум”). Он может рассказать вам о ваших выбросах и о том, каковы их ценности. Он также может сообщить вам, симметричны ли ваши данные, насколько плотно ваши данные сгруппированы, и если и как ваши данные искажены. Этот учебник будет включать в себя:
- Что такое boxplot?
- Понимание анатомии бокс-графика путем сравнения бокс-графика с функцией плотности вероятности для нормального распределения.
- Как вы создаете и интерпретируете бокс-графики с помощью Python?
Как всегда, код, используемый для создания графиков, доступен на моем github . С этого и начнем!
Для некоторых распределений/наборов данных вы обнаружите, что вам нужно больше информации, чем меры центральной тенденции (медиана, среднее значение и режим), как показано на рисунке ниже (изображение взято из здесь ) Вам нужна информация об изменчивости или дисперсии данных. Прямоугольная диаграмма-это график, который дает хорошее представление о том, как распределены значения в данных. Хотя боковые диаграммы могут показаться примитивными по сравнению с гистограммой или плотностью , они имеют преимущество в том, что занимают меньше места, что полезно при сравнении распределений между многими группами или наборами данных. Бокс-графики-это стандартизированный способ отображения распределения данных на основе сводки из пяти чисел (“минимум”, первый квартиль (Q1), медиана, третий квартиль (Q3) и “максимум”).
медиана (Q2/50-й процентиль): среднее значение набора данных.
первый квартиль (Q1/25-й процентиль): среднее число между наименьшим числом (не “минимальным”) и медианой набора данных.
третий квартиль (Q3/75-й процентиль): среднее значение между медианой и самым высоким значением (не “максимальным”) набора данных.
межквартильный диапазон (IQR): от 25-го до 75-го процентиля.
усы (показаны синим цветом)
выбросы (показаны зелеными кружками)
“максимум”: Q3 + 1.5*IQR
“минимум”: Q1 -1,5*IQR
Что определяет выброс, “минимум” или”максимум”, возможно, еще не ясно. В следующем разделе мы постараемся прояснить это для вас.
Изображение выше представляет собой сравнение квадратной диаграммы почти нормального распределения и функции плотности вероятности (pdf) для нормального распределения. Причина, по которой я показываю вам это изображение, заключается в том, что просмотр статистического распределения является более обычным делом, чем просмотр квадратного графика. Другими словами, это может помочь вам понять схему коробки. Этот раздел будет охватывать многие вещи, в том числе:
- Как выглядят выбросы (для нормального распределения) .7% данных.
- Что такое “минимум” и “максимум”
Функция плотности вероятности
Эта часть поста очень похожа на статью 68-95-99.7 правила , но адаптирована для блокплота. Чтобы понять, откуда берутся проценты, важно знать о функции плотности вероятности (PDF). PDF используется для указания вероятности того, что случайная переменная попадет в определенный диапазон значений, а не примет какое-либо одно значение. Эта вероятность задается интегралом PDF этой переменной в этом диапазоне, то есть она задается областью под функцией плотности, но выше горизонтальной оси и между наименьшими и наибольшими значениями диапазона. Это определение может не иметь большого смысла, поэтому давайте проясним его, построив график функции плотности вероятности для нормального распределения. Приведенное ниже уравнение является функцией плотности вероятности для нормального распределения. Давайте упростим это, предположив, что у нас есть среднее значение (μ) 0 и стандартное отклонение (σ) 1. Это можно изобразить с помощью чего угодно, но я предпочитаю изобразить это с помощью
# Import all libraries for this portion of the blog post from scipy.integrate import quad import numpy as np import matplotlib.pyplot as plt %matplotlib inline x = np.linspace(-4, 4, num = 100) constant = 1.0 / np.sqrt(2*np.pi) pdf_normal_distribution = constant * np.exp((-x**2) / 2.0) fig, ax = plt.subplots(figsize=(10, 5)); ax.plot(x, pdf_normal_distribution); ax.set_ylim(0); ax.set_title('Normal Distribution', size = 20); ax.set_ylabel('Probability Density', size = 20);
График выше показывает не вероятность событий, а их плотность вероятности . Чтобы получить вероятность события в заданном диапазоне, нам нужно будет интегрировать. Предположим, что мы заинтересованы в нахождении вероятности случайной точки данных в пределах межквартильного диапазона .6745 стандартное отклонение среднего значения, нам нужно интегрировать от-.6745 до .6745. Это можно сделать с помощью SciPy.
# Make PDF for the normal distribution a function def normalProbabilityDensity(x): constant = 1.0 / np.sqrt(2*np.pi) return(constant * np.exp((-x**2) / 2.0) ) # Integrate PDF from -.6745 to .6745 result_50p, _ = quad(normalProbabilityDensity, -.6745, .6745, limit = 1000) print(result_50p)
То же самое можно сделать для “минимума” и “максимума”.
# Make a PDF for the normal distribution a function def normalProbabilityDensity(x): constant = 1.0 / np.sqrt(2*np.pi) return(constant * np.exp((-x**2) / 2.0) ) # Integrate PDF from -2.698 to 2.698 result_99_3p, _ = quad(normalProbabilityDensity, -2.698, 2.698, limit = 1000) print(result_99_3p)
Как упоминалось ранее, выбросы-это оставшиеся .7% процентов данных. Важно отметить, что для любого PDF-файла площадь под кривой должна быть равна 1 (вероятность извлечения любого числа из диапазона функции всегда равна 1).
Boxplots с использованием библиотек Matplotlib, Pandas и Seaborn (Python)
Видео выше-это бесплатное видео предварительного просмотра из курса Python для визуализации данных . В последнем разделе мы рассмотрели boxplot на нормальном распределении, но поскольку вы, очевидно, не всегда будете иметь базовое нормальное распределение, давайте рассмотрим, как использовать boxplot на реальном наборе данных. Для этого мы будем использовать набор данных Рак молочной железы Висконсин (Диагностический) . Если у вас нет учетной записи Kaggle, вы можете загрузить набор данных с my github .
Прочитайте данные
Приведенный ниже код считывает данные в фрейм данных pandas.
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # Put dataset on my github repo df = pd.read_csv('https://raw.githubusercontent.com/mGalarnyk/Python_Tutorials/master/Kaggle/BreastCancerWisconsin/data/data.csv')
График Boxplot
Ниже используется прямоугольная диаграмма для анализа взаимосвязи между категориальным признаком (злокачественная или доброкачественная опухоль) и непрерывным признаком (area_mean). Есть несколько способов построить график с помощью Python. Вы можете построить график с помощью seaborn, pandas или seaborn.
сиборн
Приведенный ниже код передает фрейм данных pandas df
в boxplot seaborn.
sns.boxplot(x='diagnosis', y='area_mean', data=df)
matplotlib
Бокс-графики, которые вы видели в этом посте, были сделаны с помощью matplotlib. Этот подход может быть гораздо более утомительным, но может дать вам больший уровень контроля.
malignant = df[df['diagnosis']=='M']['area_mean'] benign = df[df['diagnosis']=='B']['area_mean'] fig = plt.figure() ax = fig.add_subplot(111) ax.boxplot([malignant,benign], labels=['M', 'B'])
Имейте в виду, что вы можете сделать это намного красивее, немного поработав.
панды
Вы можете построить boxplot, вызвав .boxplot()
в своем фрейме данных. Приведенный ниже код создает прямоугольную диаграмму столбца area_mean в отношении различных диагнозов.
df.boxplot(column = 'area_mean', by = 'diagnosis'); plt.title('')
Зазубренный Участок
Зазубренная прямоугольная диаграмма позволяет оценить доверительные интервалы (по умолчанию 95% доверительный интервал) для медиан каждой квадратной диаграммы.
malignant = df[df['diagnosis']=='M']['area_mean'] benign = df[df['diagnosis']=='B']['area_mean'] fig = plt.figure() ax = fig.add_subplot(111) ax.boxplot([malignant,benign], notch = True, labels=['M', 'B']);
Интерпретация Boxplot
Наука о данных-это передача результатов, поэтому имейте в виду, что вы всегда можете сделать свои бокс-графики немного красивее, немного поработав (код здесь ). Используя график, мы можем сравнить диапазон и распределение area_mean для злокачественной и доброкачественной диагностики. Мы наблюдаем, что существует большая вариабельность для области злокачественных опухолей, а также более крупные выбросы. Кроме того, поскольку выемки на бокс-диаграммах не перекрываются, вы можете с уверенностью на 95% заключить, что истинные медианы действительно отличаются. Вот еще несколько вещей, которые следует иметь в виду о коробочных диаграммах:
- Имейте в виду, что вы всегда можете извлечь данные из boxplot в случае, если вы хотите знать, каковы числовые значения для различных частей boxplot.
- Matplotlib сначала оценивает нормальное распределение и вычисляет квартили из оцененных параметров распределения. Медиана и квартили рассчитываются непосредственно на основе данных. Другими словами, ваш график может выглядеть по-разному в зависимости от распределения ваших данных и размера выборки, например, асимметрично и с большим или меньшим количеством выбросов.
Надеюсь, это было не слишком много информации о коробочных сюжетах. Будущие учебные пособия возьмут некоторые из этих знаний и расскажут, как применить их к пониманию доверительных интервалов. Мой следующий учебник посвящен Как использовать и создавать таблицу Z (стандартную нормальную таблицу) . Если у вас есть какие-либо вопросы или мысли по учебнику, не стесняйтесь обращаться к нам в комментариях ниже, через страницу видео YouTube или через Twitter .