Il existe de nombreux phénomènes dus au hasard dans la réalité, et il peut être utile, parfois numériquement, de pouvoir modéliser ces phénomènes pour balayer les différents cas/scénarios possibles. En Python, le module random contient plusieurs fonctions pour pouvoir générer des nombres ou des suites de nombres aléatoires.
Générez des nombres aléatoires
Premièrement, importez votre module random. Le nom du package en Python est... random :
import random
La fonction de base de génération de nombre aléatoire s’appelle... random() également (quelle originalité ;)). Elle va générer un float aléatoire compris entre 0 et 1 non inclus. Réalisez un exemple simple en affichant 3 nombres aléatoires :
Naturellement, si vous réalisez le même code chez vous, vous obtiendrez des résultats différents !
Tout à fait ! Mais ceux qui ont créé le package random ont heureusement pensé à tout. Vous avez d’autres fonctions vous permettant de générer un nombre aléatoire dans un intervalle donné :
uniform(a, b)
: va générer un float aléatoire compris entrea
etb
;randint(a, b)
: comme son nom le suggère, celle-ci est similaire àuniform
, sauf que le nombre aléatoire généré est cette fois-ci un entier !
Vous pourrez utiliser l’une ou l’autre en fonction de vos besoins !
Générez un nombre aléatoire selon une distribution donnée
Le module random permet également de générer un nombre aléatoire suivant une distribution. L’une des plus connues est la loi gaussienne (ou normale). Si vous ne la connaissez pas encore, laissez-moi vous la présenter !
La loi normale est l’une des lois de probabilité les plus adaptées pour modéliser des phénomènes naturels issus de plusieurs événements aléatoires. Ce sont l’ensemble de ces phénomènes où la majeure partie des individus se situent autour d’une moyenne, avec des proportions décroissantes en dessous et au-dessus de cette moyenne. Voici un exemple très parlant, avec la répartition de la population par quotient intellectuel :
Le module random vous permet de générer des nombres aléatoires selon cette loi : c’est-à-dire que l’on a beaucoup plus de chances d’avoir des valeurs proches de la moyenne (avec l’exemple ci-dessus, entre 85 et 115) que des valeurs extrêmes (proches de 70 ou 130). La fonction correspondante s’appelle gauss(moyenne, écart-type)
.
Voici un exemple avec une loi centrée en 0 et avec un écart-type de 1 (loi normale "classique") :
On visualise bien ici, avec 10 valeurs, que la majorité des valeurs sont proches de 0.
Choisissez aléatoirement dans une liste : sous-échantillonnage
Comme vous le savez déjà, pour sélectionner un élément dans une liste, il faut le faire via son indice. Si vous voulez sélectionner un élément aléatoirement dans une liste, une solution un peu naïve pourrait être de tirer l’indice aléatoirement. Le module random va un peu plus loin en proposant une fonction permettant de faire la sélection directement sur la liste : la fonction choice
.
L’évolution de celle-ci est la fonction choices
, permettant cette fois-ci de sélectionner un échantillon de la liste initiale, avec remise :
On parle alors de sous-échantillonnage. La fonction correspondante, pour un échantillon sans remise, est sample
:
En analyse de données, cette notion de sous-échantillonnage est primordiale, elle permet de sélectionner un échantillon d’une population initiale. En statistique, un échantillon est un ensemble d’individus représentatifs d’une population. Le recours à un sous-échantillonnage répond en général à une contrainte pratique (manque de temps, de place, coût financier…) ne permettant pas l’étude exhaustive de toute la population.
Pour aller plus loin
Le module random propose plus de fonctions que celles présentées dans ce cours, même si vous avez néanmoins parcouru les plus utilisées en pratique. Si vous souhaitez aller plus loin, vous pouvez consulter la documentation officielle du module random, qui liste toutes les possibilités offertes par ce dernier.
Sachez également que le package numpy, que nous avons rapidement évoqué lors du chapitre précédent, reprend également le module random. Vous y retrouverez l’ensemble des fonctions vues ci-dessus. L’ensemble des fonctions sont accessibles via la ligne (par exemple) :
import numpy.random as random
En résumé
Vous avez vu les principales fonctionnalités disponibles via le module random. Vous pouvez à présent :
générer un nombre aléatoire, entier ou décimal, dans un intervalle donné ;
générer un nombre aléatoire suivant une distribution donnée ;
choisir aléatoirement un ou plusieurs éléments dans une liste, avec ou sans remise.