Introduction
Pour générer des nombres aléatoires à partir d'une distribution normale (gaussienne) en Python, vous pouvez utiliser le module random ou la bibliothèque numpy. Voici des exemples qui démontrent les deux méthodes.
Table des matières
En utilisant le module aléatoire de numpy.
Le module random dans numpy est particulièrement utile lorsqu'on travaille avec de grands ensembles de données, car il permet de générer rapidement et avec précision des nombres et des tableaux aléatoires à des fins de test.
Générer des nombres aléatoires à partir d'une distribution normale standard
Pour générer des nombres aléatoires à partir d'une distribution normale standard avec une moyenne de 0 et un écart type de 1, utilisez la méthode suivante :
import numpy as np
import matplotlib.pyplot as plt
data = np.random.randn(100000)
hx, hy, _ = plt.hist(data, bins=50, density=1,color="lightblue")
plt.ylim(0.0,max(hx)+0.05)
plt.title('Generate random numbers \n from a standard normal distribution with python')
plt.grid()
plt.savefig("numpy_random_numbers_stantard_normal_distribution.png", bbox_inches='tight')
plt.show()
Le code ci-dessus générera 100 000 nombres aléatoires à partir d'une distribution normale standard avec une moyenne de 0 et un écart type de 1. Le graphique de l'histogramme résultant montre la courbe en forme de cloche caractéristique d'une distribution normale.
Générer des nombres aléatoires à partir d'une distribution normale
Générer des nombres aléatoires à partir d'une distribution normale standard nous permet de générer des nombres aléatoires à partir de n'importe quelle distribution normale. Cela peut être réalisé en utilisant la formule $$X = Z * \sigma + \mu$$ où Z représente des nombres aléatoires issus d'une distribution normale standard, $\sigma$ désigne l'écart-type et $\mu$ représente la moyenne.
import numpy as np
import matplotlib.pyplot as plt
mu = 10.0
sigma = 2.0
data = np.random.randn(100000) * sigma + mu
hx, hy, _ = plt.hist(data, bins=50, density=1,color="lightblue")
plt.ylim(0.0,max(hx)+0.05)
plt.title('Generate random numbers \n from a normal distribution with python')
plt.grid()
plt.savefig("numpy_random_numbers_normal_distribution.png", bbox_inches='tight')
plt.show()
Le code ci-dessus générera 100 000 nombres aléatoires à partir d'une distribution normale avec une moyenne de 10 et un écart-type de 2. Le graphique de l'histogramme résultant montre que les données sont plus concentrées autour de la moyenne par rapport à l'exemple précédent qui avait un écart-type de 1.
En utilisant la fonction gaussienne fournie par le module random de Python
Une approche alternative consiste à utiliser la fonction gaussienne fournie par le module random de Python.
from random import gauss
gauss(100,15)
Par exemple, voici un nombre généré aléatoirement à titre d'exemple :
82.13399330852374
Il est alors possible de créer une liste de nombres aléatoires suivant une distribution gaussienne comme ceci:
x = [gauss(100,15) for i in range(10000)]
et le tracer en utilisant matplotlib :
from random import gauss
import matplotlib.pyplot as plt
x = [gauss(100,15) for i in range(10000)]
num_bins = 50
n, bins, patches = plt.hist(x, num_bins, density=1, facecolor='green', alpha=0.5)
plt.show()
De plus, la sortie de ce code peut être enregistrée en tant qu'image ou manipulée davantage à l'aide des nombreuses fonctionnalités de matplotlib :
Cela permet une analyse plus approfondie et la visualisation des données suivant une distribution gaussienne. D'autres distributions telles que Poisson, binomiale et exponentielle peuvent également être simulées et représentées de manière similaire.
Références
Liens | Site |
---|---|
Normal distribution | en.wikipedia.org |
numpy.random.randn | docs.scipy.org |
numpy.random.normal | docs.scipy.org |