Построение эмпирических накопленных распределений с использованием Matplotlib

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом руководстве показано, как построить эмпирическую функцию накопленного распределения (ECDF) выборки и теоретическую Функцию накопленного распределения (CDF) с использованием Matplotlib. ECDF также известны как "кривые не превышения" в инженерном деле, где значение y для заданного значения x представляет вероятность того, что наблюдение из выборки меньше этого значения x. Наоборот, эмпирическая дополнительная функция накопленного распределения (ECCDF, или "кривая превышения") показывает вероятность y того, что наблюдение из выборки выше значения x.

Советы по работе с ВМ

После запуска ВМ перейдите в левый верхний угол и переключитесь на вкладку Notebook, чтобы получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

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

Импортируем необходимые библиотеки

В этом шаге мы импортируем необходимые библиотеки. Для этого руководства мы будем использовать библиотеки NumPy и Matplotlib.

import matplotlib.pyplot as plt
import numpy as np

Задаем случайный种子 и генерируем данные

В этом шаге мы зададим случайный种子 и сгенерируем данные. Мы сгенерируем 100 точек данных из нормального распределения с математическим ожиданием 200 и стандартным отклонением 25.

np.random.seed(19680801)
mu = 200
sigma = 25
data = np.random.normal(mu, sigma, size=100)

Создаем фигуру и подграфики

В этом шаге мы создадим фигуру с двумя подграфиками для накопленных распределений. Также установим размер фигуры в 9x4.

fig = plt.figure(figsize=(9, 4), layout="constrained")
axs = fig.subplots(1, 2, sharex=True, sharey=True)

Построим накопленные распределения

В этом шаге мы построим накопленные распределения. Мы будем использовать метод .ecdf для построения ECDF и дополнительного ECDF. Также построим теоретическую CDF с использованием нормального распределения с математическим ожиданием 200 и стандартным отклонением 25.

## Накопленные распределения
axs[0].ecdf(data, label="CDF")
n, bins, patches = axs[0].hist(data, 25, density=True, histtype="step",
                               cumulative=True, label="Накопленная гистограмма")
x = np.linspace(data.min(), data.max())
y = ((1 / (np.sqrt(2 * np.pi) * sigma)) *
     np.exp(-0.5 * (1 / sigma * (x - mu))**2))
y = y.cumsum()
y /= y[-1]
axs[0].plot(x, y, "k--", linewidth=1.5, label="Теория")

## Дополнительные накопленные распределения
axs[1].ecdf(data, complementary=True, label="CCDF")
axs[1].hist(data, bins=bins, density=True, histtype="step", cumulative=-1,
            label="Обратная накопленная гистограмма")
axs[1].plot(x, 1 - y, "k--", linewidth=1.5, label="Теория")

Пометим фигуру

В этом шаге мы присвоим метки фигуре. Добавим заголовок, сетку и метки для осей x и y.

fig.suptitle("Накопленные распределения")
for ax in axs:
    ax.grid(True)
    ax.legend()
    ax.set_xlabel("Годовое количество осадков (мм)")
    ax.set_ylabel("Вероятность наступления")
    ax.label_outer()

plt.show()

Резюме

В этом уроке мы узнали, как построить эмпирическую накопленную функцию распределения (ECDF) и теоретическую CDF с использованием Matplotlib. Мы также узнали, как построить эмпирическую дополнительную накопленную функцию распределения (ECCDF) и обратную накопленную гистограмму. Следуя шагам, изложенным в этом уроке, вы теперь должны быть в состоянии создать собственные графики накопленных распределений с использованием Matplotlib.