Plotando Distribuições Cumulativas Empíricas com Matplotlib

Beginner

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

Introdução

Este tutorial demonstra como plotar a função de distribuição cumulativa empírica (ECDF - empirical cumulative distribution function) de uma amostra e a CDF teórica usando Matplotlib. ECDFs também são conhecidas como curvas de "não-excedência" em engenharia, onde o valor y para um determinado valor x fornece a probabilidade de que uma observação da amostra esteja abaixo desse valor x. Por outro lado, a função de distribuição cumulativa complementar empírica (a ECCDF, ou curva de "excedência") mostra a probabilidade y de que uma observação da amostra esteja acima de um valor x.

Dicas para a VM

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Importar as bibliotecas necessárias

Nesta etapa, importaremos as bibliotecas necessárias. Usaremos as bibliotecas NumPy e Matplotlib para este tutorial.

import matplotlib.pyplot as plt
import numpy as np

Definir a semente aleatória e gerar os dados

Nesta etapa, definiremos a semente aleatória e geraremos os dados. Geraremos 100 pontos de dados de uma distribuição normal com média 200 e desvio padrão 25.

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

Criar a figura e os subplots

Nesta etapa, criaremos uma figura com dois subplots para as distribuições cumulativas. Também definiremos o tamanho da figura para 9x4.

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

Plotar as distribuições cumulativas

Nesta etapa, plotaremos as distribuições cumulativas. Usaremos o método .ecdf para plotar a ECDF (Empirical Cumulative Distribution Function - Função de Distribuição Cumulativa Empírica) e a ECDF complementar. Também plotaremos a CDF teórica usando uma distribuição normal com média 200 e desvio padrão 25.

## Cumulative distributions
axs[0].ecdf(data, label="CDF")
n, bins, patches = axs[0].hist(data, 25, density=True, histtype="step",
                               cumulative=True, label="Cumulative histogram")
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="Theory")

## Complementary cumulative distributions
axs[1].ecdf(data, complementary=True, label="CCDF")
axs[1].hist(data, bins=bins, density=True, histtype="step", cumulative=-1,
            label="Reversed cumulative histogram")
axs[1].plot(x, 1 - y, "k--", linewidth=1.5, label="Theory")

Rotular a figura

Nesta etapa, rotularemos a figura. Adicionaremos um título, linhas de grade e rótulos para os eixos x e y.

fig.suptitle("Cumulative Distributions")
for ax in axs:
    ax.grid(True)
    ax.legend()
    ax.set_xlabel("Annual rainfall (mm)")
    ax.set_ylabel("Probability of occurrence")
    ax.label_outer()

plt.show()

Resumo

Neste tutorial, aprendemos como plotar a função de distribuição cumulativa empírica (ECDF - Empirical Cumulative Distribution Function) e a CDF teórica usando Matplotlib. Também aprendemos como plotar a função de distribuição cumulativa complementar empírica (ECCDF - Empirical Complementary Cumulative Distribution Function) e o histograma cumulativo invertido. Seguindo as etapas descritas neste tutorial, você agora deve ser capaz de criar seus próprios gráficos de distribuição cumulativa usando Matplotlib.