Comment générer et tracer des nombres aléatoires à partir d'une distribution normale (gaussienne) en utilisant python et matplotlib ?

Published: 28 août 2014

Updated: 12 février 2024

Tags: Python; Matplotlib;

DMCA.com Protection Status

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.

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.

Comment générer et tracer des nombres aléatoires à partir d'une distribution normale (gaussienne) en utilisant python et matplotlib ?
Comment générer et tracer des nombres aléatoires à partir d'une distribution normale (gaussienne) en utilisant python et matplotlib ?

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.

Comment générer et tracer des nombres aléatoires à partir d'une distribution normale (gaussienne) en utilisant python et matplotlib ?
Comment générer et tracer des nombres aléatoires à partir d'une distribution normale (gaussienne) en utilisant python et matplotlib ?

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 :

Comment générer et tracer des nombres aléatoires à partir d'une distribution normale (gaussienne) en utilisant python et matplotlib ?
Comment générer et tracer des nombres aléatoires à partir d'une distribution normale (gaussienne) en utilisant python et 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
Image

of