Traccia CDF Matplotlib Python

Suraj Joshi 15 febbraio 2024
Traccia CDF Matplotlib Python

Questo tutorial spiega come possiamo generare un grafico CDF usando Matplotlib in Python. CDF è la funzione i cui valori y rappresentano la probabilità che una variabile casuale assuma valori minori o uguali al valore x corrispondente.

Traccia CDF usando Matplotlib in Python

CDF è definito per distribuzioni di probabilità sia continue che discrete. Nella distribuzione di probabilità continua, la variabile casuale può assumere qualsiasi valore dall’intervallo specificato, ma nella distribuzione di probabilità discreta, possiamo avere solo un insieme di valori specificato.

Traccia CDF per la distribuzione discreta utilizzando Matplotlib in Python

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 7)
y = [0.2, 0.1, 0.1, 0.2, 0.1, 0.3]
cdf = np.cumsum(y)

plt.plot(x, y, marker="o", label="PMF")
plt.plot(x, cdf, marker="o", label="CDF")
plt.xlim(0, 7)
plt.ylim(0, 1.5)
plt.xlabel("X")
plt.ylabel("Probability Values")
plt.title("CDF for discrete distribution")
plt.legend()
plt.show()

Produzione:

Traccia CDF per la distribuzione discreta utilizzando Matplotlib in Python

Traccia il PMF e il CDF per la distribuzione data. Per calcolare i valori y per CDF, usiamo il metodo numpy.cumsum() per calcolare la somma cumulativa di un array.

Se ci vengono dati i conteggi di frequenza, dobbiamo normalizzare inizialmente i valori y in modo che rappresentino il PDF.

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1, 7)
frequency = np.array([3, 8, 4, 5, 3, 6])
pdf = frequency / np.sum(frequency)
cdf = np.cumsum(pdf)

plt.plot(x, pdf, marker="o", label="PMF")
plt.plot(x, cdf, marker="o", label="CDF")
plt.xlim(0, 7)
plt.ylim(0, 1.5)
plt.xlabel("X")
plt.ylabel("Probability Values")
plt.title("CDF for discrete distribution")
plt.legend()
plt.show()

Produzione:

Traccia CDF per la distribuzione discreta usando Matplotlib in Python dopo la normalizzazione

Qui ci vengono dati i valori di frequenza per ogni valore X. Convertiamo i valori di frequenza in valori pdf dividendo ogni elemento dell’array pdf per la somma delle frequenze. Quindi usiamo il pdf per calcolare i valori CDF per tracciare il CDF di dati dati.

Possiamo anche utilizzare grafici a istogramma per visualizzare i grafici CDF e PDF, che saranno più intuitivi per dati discreti.

import numpy as np
import matplotlib.pyplot as plt

data = [3, 4, 2, 3, 4, 5, 4, 7, 8, 5, 4, 6, 2, 1, 0, 9, 7, 6, 6, 5, 4]
plt.hist(data, bins=9, density=True)
plt.hist(data, bins=9, density=True, cumulative=True, label="CDF", histtype="step")
plt.xlabel("X")
plt.ylabel("Probability")
plt.xticks(np.arange(0, 10))
plt.title("CDF using Histogram Plot")
plt.show()

Produzione:

Plot CDF per distribuzione discreta utilizzando Histogram Plots

Traccia il CDF e il PDF di dati dati utilizzando il metodo hist(). Per tracciare il CDF, impostiamo cumulative=True e impostiamo density=True per ottenere un istogramma che rappresenti i valori di probabilità che sommano a 1.

Traccia CDF per la distribuzione continua usando Matplotlib in Python

import numpy as np
import matplotlib.pyplot as plt

dx = 0.005
x = np.arange(-10, 10, dx)
y = 0.25 * np.exp((-(x ** 2)) / 8)

y = y / (np.sum(dx * y))
cdf = np.cumsum(y * dx)

plt.plot(x, y, label="pdf")
plt.plot(x, cdf, label="cdf")
plt.xlabel("X")
plt.ylabel("Probability Values")
plt.title("CDF for continuous distribution")
plt.legend()
plt.show()

Produzione:

Traccia CDF per la distribuzione continua usando Matplotlib in Python

Traccia il PMF e il CDF per la distribuzione continua data. Per calcolare i valori y per CDF, usiamo il metodo numpy.cumsum() per calcolare la somma cumulativa di un array.

Dividiamo y per la somma dell’array y moltiplicato per dx per normalizzare i valori in modo che i valori di CDF siano compresi tra 0 e 1.

Autore: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn