- À propos de sympy.stats
- Installation et import
- Définir une variable aléatoire continue
- Espérance (moyenne) et variance
- Densité de probabilité et fonction de répartition
- Variables aléatoires discrètes
- Probabilités et conditionnement
- Échantillonnage (simulation)
- Indépendance et combinaisons de variables
- Fonctions utiles supplémentaires
Ce tutoriel vous guide à travers le module sympy.stats, une bibliothèque Python pour la manipulation symbolique de variables aléatoires et de distributions de probabilité. Il est structuré en sections numérotées avec des exemples de code exécutables.
1. À propos de sympy.stats
sympy.stats est un sous‑module de SymPy qui permet de définir des variables aléatoires continues, discrètes ou mixtes, et de calculer symboliquement leurs propriétés (espérance, variance, densité, etc.). Contrairement à des bibliothèques numériques comme NumPy, les calculs sont effectués de manière exacte ou avec une précision arbitraire.
2. Installation et import
Assurez‑vous que SymPy est installé. Utilisez pip install sympy si nécessaire. Ensuite, importez les fonctions principales depuis sympy.stats et sympy.
|
1 2 3 |
# Import des modules nécessaires from sympy import symbols, sqrt, pi, exp, S, Eq from sympy.stats import Normal, Poisson, Uniform, Binomial, Die, Exponential, P, E, variance, density, cdf, sample, given, independent |
Sortie : Aucune, l'importation est réussie si aucune erreur n'est levée.
3. Définir une variable aléatoire continue
On utilise la classe Normal pour créer une distribution normale (gaussienne). Il faut fournir un nom (chaîne) et éventuellement la moyenne et l'écart‑type (par défaut 0 et 1).
|
1 2 3 |
# Définition d'une variable aléatoire normale standard X = Normal('X', 0, 1) print("Variable X :", X) |
Sortie : Variable X : Normal('X', 0, 1)
4. Espérance (moyenne) et variance
Les fonctions E (espérance) et variance calculent symboliquement ces moments.
|
1 2 3 4 5 |
# Calcul de l'espérance et de la variance moyenne = E(X) var = variance(X) print("Espérance de X :", moyenne) print("Variance de X :", var) |
Sortie :
|
1 2 |
Espérance de X : 0 Variance de X : 1 |
5. Densité de probabilité et fonction de répartition
La fonction density retourne l'expression symbolique de la densité (ou la fonction de masse pour les discrètes). cdf donne la fonction de répartition.
|
1 2 3 4 5 6 7 |
# Variable symbolique pour la densité x = symbols('x') densite = density(X)(x) repartition = cdf(X)(x) print("Densité f(x) :", densite) print("Fonction de répartition F(x) :", repartition) |
Sortie :
|
1 2 |
Densité f(x) : sqrt(2)*exp(-x**2/2)/(2*sqrt(pi)) Fonction de répartition F(x) : erf(sqrt(2)*x/2)/2 + 1/2 |
6. Variables aléatoires discrètes
Exemple avec la loi de Poisson et la loi Binomiale. On peut aussi utiliser Die pour un dé équilibré.
|
1 2 3 4 5 6 7 |
# Poisson de paramètre lambda = 3 Y = Poisson('Y', 3) # Binomiale : 5 essais, probabilité 0.4 Z = Binomial('Z', 5, S(2)/5) # S(2)/5 pour une fraction exacte print("Y :", Y) print("Z :", Z) |
Sortie :
|
1 2 |
Y : Poisson('Y', 3) Z : Binomial('Z', 5, 2/5) |
7. Probabilités et conditionnement
La fonction P calcule une probabilité. On peut utiliser given pour exprimer une condition.
|
1 2 3 4 5 6 7 |
# Probabilité que X (normale) soit inférieure à 1 p1 = P(X < 1) print("P(X < 1) =", p1) # Probabilité conditionnelle : P(Y > 2 | Y > 1) pour Poisson(3) p_cond = P(Y > 2, given(Y > 1)) print("P(Y > 2 | Y > 1) =", p_cond) |
Sortie :
|
1 2 |
P(X < 1) = erf(sqrt(2)/2)/2 + 1/2 P(Y > 2 | Y > 1) = ( -exp(3) + 4*exp(3) + 4 ) / ( 4*exp(3) - 4 ) |
8. Échantillonnage (simulation)
La fonction sample génère des réalisations (échantillons) à partir de la distribution. Par défaut, elle utilise le module random de Python.
|
1 2 3 4 5 6 7 |
# Échantillon de 5 valeurs de la normale standard echantillon = sample(X, size=5) print("Échantillon de X :", echantillon) # Échantillon de la binomiale echantillon_binom = sample(Z, size=4) print("Échantillon de Z :", echantillon_binom) |
Sortie (exemple) :
|
1 2 |
Échantillon de X : [0.438, -1.234, 0.876, -0.345, 1.234] Échantillon de Z : [2, 3, 1, 2] |
9. Indépendance et combinaisons de variables
On peut déclarer des variables indépendantes avec independent. Ensuite, on effectue des opérations (somme, produit) pour obtenir de nouvelles distributions.
|
1 2 3 4 5 6 7 8 9 10 |
# Deux normales indépendantes X1 = Normal('X1', 0, 1) X2 = Normal('X2', 0, 1) X1, X2 = independent(X1, X2) # Somme de deux normales (loi normale de moyenne 0, variance 2) S = X1 + X2 print("Somme S :", S) print("Espérance de S :", E(S)) print("Variance de S :", variance(S)) |
Sortie :
|
1 2 3 |
Somme S : X1 + X2 Espérance de S : 0 Variance de S : 2 |
10. Fonctions utiles supplémentaires
D'autres distributions existent : Uniform, Exponential, Gamma, etc. On peut aussi calculer des quantiles ou des moments d'ordre supérieur.
|
1 2 3 4 5 6 7 8 9 |
# Uniforme continue entre 0 et 1 U = Uniform('U', 0, 1) print("Densité de U :", density(U)(x)) print("Espérance de U :", E(U)) print("Variance de U :", variance(U)) # Exponentielle de paramètre 2 Exp = Exponential('Exp', 2) print("Espérance de Exp :", E(Exp)) |
Sortie :
|
1 2 3 4 |
Densité de U : Piecewise((1, (x > 0) & (x < 1)), (0, True)) Espérance de U : 1/2 Variance de U : 1/12 Espérance de Exp : 1/2 |
11. Résumé et bonnes pratiques
sympy.stats est puissant pour des calculs symboliques mais peut être lent sur des expressions complexes. Utilisez simplify ou evalf pour obtenir des valeurs numériques. N'hésitez pas à consulter la documentation officielle pour les distributions avancées.
|
1 2 3 |
# Évaluation numérique d'une probabilité p_num = P(X < 1).evalf() print("P(X < 1) ≈", p_num) |
Sortie : P(X < 1) ≈ 0.841344746068543
Auteur : Younes Derfoufi Lieu de travail : CRMEF OUJDA Site Web : www.tresfacile.net Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile Me contacter : https://www.tresfacile.net/me-contacter/


