web-dev-qa-db-fra.com

Ajuster une distribution normale à des données 1D

J'ai un tableau de 1 Dimentional et je peux calculer la "moyenne" et "l'écart type" de cet exemple et tracer la "distribution normale" mais j'ai un problème:

Je veux tracer les données et la distribution normale dans la même figure comme ci-dessous:

Je ne sais pas comment tracer à la fois les "données" et la "distribution normale"

une idée sur "fonction de densité de probabilité gaussienne dans scipy.stats"?

s = np.std(array)
m = np.mean(array)
plt.plot(norm.pdf(array,m,s))
32
Jax

Vous pouvez utiliser matplotlib pour tracer l'histogramme et le PDF (comme dans le lien dans la réponse de @ MrE). Pour ajuster et pour calculer le PDF, vous pouvez utiliser scipy.stats.norm, comme suit.

import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt


# Generate some data for this demonstration.
data = norm.rvs(10.0, 2.5, size=500)

# Fit a normal distribution to the data:
mu, std = norm.fit(data)

# Plot the histogram.
plt.hist(data, bins=25, density=True, alpha=0.6, color='g')

# Plot the PDF.
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std)
plt.plot(x, p, 'k', linewidth=2)
title = "Fit results: mu = %.2f,  std = %.2f" % (mu, std)
plt.title(title)

plt.show()

Voici l'intrigue générée par le script:

Plot

72
Warren Weckesser

Pour voir à la fois la distribution normale et vos données réelles, vous devez tracer vos données sous forme d'histogramme, puis dessiner la fonction de densité de probabilité par dessus. Voir l'exemple sur http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.normal.html pour savoir comment procéder.

3
YXD

Il existe un moyen beaucoup plus simple de le faire en utilisant seaborn:

import seaborn as sns
from scipy.stats import norm

data = norm.rvs(5,0.4,size=1000) # you can use a pandas series or a list if you want

sns.distplot(data)

sortie

pour plus d'informations: seaborn.distplot

0
LonelyDaoist