Python – travaux pratiques

Démarrage

  1. Dans un terminal, créer un répertoire de travail (par exemple : mkdir tp_python) et s’y placer (cd tp_python).
  2. Lancer anaconda-navigator depuis le terminal, puis jupyter notebook ou ipython depuis l'interface graphique
  3. Option ipython : on peut taper les commandes dans la fenêtre de commande, les programmes étant écrits dans votre éditeur de texte préféré. Option jupyter notebook : le notebook est fait de cellules qui peuvent être des cellules de texte (pour des explications) et des cellules de code (que l’on peut exécuter). Dans les indications données ici, il est implicite que les programmes commencent par
In [25]:
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as sps

On rappelle que l’aide Python pour une fonction appelée ma_fonction s’obtient en tapant : ? ma_fonction dans la console.

1. Prise en main

a) On considère n cartes numérotées de 0 à n − 1 et triées par ordre croissant.

  • on supprime la première carte,
  • on met la suivante à l’autre extrémité du paquet,
  • on recommence jusqu’à ce qu’il n’en reste qu’une. Ecrire un programme qui affiche la liste des cartes supprimées dans l’ordre de leurs suppressions, ainsi que la carte restante. Indication : on utilisera une boucle while et la récursivité n’est pas utile.

b) Soit f définie par $f(x) = sin(x)/x$ si $x\neq 0$ et $f(0) = 1$. Tracer son graphe sur $[−a,a]$ en rouge, pour $a = 20\pi$ par exemple. On pourra ajouter un titre et une légende. Indication : $\pi$ s’obtient avec np.pi, la commande plt.plot(x,y,color="r",label="ma legende") affiche en rouge la courbe affine par morceaux reliant les points d’abscisses x et d’ordonnées y, plt.legend(loc=’best’) affiche la légende définie plus haut avec label (en position optimale) et plt.title("mon titre") donne un titre à la figure.

2. Loi des Grands Nombres et Théorème Central Limite

a) Afin d'illustrer la Loi des Grands Nombres, visualiser la suite $S_n = X_1+···+X_n$ pour $X_i$ une suite de variables aléatoires indépendantes de loi uniforme sur $[−1, 1]$.

Indication : pour $x= [x_1,\dots ,x_n]$, la commande 'np.cumsum(x)' retourne le vecteur $$[x_1, x_1 +x_2, x_1 +x_2 +x_3,\dots, x_1 +\dots+x_n]$$ des sommes cumulées des coordonnées de $x$.

b) Faire de même avec des variables aléatoires $Y_i$ de loi de Cauchy, c-à-d de densité $$\frac 1 \pi \frac 1 {1+x^2},$$ qui s'obtiennent par $Y_i = \tan(\pi X_i /2)$. La suite $\frac {\sum Y_i}{n}$ semble t-elle converger ? Pourquoi ?

c) Calculer la moyenne $\mu$ et l'écart-type $\sigma$ des $X_i$ et vérifier, afin d'illustrer le Théorème Central Limite, que $\sqrt{n}(S_n − \mu)/\sigma$ converge en loi, lorsque $n \rightarrow\infty$ vers $\mathcal{N}(0,1)$ : on se fixera une grande valeur de $n$, on simulera un grand nombre de fois $\sqrt{n}(S_n − \mu)/\sigma$, on en tracera l'histogramme et on le comparera à la densité $\frac 1 {\sqrt{2\pi}\sigma}e^{-x^2/2}$ de $\mathcal{N}(0,1)$.

Indication : pour $x$ un tableau bidimensionnel de taille $n × p$, np.sum(x,axis=1) donne le tableau unidimensionnel de taille $n$ dont les coordonnées sont les sommes des lignes de $x$.

3. Lois continues

Dans ces exercices, on se propose d’identifier la loi d’une variable aléatoire $X$ en traçant l'histogramme d'un grand nombre, $X_1, . . . , X_n$, de réalisations indépendantes de $X$ et en le comparant à la densité supposée de $X$. On rappelle qu'un histogramme d'un échantillon est un diagramme en colonnes exprimant la répartition des valeurs de cet échantillon dans divers intervalles (la renormalisation est faite de façon à ce que l’aire totale vaille 1).

Commande Python :

    plt.hist(mon-echantillon,bins=mon-nombre-de-colonnes,density=1)

On peut aussi remplacer le paramètre mon-nombre-de-colonnes par le vecteur des abscisses (ordonnées dans l’ordre croissant) des bases des colonnes.

a) Soient $X$ et $Y$ des variables aléatoires de loi uniforme sur $[−1, 1]$ indépendantes. Illustrer, via un histogramme, le fait que $X + Y$ a pour densité $\rho(x) := \frac 1 4 \max(2 − |x|, 0)$. Indication : utiliser np.random.rand pour simuler $X$ et $Y$.

b) Soient $X$ et $Y$ des variables aléatoires de loi exponentielle de paramètre 1, indépendantes. Illustrer, via un histogramme, le fait que $X + Y$ a pour densité $\mathbf{1}_{x\geq 0}xe^{−x}$.

Indication : utiliser np.random.exponential

c) Illustrer la propriété d'absence de mémoire des lois exponentielles : si $X$ suit une loi exponentielle, alors pour tout $t > 0$, la loi de $X − t$ sachant que $X > t$ est la loi de $X$ (c'est la raison pour laquelle on utilise ces lois pour modéliser les durées de vie de composants sans usure).

Indication : pour $X$ vecteur de type numpy, $X[X>t]$ est le vecteur $X$ dans lequel on n'a gardé que les coordonnées plus grandes que $t$.

4. Lois discrètes

Un calcul simple montre que lorsque $n$ tend vers l’infini, la loi de binomiale $B(n, \lambda/n)$ tend vers la loi de Poisson de paramètre $\lambda$. En pratique, on assimile $B(n, p)$ à la loi de Poisson de paramètre $np$ dès que $np^2 < 0.1$. Illustrer cette proximité de lois en affichant, sur le même graphique, leurs histogrammes en bâtons (sans faire aucune simulation).

Indication : les fonctions sps.poisson.pmf et sps.binom.pmf donnent les probabilités associées aux différentes valeurs que peuvent prendre des variables aléatoires de loi de Poisson et de loi binomiale, la fonction plt.stem(x, y) affiche des barres verticales d’abs. x et hauteur y.